obsidian-integration-testing 17.2.0 → 17.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/lib/cjs/apply-obsidian-theme.cjs +95 -0
  2. package/dist/lib/cjs/apply-obsidian-theme.d.cts +99 -0
  3. package/dist/lib/cjs/capture-obsidian-screenshot.cjs +17 -1
  4. package/dist/lib/cjs/capture-obsidian-screenshot.d.cts +41 -2
  5. package/dist/lib/cjs/deterministic-raster.cjs +31 -0
  6. package/dist/lib/cjs/deterministic-raster.d.cts +37 -0
  7. package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
  8. package/dist/lib/cjs/eval-in-obsidian.d.cts +60 -0
  9. package/dist/lib/cjs/index.cjs +9 -1
  10. package/dist/lib/cjs/index.d.cts +4 -0
  11. package/dist/lib/cjs/library.cjs +1 -1
  12. package/dist/lib/cjs/namespace-bootstrap.cjs +51 -7
  13. package/dist/lib/cjs/pin-window-focus.cjs +60 -0
  14. package/dist/lib/cjs/pin-window-focus.d.cts +76 -0
  15. package/dist/lib/cjs/soft-keyboard.cjs +16 -1
  16. package/dist/lib/cjs/soft-keyboard.d.cts +2 -1
  17. package/dist/lib/cjs/transport-desktop-cdp.cjs +3 -1
  18. package/dist/lib/esm/apply-obsidian-theme.d.mts +99 -0
  19. package/dist/lib/esm/apply-obsidian-theme.mjs +70 -0
  20. package/dist/lib/esm/capture-obsidian-screenshot.d.mts +41 -2
  21. package/dist/lib/esm/capture-obsidian-screenshot.mjs +17 -1
  22. package/dist/lib/esm/deterministic-raster.d.mts +37 -0
  23. package/dist/lib/esm/deterministic-raster.mjs +7 -0
  24. package/dist/lib/esm/eval-in-obsidian.d.mts +60 -0
  25. package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
  26. package/dist/lib/esm/index.d.mts +4 -0
  27. package/dist/lib/esm/index.mjs +9 -1
  28. package/dist/lib/esm/library.mjs +1 -1
  29. package/dist/lib/esm/namespace-bootstrap.mjs +51 -7
  30. package/dist/lib/esm/pin-window-focus.d.mts +76 -0
  31. package/dist/lib/esm/pin-window-focus.mjs +36 -0
  32. package/dist/lib/esm/soft-keyboard.d.mts +2 -1
  33. package/dist/lib/esm/soft-keyboard.mjs +16 -1
  34. package/dist/lib/esm/transport-desktop-cdp.mjs +3 -1
  35. package/package.json +1 -1
@@ -79,4 +79,4 @@ ${sanitizedDetail}`);
79
79
  0 && (module.exports = {
80
80
  evalInObsidian
81
81
  });
82
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEVkaXRvcixcbiAgTW9kaWZpZXIsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3VtZW50cyxcbiAgQ29udGV4dElkXG59IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU5hbWVzcGFjZUNhbGxQYXJhbXMgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQge1xuICBnZXRUcmFuc3BvcnRPcHRpb25zLFxuICBnZXRWYXVsdFBhdGhcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB7IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCB9IGZyb20gJy4vbmFtZXNwYWNlLWJvb3RzdHJhcC5janMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmludGVyZmFjZSBFdmFsRXJyb3JFbnZlbG9wZSB7XG4gIHR5cGU6ICdlcnJvcic7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCBlbnZlbG9wZSByZXR1cm5lZCBieSB0aGUgcmVnaXN0ZXJlZCBgZXZhbFdyYXBwZXJgIGZyb20gaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICpcbiAqIC0gYEV2YWxFcnJvckVudmVsb3BlYCBcdTIwMTQgYGNhbGxiYWNrYCB0aHJldzsgYHZhbHVlYCBpcyB0aGUgc2VyaWFsaXplZCBlcnJvci5cbiAqIC0gYEV2YWxVbmRlZmluZWRFbnZlbG9wZWAgXHUyMDE0IGBjYWxsYmFja2AgcmV0dXJuZWQgYHVuZGVmaW5lZGAuXG4gKiAtIGBFdmFsVmFsdWVFbnZlbG9wZWAgXHUyMDE0IGBjYWxsYmFja2AgcmV0dXJuZWQgYSBKU09OLXNlcmlhbGl6YWJsZSB2YWx1ZS5cbiAqL1xudHlwZSBFdmFsUmVzdWx0RW52ZWxvcGUgPVxuICB8IEV2YWxFcnJvckVudmVsb3BlXG4gIHwgRXZhbFVuZGVmaW5lZEVudmVsb3BlXG4gIHwgRXZhbFZhbHVlRW52ZWxvcGU7XG5cbmludGVyZmFjZSBFdmFsVW5kZWZpbmVkRW52ZWxvcGUge1xuICB0eXBlOiAndW5kZWZpbmVkJztcbn1cblxuaW50ZXJmYWNlIEV2YWxWYWx1ZUVudmVsb3BlIHtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYi5jbGlja0VsZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWNrRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbW91c2UgYnV0dG9uIHRvIHByZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xlZnQnYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uPzogTW91c2VCdXR0b247XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGNsaWNrLiBUaGUgcG9pbnRlciBpcyBtb3ZlZCB0byBpdHMgY2VudGVyLiBUaGlzIGlzIGEgbGl2ZVxuICAgKiByZW5kZXJlciBET00gbm9kZSBcdTIwMTQgdGhlIGNhbGxiYWNrIHJ1bnMgaW4tcmVuZGVyZXIsIHNvIG5vIGNyb3NzLXByb2Nlc3NcbiAgICogc2VyaWFsaXphdGlvbiBpcyBuZWVkZWQgKHNhbWUgYXMge0BsaW5rIFR5cGVJbnRvRWRpdG9yUGFyYW1zLmVkaXRvcn0pLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQsIHVzaW5nIE9ic2lkaWFuJ3Mge0BsaW5rIE1vZGlmaWVyfSBuYW1lcy4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBMaWIuY2xpY2tNb3VzZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpY2tNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbW91c2UgYnV0dG9uIHRvIHByZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xlZnQnYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uPzogTW91c2VCdXR0b247XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQsIHVzaW5nIE9ic2lkaWFuJ3Mge0BsaW5rIE1vZGlmaWVyfSBuYW1lcy4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBjbGljayBhdC5cbiAgICovXG4gIHJlYWRvbmx5IHg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHkgY29vcmRpbmF0ZSAod2ViLWNvbnRlbnRzIERJUCkgdG8gY2xpY2sgYXQuXG4gICAqL1xuICByZWFkb25seSB5OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJndW1lbnRzIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB7QGxpbmsgQXBwfSBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIGxpYnJhcnkgYmFnIGluamVjdGVkIGludG8gZXZlcnkgY2FsbGJhY2sgXHUyMDE0IHNlZSB7QGxpbmsgTGlifS5cbiAgICpcbiAgICogTmV2ZXIgZW1wdHk6IHRoZSBoYXJuZXNzIHByZS1wb3B1bGF0ZXMgYSAqKmJhc2UqKiBzZXQgb2YgcmVuZGVyZXItZHJpdmluZ1xuICAgKiBoZWxwZXJzICh0cnVzdGVkIGlucHV0IFx1MjAxNCBgdHlwZUludG9FZGl0b3JgIC8gYHByZXNzS2V5YCAvIGBtb3ZlTW91c2VgIC9cbiAgICogYGNsaWNrTW91c2VgIC8gYGhvdmVyRWxlbWVudGAgLyBgdW5ob3ZlckVsZW1lbnRgIC8gYGNsaWNrRWxlbWVudGAgXHUyMDE0IHBsdXNcbiAgICogYHdhaXRVbnRpbGAsIGBjcmVhdGVOb3RlYCBhbmQgYG9wZW5TZXR0aW5nc1RhYmApLCBhbmQgcHJvdmlkZXIgcGFja2FnZXNcbiAgICogKGNoaWVmbHkgYG9ic2lkaWFuLWRldi11dGlsc2ApIGBPYmplY3QuYXNzaWduYCB0aGVpciB3aG9sZSByZW5kZXJlci1zYWZlXG4gICAqIGxpYnJhcnkgb24gdG9wIHZpYSB7QGxpbmsgcmVnaXN0ZXJMaWJSZXNvbHZlcn0uIEEgc2VyaWFsaXplZCBjbG9zdXJlIHJlYWNoZXNcbiAgICogZXZlcnkgc2hhcmVkIGhlbHBlciB0aHJvdWdoIGBsaWJgIFx1MjAxNCBgbGliLnR5cGVJbnRvRWRpdG9yKHsgZWRpdG9yLCB0ZXh0IH0pYCxcbiAgICogYGxpYi5nZXRGaWxlT3JOdWxsKHsgYXBwLCBcdTIwMjYgfSlgIFx1MjAxNCBpbnN0ZWFkIG9mIGltcG9ydGluZyBvciBoYW5kLXJvbGxpbmcgdGhlbS5cbiAgICovXG4gIGxpYjogTGliO1xuXG4gIC8qKlxuICAgKiBUaGUgYG9ic2lkaWFuYCBtb2R1bGUsIHJlc29sdmVkIGF0IHJ1bnRpbWUgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICAgKi9cbiAgb2JzaWRpYW5Nb2R1bGU6IHR5cGVvZiBvYnNpZGlhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgTGliLmNyZWF0ZU5vdGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5vdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5vdGUncyBjb250ZW50LiBUaGlzIGV4YWN0IHN0cmluZyBpcyB3aGF0IHRoZSBjcmVhdGVkIG5vdGUgaXMgcmVhZCBiYWNrXG4gICAqIGFnYWluc3QsIHNvIGl0IGlzIHRoZSBkZWZpbml0aW9uIG9mIGEgc3VjY2Vzc2Z1bCB3cml0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggdG8gY3JlYXRlLCBleHRlbnNpb24gaW5jbHVkZWQuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIGluIHRoZSBPYnNpZGlhbiBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2s6IChpbnB1dDogQ29tbW9uQXJndW1lbnRzICYgQ29udGV4dEFyZ3VtZW50czxUQ29udGV4dElkPiAmIElucHV0KSA9PiBQcm9taXNhYmxlPFJlc3VsdD47XG5cbiAgLyoqXG4gICAqIEEge0BsaW5rIENvbnRleHRJZH0gbGlua2luZyB0aGlzIGNhbGwgdG8gYSBwZXJzaXN0ZW50IHN0b3JlIG9uIGB3aW5kb3dgXG4gICAqIGluIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgYSB0eXBlZCBgY29udGV4dGAgb2JqZWN0XG4gICAqIHRoYXQgc3Vydml2ZXMgYWNyb3NzIGNhbGxzIHNoYXJpbmcgdGhlIHNhbWUgSUQuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgYGNvbnRleHRgIGlzIGEgZnJlc2ggZW1wdHkgb2JqZWN0IGVhY2ggY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHRJZD86IFRDb250ZXh0SWQ7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLiBWYWx1ZXMgbWF5IGluY2x1ZGUgZnVuY3Rpb25zIFx1MjAxNFxuICAgKiB0aGV5IGFyZSBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAuXG4gICAqL1xuICByZWFkb25seSBpbnB1dD86IElucHV0O1xuXG4gIC8qKlxuICAgKiBTa2lwcyBwcmUtZmxpZ2h0IGNoZWNrcyAodmF1bHQgcmVnaXN0cmF0aW9uLCBDTEkgYXZhaWxhYmlsaXR5KS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHZhdWx0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQgZm9yIHRoaXMgY2FsbC4gV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSB0cmFuc3BvcnRcbiAgICogY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIgKHNldCBieSB0aGUgZnJhbWV3b3JrIGFkYXB0ZXIncyBnbG9iYWwgc2V0dXApLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNwb3J0PzogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiB2YXVsdC4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcGxhaW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgTGliLmhvdmVyRWxlbWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG92ZXJFbGVtZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGhvdmVyLiBUaGUgcG9pbnRlciBpcyBtb3ZlZCB0byBpdHMgY2VudGVyLiBUaGlzIGlzIGEgbGl2ZVxuICAgKiByZW5kZXJlciBET00gbm9kZSBcdTIwMTQgdGhlIGNhbGxiYWNrIHJ1bnMgaW4tcmVuZGVyZXIsIHNvIG5vIGNyb3NzLXByb2Nlc3NcbiAgICogc2VyaWFsaXphdGlvbiBpcyBuZWVkZWQgKHNhbWUgYXMge0BsaW5rIFR5cGVJbnRvRWRpdG9yUGFyYW1zLmVkaXRvcn0pLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhlIHNoYXJlZCBsaWJyYXJ5IGJhZyBpbmplY3RlZCBpbnRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2sgYXNcbiAqIHtAbGluayBDb21tb25Bcmd1bWVudHMubGlifS5cbiAqXG4gKiBUd28gbGF5ZXJzIGNvbXBvc2UgaW50byB0aGlzIG9uZSBiYWcuIFRoZSAqKmJhc2UqKiBcdTIwMTQgdGhlIGhhcm5lc3MtcHJvdmlkZWRcbiAqIHJlbmRlcmVyLWRyaXZpbmcgaGVscGVycyBkZWNsYXJlZCBiZWxvdyAodGhlIHRydXN0ZWQtaW5wdXQgcHJpbWl0aXZlcyBhbmRcbiAqIHtAbGluayBMaWIud2FpdFVudGlsfSkgXHUyMDE0IGlzIGFsd2F5cyBwcmVzZW50LiBPbiB0b3AsIHByb3ZpZGVyIHBhY2thZ2VzIHJlZ2lzdGVyXG4gKiBhIHJlbmRlcmVyLXNpZGUgcmVzb2x2ZXIgdmlhIHtAbGluayByZWdpc3RlckxpYlJlc29sdmVyfSB0byBgT2JqZWN0LmFzc2lnbmBcbiAqIHRoZWlyIHdob2xlIHJlbmRlcmVyLXNhZmUgbGlicmFyeSBhdCBydW50aW1lLCBhbmQgYXVnbWVudCB0aGlzICoqYXVnbWVudGFibGUqKlxuICogaW50ZXJmYWNlICh0aGUgYGkxOG5leHRgIGBDdXN0b21UeXBlT3B0aW9uc2AgaWRpb20pIHZpYVxuICogYGRlY2xhcmUgbW9kdWxlICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJ2AgdG8gdHlwZSBpdC4gTXVsdGlwbGUgcHJvdmlkZXJzXG4gKiBjb21wb3NlOiB0aGVpciBleHBvcnRzIG1lcmdlIGF0IHJ1bnRpbWUgYW5kIHRoZWlyIGF1Z21lbnRhdGlvbnMgbWVyZ2UgaW4gdGhlXG4gKiB0eXBlIHN5c3RlbSAoYGludGVyZmFjZSBMaWIgZXh0ZW5kcyBcdTIwMjZgKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGRlY2xhcmUgbW9kdWxlICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyB7XG4gKiAgIGludGVyZmFjZSBMaWIgZXh0ZW5kcyAodHlwZW9mIGltcG9ydCgnb2JzaWRpYW4tZGV2LXV0aWxzL19fbWVyZ2VkJykpIHt9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWIge1xuICAvKipcbiAgICogQ2xpY2tzIHRoZSBjZW50ZXIgb2YgYW4gZWxlbWVudCB1c2luZyAqKnRydXN0ZWQqKiBwb2ludGVyIGlucHV0IFx1MjAxNCBFbGVjdHJvbidzXG4gICAqIGBzZW5kSW5wdXRFdmVudGAgb24gZGVza3RvcCwgYSBDRFAgdG91Y2ggdGFwIGluIHRoZSBXZWJWaWV3IG9uIG1vYmlsZS5cbiAgICpcbiAgICogVGhlIGVsZW1lbnQtcmVsYXRpdmUgY291bnRlcnBhcnQgb2Yge0BsaW5rIExpYi5jbGlja01vdXNlfSwgbWlycm9yaW5nIHRoZVxuICAgKiB7QGxpbmsgTGliLm1vdmVNb3VzZX0gLyB7QGxpbmsgTGliLmhvdmVyRWxlbWVudH0gc3BsaXQuIFVzZVxuICAgKiB7QGxpbmsgTGliLmNsaWNrTW91c2V9IGRpcmVjdGx5IHdoZW4gdGhlIHBvaW50IHRvIGNsaWNrIGlzICoqbm90KiogdGhlXG4gICAqIGVsZW1lbnQncyBjZW50ZXIgXHUyMDE0IHRoZSBtYXJrZG93biBlZGl0b3IncyBtYXJnaW4sIGZvciBpbnN0YW5jZSwgbGllcyBpbnNpZGVcbiAgICogYGNtLnNjcm9sbERPTWAgYnV0IG91dHNpZGUgYC5jbS1zaXplcmAsIHNvIG5vIGVsZW1lbnQncyBjZW50ZXIgbGFuZHMgb24gaXQuXG4gICAqXG4gICAqICoqTXVzdCBiZSBhd2FpdGVkLioqIE9uIG1vYmlsZSB0aGUgaW5qZWN0aW9uIGlzIGEgcm91bmQtdHJpcCB0byB0aGUgaG9zdCBcdTIwMTRcbiAgICogdGhlIHJlbmRlcmVyIGNhbm5vdCBwcm9kdWNlIGEgdHJ1c3RlZCBldmVudCBpdHNlbGYgXHUyMDE0IHNvIGEgbWlzc2luZyBgYXdhaXRgXG4gICAqIHdvdWxkIGxldCB0aGUgYXNzZXJ0aW9uIHJ1biBiZWZvcmUgdGhlIGNsaWNrIGxhbmRlZC5cbiAgICpcbiAgICogKipPbiBtb2JpbGUgaXQgd2FpdHMgZm9yIHRoZSBlbGVtZW50IHRvIHN0b3AgbW92aW5nLCBhbmQgcmVmdXNlcyBhIGNvdmVyZWRcbiAgICogb25lLioqIFRoZSB0YXAgcmVhY2hlcyB0aGUgcGFnZSBhYm91dCBhIHNlY29uZCBhZnRlciBpdHMgcG9pbnQgaXMgcmVhZCxcbiAgICogYW5kIE9ic2lkaWFuIE1vYmlsZSBzbGlkZXMgYSBtb2RhbCBpbiB3aXRoIGEgYHRyYW5zZm9ybWAgdHJhbnNpdGlvbiB0aGF0XG4gICAqIGNhbiBob2xkIGZvciBvdmVyIGEgc2Vjb25kLCBzbyBhIHBvaW50IHJlYWQgdG9vIGVhcmx5IGlzIHdoZXJlIHRoZVxuICAgKiBjb250cm9sICp1c2VkIHRvIGJlKi4gU28gdGhlIG1vYmlsZSBwYXRoIGZpcnN0IHdhaXRzICh1cCB0byA1IHMpIHVudGlsIG5vIGZpbml0ZVxuICAgKiBhbmltYXRpb24gb3IgdHJhbnNpdGlvbiBydW5zIG9uIHRoZSBlbGVtZW50IG9yIGFueSBhbmNlc3RvciBhbmQgaXRzIGJveFxuICAgKiBoYXMgaGVsZCBhY3Jvc3MgdHdvIHJlYWRzLCB0aGVuIGNoZWNrcyB3aXRoIGBlbGVtZW50RnJvbVBvaW50YCB0aGF0IHRoZVxuICAgKiBjZW50ZXIgYmVsb25ncyB0byB0aGUgZWxlbWVudCAoYXNrZWQgb2YgdGhlIGVsZW1lbnQncyBvd24gcm9vdCwgc28gYVxuICAgKiB0YXJnZXQgaW5zaWRlIGEgc2hhZG93IHJvb3QgaXMgaGl0LXRlc3RlZCBpbiBpdHMgb3duIHRyZWUpLiBJdCB0aHJvd3MgYSBuYW1lZCBlcnJvciBpbiBlaXRoZXIgY2FzZVxuICAgKiByYXRoZXIgdGhhbiB0YXBwaW5nLCBiZWNhdXNlIGEgdHJ1c3RlZCB0YXAgZ29lcyB0byB3aGF0ZXZlciBpcyBvbiB0b3AgYW5kXG4gICAqIHdvdWxkIG90aGVyd2lzZSBsYW5kIG9uIGl0IHNpbGVudGx5LiBVc2Uge0BsaW5rIExpYi5jbGlja01vdXNlfSB0byB0YXAgYVxuICAgKiBwb2ludCBkZWxpYmVyYXRlbHksIGNvdmVyZWQgb3Igbm90LiBEZXNrdG9wIGlzIHVuY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGNsaWNrLCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzXG4gICAqICAgdG8gaG9sZC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjbGljayBoYXMgYmVlbiBpbmplY3RlZC5cbiAgICovXG4gIGNsaWNrRWxlbWVudDogKHRoaXM6IHZvaWQsIHBhcmFtczogQ2xpY2tFbGVtZW50UGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDbGlja3MgYXQgdGhlIGdpdmVuIHdlYi1jb250ZW50cyBjb29yZGluYXRlcyB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvblxuICAgKiBwb2ludGVyIGlucHV0LCBzbyBDaHJvbWl1bSBzeW50aGVzaXplcyBhIHJlYWwgYGNsaWNrYCAob3IgYGNvbnRleHRtZW51YCxcbiAgICogZm9yIHRoZSByaWdodCBidXR0b24pIHdpdGggYGlzVHJ1c3RlZCA9PT0gdHJ1ZWAuXG4gICAqXG4gICAqIFRoaXMgaXMgd2hhdCBgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKWAgY2Fubm90IGRvOlxuICAgKiBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvciBnYXRlIG9uIGBpc1RydXN0ZWRgLCBzbyBhIGRpc3BhdGNoZWQgZXZlbnQgc2lsZW50bHlcbiAgICogZXhlcmNpc2VzIG5vdGhpbmcgd2hpbGUgdGhlIHRlc3Qgc3RpbGwgcGFzc2VzIHdoYXRldmVyIHdlYWtlciBhc3NlcnRpb24gaXRcbiAgICogbWFrZXMuIE9ic2lkaWFuIDEuMTMuNydzIG1hcmtkb3duIHZpZXdwb3J0IChtYXJnaW4pIG1lbnUsIGZvciBleGFtcGxlLFxuICAgKiBvcGVucyBmcm9tIGEgYGNtLnNjcm9sbERPTWAgYGNvbnRleHRtZW51YCBsaXN0ZW5lciBndWFyZGVkIGJ5XG4gICAqIGBlLmlzVHJ1c3RlZGAsIHdoaWNoIGEgZGlzcGF0Y2hlZCBldmVudCBuZXZlciBnZXRzIHBhc3QuXG4gICAqXG4gICAqIEl0IGlzIHRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlOiBhIHNpbmdsZSB0cnVzdGVkIGBtb3VzZU1vdmVgIFx1MjE5MiBgbW91c2VEb3duYCBcdTIxOTJcbiAgICogYG1vdXNlVXBgIGF0IG9uZSBwb2ludCwgd2l0aCBubyB3YWl0aW5nIGZvciBhbnkgZWZmZWN0IChjYWxsZXJzIHBvbGwgdGhlaXJcbiAgICogb3duIHJlYWRpbmVzcyBzaWduYWwpLiBUaGUgbGVhZGluZyBtb3ZlIGlzIHdoYXQgcHV0cyB0aGUgcG9pbnRlciBvdmVyIHRoZVxuICAgKiBoaXQtdGVzdCB0YXJnZXQgYmVmb3JlIHRoZSBidXR0b24gZ29lcyBkb3duLiBQcmVmZXJcbiAgICoge0BsaW5rIExpYi5jbGlja0VsZW1lbnR9IGZvciBlbGVtZW50LXJlbGF0aXZlIGNsaWNrcy5cbiAgICpcbiAgICogQSByZWFsIGNvbnRleHQgbWVudSBhY3R1YWxseSBvcGVucywgc28gYSBzdWl0ZSBkcml2aW5nIGEgcmlnaHQgY2xpY2sgbXVzdFxuICAgKiBjbG9zZSBpdCAob3IgcmVtb3ZlIHRoZSBsZWZ0b3ZlciBgLm1lbnVgIGVsZW1lbnQpIGJlZm9yZSB0aGUgbmV4dCB0ZXN0LlxuICAgKlxuICAgKiAqKk9uIG1vYmlsZSoqIHRoZSBidXR0b24gbW9kZWwgZG9lcyBub3Qgc3Vydml2ZSB0aGUgcG9ydDogdG91Y2ggaGFzIG5vXG4gICAqIGJ1dHRvbnMsIHNvIGAnbGVmdCdgICh0aGUgZGVmYXVsdCkgaXMgYSAqKnRhcCoqLCBgJ3JpZ2h0J2AgaXMgdGhlXG4gICAqICoqbG9uZy1wcmVzcyoqIHRoYXQgb3BlbnMgT2JzaWRpYW4gTW9iaWxlJ3MgY29udGV4dCBtZW51LCBhbmQgYCdtaWRkbGUnYFxuICAgKiB0aHJvd3MgXHUyMDE0IHRoZXJlIGlzIG5vIGdlc3R1cmUgZm9yIGl0LCBhbmQgaW52ZW50aW5nIG9uZSB3b3VsZCBiZSB3b3JzZSB0aGFuXG4gICAqIHNheWluZyBzby4gVGhlIGNvb3JkaW5hdGVzIGFyZSBDU1MgcGl4ZWxzIGluIHRoZSBXZWJWaWV3J3Mgb3duIHZpZXdwb3J0LFxuICAgKiB3aGljaCBpcyB3aGF0IENEUCB0YWtlcywgc28gYGRldmljZVBpeGVsUmF0aW9gIG5ldmVyIGVudGVycyB0aGUgcGljdHVyZS5cbiAgICpcbiAgICogKipNdXN0IGJlIGF3YWl0ZWQqKiBcdTIwMTQgc2VlIHtAbGluayBMaWIuY2xpY2tFbGVtZW50fS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB3ZWItY29udGVudHMgRElQIGNvb3JkaW5hdGVzIHRvIGNsaWNrIGF0LCB0aGUgYnV0dG9uIHRvXG4gICAqICAgcHJlc3MgYW5kIGFueSBtb2RpZmllcnMgdG8gaG9sZC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjbGljayBoYXMgYmVlbiBpbmplY3RlZC5cbiAgICovXG4gIGNsaWNrTW91c2U6ICh0aGlzOiB2b2lkLCBwYXJhbXM6IENsaWNrTW91c2VQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBub3RlIGFuZCBkb2VzIG5vdCByZXR1cm4gdW50aWwgaXRzIGNvbnRlbnQgaXMgdmVyaWZpYWJseSBvblxuICAgKiBkaXNrLCByZXdyaXRpbmcgaXQgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGBhcHAudmF1bHQuY3JlYXRlYCBpbiBhbnkgc3VpdGUgdGhhdCBtYXkgcnVuIG9uXG4gICAqIEFuZHJvaWQuIFRoZSBlbXVsYXRvciB0cmFuc3BvcnQgbG9zZXMgcm91Z2hseSAqKjAuOSAlKiogb2YgYHZhdWx0LmNyZWF0ZWBcbiAgICogd3JpdGVzIChtZWFzdXJlZDogNyBsb3N0IGluIDgwMCBjcmVhdGVzKTogdGhlIGZpbGUgbGFuZHMgKiowIGJ5dGVzKiogb25cbiAgICogZGlzayB3aGlsZSBPYnNpZGlhbidzIGluLW1lbW9yeSBgVEZpbGUuc3RhdGAgcmVwb3J0cyB0aGUgZnVsbCBieXRlIGNvdW50LFxuICAgKiBhbmQgaXQgZG9lcyBub3QgaGVhbCBvbiBpdHMgb3duLiBBIHN1aXRlIGRvaW5nIH4zNCBjcmVhdGVzIHBlciBydW5cbiAgICogdGhlcmVmb3JlIGhhcyBhIH4yNiAlIGNoYW5jZSBvZiBhdCBsZWFzdCBvbmUgbG9zdCB3cml0ZSwgYW5kIHdoaWNoZXZlciB0ZXN0XG4gICAqIGxvc2VzIHRoYXQgbG90dGVyeSBmYWlscyBvbiBhIGB3YWl0VW50aWxgIGZvciBjb250ZW50IHRoYXQgd2FzIG5ldmVyXG4gICAqIHdyaXR0ZW4gXHUyMDE0IHdoaWNoIGlzIHdoeSBpdCByZWFkcyBhcyBhbiB1bnJlbGF0ZWQgcGVyLXRlc3QgZmxha2UgcmF0aGVyIHRoYW5cbiAgICogb25lIHNoYXJlZCBjYXVzZS5cbiAgICpcbiAgICogVmVyaWZpY2F0aW9uIGlzIGJ5ICoqcmVhZGluZyB0aGUgbm90ZSBiYWNrKiosIG5ldmVyIGJ5IGluc3BlY3RpbmdcbiAgICogYFRGaWxlLnN0YXRgOiBgc3RhdGAgaXMgZXhhY3RseSB0aGUgZmllbGQgdGhhdCBsaWVzIGhlcmUuIEEgcmV3cml0ZSB0aHJvdWdoXG4gICAqIGB2YXVsdC5tb2RpZnlgIHdpdGggdGhlIHNhbWUgY29udGVudCBsYW5kcyBjb3JyZWN0bHkgKGFsc28gbWVhc3VyZWQpLCBzbyBhXG4gICAqIGxvc3Qgd3JpdGUgY29zdHMgYSByZXRyeSByYXRoZXIgdGhhbiBhIGZhaWx1cmUuIEEgbm90ZSB3aG9zZSBjb250ZW50IHN0aWxsXG4gICAqIGRvZXMgbm90IG1hdGNoIGFmdGVyIHRoZSBib3VuZGVkIHJldHJpZXMgdGhyb3dzLCBuYW1pbmcgdGhlIHBhdGggYW5kIGJvdGhcbiAgICogbGVuZ3Rocywgc28gYSBnZW51aW5lbHkgYnJva2VuIHdyaXRlIGZhaWxzIGxvdWRseSBpbnN0ZWFkIG9mIHNwaW5uaW5nLlxuICAgKlxuICAgKiBIYXJtbGVzcyBldmVyeXdoZXJlIGVsc2UgXHUyMDE0IG9uIGEgdHJhbnNwb3J0IHRoYXQgZG9lcyBub3QgbG9zZSB3cml0ZXMgdGhlXG4gICAqIHJlYWQtYmFjayBtYXRjaGVzIGZpcnN0IHRpbWUgYW5kIG5vdGhpbmcgaXMgcmV3cml0dGVuLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG5vdGUgcGF0aCBhbmQgY29udGVudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIGZpbGUsIG9uY2UgaXRzIGNvbnRlbnRcbiAgICogICBpcyBjb25maXJtZWQuXG4gICAqL1xuICBjcmVhdGVOb3RlOiAodGhpczogdm9pZCwgcGFyYW1zOiBDcmVhdGVOb3RlUGFyYW1zKSA9PiBQcm9taXNlPFRGaWxlPjtcblxuICAvKipcbiAgICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50IHVzaW5nICoqdHJ1c3RlZCoqXG4gICAqIEVsZWN0cm9uIHBvaW50ZXIgaW5wdXQsIHRoZW4gcG9sbHMgdW50aWwgdGhlIGVsZW1lbnQgYWN0dWFsbHkgbWF0Y2hlc1xuICAgKiBgOmhvdmVyYC5cbiAgICpcbiAgICogQmVjYXVzZSB0aGUgbW92ZSBpcyB0cnVzdGVkIChzZWUge0BsaW5rIExpYi5tb3ZlTW91c2V9KSwgdGhlIHJlYWwgYDpob3ZlcmBcbiAgICogc3RhdGUgdGFrZXMgZWZmZWN0IGluIHRoZSBDU1MgZW5naW5lIFx1MjAxNCByZWFsIHRoZW1lIGB2YXIoKWAgdmFsdWVzIGFuZCByZWFsXG4gICAqIGNvbXBvc2l0aW5nIFx1MjAxNCBpbnN0ZWFkIG9mIGEgaGFuZC1zaW11bGF0ZWQgY2FzY2FkZS4gSXQgcG9sbHMgdGhlIGxpdmVcbiAgICogYGVsZW1lbnQubWF0Y2hlcygnOmhvdmVyJylgIHN0YXRlIChub3QgYSBmaXhlZCBkZWxheSksIHNvIGl0IGlzIHJvYnVzdCB1bmRlclxuICAgKiBzaGFyZWQtaW5zdGFuY2UgbG9hZC4gSXQgdGFyZ2V0cyB0aGUgc2luZ2xlIHNoYXJlZCB3aW5kb3cncyAqKmdsb2JhbCoqXG4gICAqIHBvaW50ZXIsIHNvIG9ubHkgb25lIGVsZW1lbnQgaXMgaG92ZXJlZCBhdCBhIHRpbWUuXG4gICAqXG4gICAqICoqRGVza3RvcCBvbmx5IFx1MjAxNCBpdCB0aHJvd3Mgb24gbW9iaWxlKiosIGRlbGliZXJhdGVseTogdG91Y2ggaW5wdXQgaGFzIG5vXG4gICAqIGhvdmVyIHN0YXRlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGZhaXRoZnVsIHRvIGluamVjdC4gQSBzaWxlbnQgbm8tb3Agd291bGRcbiAgICogbGVhdmUgYSB0ZXN0IGFzc2VydGluZyBhZ2FpbnN0IGEgaG92ZXIgdGhhdCBuZXZlciBoYXBwZW5lZCwgd2hpY2ggaXMgdGhlXG4gICAqIGV4YWN0IGZhbHNlLWNvbmZpZGVuY2UgZmFpbHVyZSB0cnVzdGVkIGlucHV0IGV4aXN0cyB0byBwcmV2ZW50LiBCcmFuY2ggb25cbiAgICogYFBsYXRmb3JtLmlzRGVza3RvcEFwcGAsIG9yIGRyaXZlIHRoZSBlbGVtZW50IHdpdGgge0BsaW5rIExpYi5jbGlja0VsZW1lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gaG92ZXIuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZWxlbWVudCBtYXRjaGVzIGA6aG92ZXJgLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIGVsZW1lbnQgbmV2ZXIgbWF0Y2hlcyBgOmhvdmVyYC4gUmVzb2x2aW5nIHF1aWV0bHkgdGhlcmVcbiAgICogICB3b3VsZCBsZXQgYSB0ZXN0IHJlYWQgYW4gZWxlbWVudCB0aGF0IGlzIG5vdCBob3ZlcmVkIGFuZCBwYXNzIG9uIHdoYXRldmVyXG4gICAqICAgaXRzIGJhc2Ugc3R5bGUgaGFwcGVucyB0byBiZS5cbiAgICovXG4gIGhvdmVyRWxlbWVudDogKHRoaXM6IHZvaWQsIHBhcmFtczogSG92ZXJFbGVtZW50UGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byB0aGUgZ2l2ZW4gd2ViLWNvbnRlbnRzIGNvb3JkaW5hdGVzIHVzaW5nIGFcbiAgICogKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLlxuICAgKlxuICAgKiBBIHRydXN0ZWQgbW92ZSAoaW5qZWN0ZWQgdmlhIEVsZWN0cm9uJ3MgYHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50YClcbiAgICogdXBkYXRlcyB0aGUgcmVhbCBwb2ludGVyIHN0YXRlIGluIHRoZSBDU1MgZW5naW5lLCBzbyBgOmhvdmVyYCBydWxlc1xuICAgKiBnZW51aW5lbHkgYXBwbHkgXHUyMDE0IHVubGlrZSBgZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2VvdmVyJykpYCxcbiAgICogd2hpY2ggaXMgdW50cnVzdGVkIGFuZCBuZXZlciBzZXRzIGA6aG92ZXJgLiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkXG4gICAqIHdpbmRvdydzICoqZ2xvYmFsKiogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGEgdGltZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogaXQgcGVyZm9ybXMgYSBzaW5nbGUgbW92ZSBhbmQgZG9lcyAqKm5vdCoqXG4gICAqIHdhaXQgZm9yIGFueSBzdGF0ZSB0byBzZXR0bGUgKGNhbGxlcnMgcG9sbCB0aGVpciBvd24gcmVhZGluZXNzIHNpZ25hbCkuXG4gICAqIFByZWZlciB7QGxpbmsgTGliLmhvdmVyRWxlbWVudH0gLyB7QGxpbmsgTGliLnVuaG92ZXJFbGVtZW50fSBmb3JcbiAgICogZWxlbWVudC1yZWxhdGl2ZSBtb3ZlczsgdXNlIGBtb3ZlTW91c2VgIGRpcmVjdGx5IHdoZW4gYW4gZWxlbWVudC1yZWxhdGl2ZVxuICAgKiB0YXJnZXQgZG9lcyBub3QgZml0IChlLmcuIGFuIGVsZW1lbnQgc3Bhbm5pbmcgdGhlIGZ1bGwgdmlld3BvcnQgd2lkdGgpLlxuICAgKlxuICAgKiAqKkRlc2t0b3Agb25seSBcdTIwMTQgaXQgdGhyb3dzIG9uIG1vYmlsZSoqLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gICAqIHtAbGluayBMaWIuaG92ZXJFbGVtZW50fTogdGhlcmUgaXMgbm8gdG91Y2ggcG9pbnRlciB0byBtb3ZlLlxuICAgKlxuICAgKiAqKk11c3QgYmUgYXdhaXRlZCoqIFx1MjAxNCBzZWUge0BsaW5rIExpYi5jbGlja0VsZW1lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHdlYi1jb250ZW50cyBESVAgY29vcmRpbmF0ZXMgdG8gbW92ZSB0by5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBtb3ZlIGhhcyBiZWVuIGluamVjdGVkLlxuICAgKi9cbiAgbW92ZU1vdXNlOiAodGhpczogdm9pZCwgcGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE9wZW5zIE9ic2lkaWFuJ3Mgc2V0dGluZ3MgbW9kYWwgb24gYSBnaXZlbiB0YWIsIGFuZCBkb2VzIG5vdCByZXR1cm4gdW50aWxcbiAgICogdGhhdCB0YWIgaGFzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKlxuICAgKiAqKlRoaXMgZXhpc3RzIGJlY2F1c2UgYGFwcC5zZXR0aW5nLm9wZW4oKWAgb24gaXRzIG93biBkb2VzIG5vdCB3b3JrIGZyb20gYVxuICAgKiB0ZXN0LioqIGBhcHAuc2V0dGluZy5jb250YWluZXJFbGAgaXMgYnVpbHQgYXQgc3RhcnR1cCBidXQgaXMgbmV2ZXIgaW4gdGhlXG4gICAqIGRvY3VtZW50LCBhbmQgYG9wZW4oKWAgZG9lcyBub3QgYXR0YWNoIGl0IFx1MjAxNCBzbyB0aGUgbW9kYWwgYnVpbGRzIGludG8gYVxuICAgKiBkZXRhY2hlZCB0cmVlLCBgb3BlbigpYCByZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcsIGFuZCBhIHNjcmVlbnNob3QgdGFrZW5cbiAgICogYWZ0ZXJ3YXJkcyBzaG93cyB0aGUgdW50b3VjaGVkIGRvY3VtZW50LiBUaGF0IGlzIHdoYXQgbWFkZSB0aGUgc2V0dGluZ3MgdGFiXG4gICAqIGxvb2sgaW1wb3NzaWJsZSB0byBjYXB0dXJlLCBhbmQgZ290IHJlY29yZGVkIGFzIHN1Y2ggaW4gdHdvIHBsdWdpbnMuXG4gICAqXG4gICAqIFRoZSBmaXggaXMgb25lIHN0ZXAsIGFuZCBpdHMgKipvcmRlciBpcyBsb2FkLWJlYXJpbmcqKjogdGhlIGNvbnRhaW5lciBpc1xuICAgKiBhcHBlbmRlZCB0byBgZG9jdW1lbnQuYm9keWAgKipiZWZvcmUqKiBgb3BlbigpYC4gQXR0YWNoaW5nIGFmdGVyd2FyZHMgaXMgdG9vXG4gICAqIGxhdGUgXHUyMDE0IHdoYXRldmVyIHRoZSBtb2RhbCBkcmV3IG9uIG9wZW4gaGFzIGFscmVhZHkgZ29uZSBpbnRvIHRoZSBkZXRhY2hlZFxuICAgKiBjb250YWluZXIsIHNvIGl0IGVuZHMgdXAgb24gc2NyZWVuIHNob3dpbmcgdGhlIHdyb25nIHRoaW5nLiBUaGF0IGZhaWx1cmVcbiAgICogbG9va3MgbGlrZSBzdWNjZXNzIHVudGlsIHRoZSBjYXB0dXJlZCBmcmFtZSBpcyBleGFtaW5lZCwgd2hpY2ggaXMgdGhlIHRyYXBcbiAgICogdGhpcyBoZWxwZXIgZXhpc3RzIHRvIHJlbW92ZS5cbiAgICpcbiAgICogUmUtYXR0YWNoaW5nIGlzIGlkZW1wb3RlbnQsIHNvIGEgdGFiIGNsb3NlZCB3aXRoIGBhcHAuc2V0dGluZy5jbG9zZSgpYCBjYW5cbiAgICogc2ltcGx5IGJlIHJlLW9wZW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB0YWIgdG8gb3BlbiBhbmQgaG93IGxvbmcgdG8gd2FpdCBmb3IgaXQgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG5hbWVzIG9mIHRoZSBzZXR0aW5nIHJvd3MgdGhlXG4gICAqICAgdGFiIHJlbmRlcmVkIFx1MjAxNCBib3RoIHRoZSBwcm9vZiBpdCByZW5kZXJlZCBhbmQgd2hhdCBhIGNhbGxlciBhc3NlcnRzIG9uLiBBXG4gICAqICAgdGFiIHRoYXQgbGVnaXRpbWF0ZWx5IHJlbmRlcnMgbm8gYC5zZXR0aW5nLWl0ZW0tbmFtZWAgcm93cyAoSG90a2V5cywgc2F5KVxuICAgKiAgIHJlc29sdmVzIHRvIGFuIGVtcHR5IGFycmF5LlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5vIHRhYiBjYXJyaWVzIHtAbGluayBPcGVuU2V0dGluZ3NUYWJQYXJhbXMudGFiSWR9LCBvciBpZlxuICAgKiAgIHRoZSB0YWIgZG9lcyBub3QgcmVuZGVyIHdpdGhpbiB0aGUgdGltZW91dC5cbiAgICovXG4gIG9wZW5TZXR0aW5nc1RhYjogKHRoaXM6IHZvaWQsIHBhcmFtczogT3BlblNldHRpbmdzVGFiUGFyYW1zKSA9PiBQcm9taXNlPHN0cmluZ1tdPjtcblxuICAvKipcbiAgICogUHJlc3NlcyBhIHNpbmdsZSBrZXkgKG9wdGlvbmFsbHkgd2l0aCBtb2RpZmllcnMpIHVzaW5nICoqdHJ1c3RlZCoqIEVsZWN0cm9uXG4gICAqIGtleWJvYXJkIGlucHV0LCBmaXJpbmcgdGhlIGZ1bGwgcmVhbCBrZXkgcGlwZWxpbmUgXHUyMDE0XG4gICAqIGBrZXlkb3duYCBcdTIxOTIgYGtleXByZXNzYCBcdTIxOTIgYGJlZm9yZWlucHV0YCBcdTIxOTIgYGlucHV0YCBcdTIxOTIgYGtleXVwYC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUga2V5LXByZXNzIGFuYWxvZyBvZiB7QGxpbmsgTGliLnR5cGVJbnRvRWRpdG9yfTogaXQgaW5qZWN0cyBhXG4gICAqIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2VxdWVuY2UgdmlhIEVsZWN0cm9uJ3NcbiAgICogYHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50YCwgc28gaXQgaXMgZGVsaXZlcmVkIHRvIHRoZSB3aW5kb3cncyBET00tZm9jdXNlZFxuICAgKiBlbGVtZW50IGFuZCBmbG93cyB0aHJvdWdoIHRoZSByZWFsIGlucHV0IHBpcGVsaW5lIFx1MjAxNCB1bmxpa2VcbiAgICogYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgLCB3aGljaCBpcyB1bnRydXN0ZWQgKGBpc1RydXN0ZWQ6XG4gICAqIGZhbHNlYCkgYW5kIGlnbm9yZWQgYnkgQ29kZU1pcnJvciBhbmQgbW9zdCBrZXkgaGFuZGxlcnMuIFVzZSBpdCBmb3Igc3BlY2lhbFxuICAgKiBrZXlzIChgJ0VudGVyJ2AsIGAnRXNjYXBlJ2AsIGAnVGFiJ2AsIGFycm93IGtleXMpIGFuZCBtb2RpZmllciBjb21iaW5hdGlvbnNcbiAgICogKGBTaGlmdCtFbnRlcmAsIGBDdHJsK0FgKSB0aGF0IHtAbGluayBMaWIudHlwZUludG9FZGl0b3J9ICh3aGljaCB0eXBlc1xuICAgKiBwcmludGFibGUgdGV4dCkgZG9lcyBub3QgY292ZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBwcmltaXRpdmU6IGl0IGluamVjdHMgdGhlIGtleSBwcmVzcyBhbmQgZG9lcyAqKm5vdCoqXG4gICAqIHBvbGwgZm9yIGFueSBlZmZlY3QgKGEga2V5IHByZXNzIGhhcyBubyB1bml2ZXJzYWwgb2JzZXJ2YWJsZSBvdXRjb21lIFx1MjAxNFxuICAgKiBgRW50ZXJgIGVkaXRzIHRoZSBkb2N1bWVudCwgYEVzY2FwZWAgY2xvc2VzIGEgbW9kYWwsIGBBcnJvd0Rvd25gIG1vdmVzIHRoZVxuICAgKiBzZWxlY3Rpb24pLiBUaGUgY2FsbGVyIGZvY3VzZXMgdGhlIGludGVuZGVkIHRhcmdldCBmaXJzdCwgdGhlbiBhd2FpdHMgdGhlXG4gICAqIGV4cGVjdGVkIGVmZmVjdCB2aWEge0BsaW5rIExpYi53YWl0VW50aWx9LiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkXG4gICAqIHdpbmRvdydzICoqZ2xvYmFsKiogZm9jdXMsIHNvIG9ubHkgdGhlIERPTS1mb2N1c2VkIGVsZW1lbnQgcmVjZWl2ZXMgdGhlIGtleS5cbiAgICpcbiAgICogKipPbiBtb2JpbGUqKiB0aGUgc2FtZSBzZXF1ZW5jZSBpcyBpbmplY3RlZCB0aHJvdWdoIHRoZSBXZWJWaWV3J3MgZGVidWdnZXJcbiAgICogKGBJbnB1dC5kaXNwYXRjaEtleUV2ZW50YCksIHdoaWNoIGlzIGVxdWFsbHkgdHJ1c3RlZC4gTmFtZWQga2V5cyAoYCdFbnRlcidgLFxuICAgKiBgJ0VzY2FwZSdgLCBgJ1RhYidgLCBgJ0JhY2tzcGFjZSdgLCBgJ0RlbGV0ZSdgLCB0aGUgYXJyb3dzKSBhbmQgc2luZ2xlXG4gICAqIHByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSBzdXBwb3J0ZWQ7IGFueSBvdGhlciBtdWx0aS1jaGFyYWN0ZXIgbmFtZSB0aHJvd3NcbiAgICogcmF0aGVyIHRoYW4gcHJlc3Npbmcgbm90aGluZy5cbiAgICpcbiAgICogKipNdXN0IGJlIGF3YWl0ZWQqKiBcdTIwMTQgc2VlIHtAbGluayBMaWIuY2xpY2tFbGVtZW50fS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBrZXkgdG8gcHJlc3MgYW5kIGFueSBtb2RpZmllcnMgdG8gaG9sZC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXkgcHJlc3MgaGFzIGJlZW5cbiAgICogICBpbmplY3RlZC5cbiAgICovXG4gIHByZXNzS2V5OiAodGhpczogdm9pZCwgcGFyYW1zOiBQcmVzc0tleVBhcmFtcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciB7QGxpbmsgRWRpdG9yfSB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvblxuICAgKiBrZXlib2FyZCBpbnB1dC5cbiAgICpcbiAgICogVHlwaW5nIGlzIHByZXNzaW5nIGVhY2ggY2hhcmFjdGVyIGtleSBpbiB0dXJuOiB0aGlzIGZvY3VzZXMgdGhlIGVkaXRvclxuICAgKiAoY2FyZXQgdG8gZW5kKSBhbmQgcHJlc3NlcyBldmVyeSBjb2RlIHBvaW50IG9mIGB0ZXh0YCB2aWFcbiAgICoge0BsaW5rIExpYi5wcmVzc0tleX0gXHUyMDE0IHRoZSBzYW1lIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgYSByZWFsXG4gICAqIHVzZXIgcHJvZHVjZXMuIEVhY2gga2V5c3Ryb2tlIGlzIGRlbGl2ZXJlZCB0byB0aGUgd2luZG93J3MgRE9NLWZvY3VzZWRcbiAgICogZWxlbWVudCBhbmQgZmxvd3MgdGhyb3VnaCBDb2RlTWlycm9yJ3MgcmVhbCBpbnB1dCBwaXBlbGluZSwgc28gdGhlIHR5cGVkXG4gICAqIHRleHQgcmVhY2hlcyB0aGUgZG9jdW1lbnQgKipvbmx5IGlmIHRoZSBlZGl0b3IgZ2VudWluZWx5IGhvbGRzIGZvY3VzKiouXG4gICAqIFRoaXMgbWFrZXMgXCJ0aGUgdXNlciB0eXBlZCBpbnRvIHRoZSBlZGl0b3JcIiBhIGZhaXRoZnVsIGVuZC10by1lbmQgY2hlY2ssXG4gICAqIHVubGlrZSBgZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCguLi4pKWAgKHVudHJ1c3RlZCBcdTIwMTQgaWdub3JlZCBieVxuICAgKiBDb2RlTWlycm9yKSBvciBgZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnKWAgKG11dGF0ZXMgdGhlIHNlbGVjdGlvbiBldmVuXG4gICAqIHdoZW4gdGhlIGVkaXRvciBpcyBub3QgZm9jdXNlZCwgbWFza2luZyBmb2N1cyBidWdzIGFzIGZhbHNlIHBvc2l0aXZlcykuXG4gICAqXG4gICAqIEFmdGVyIGluamVjdGluZyB0aGUga2V5c3Ryb2tlcyBpdCBwb2xscyB1bnRpbCB0aGUgZG9jdW1lbnQgcmVmbGVjdHMgdGhlXG4gICAqIGlucHV0LCBvciBhIGJvdW5kZWQgdGltZW91dCBlbGFwc2VzICh0aGUgZXhwZWN0ZWQgb3V0Y29tZSB3aGVuIHRoZSBlZGl0b3JcbiAgICogaXMgcmVhZC1vbmx5IGFuZCByZWplY3RzIHRoZSBpbnB1dCwgb3Igd2hlbiBmb2N1cyB3YXMgc3RvbGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlZGl0b3IgdG8gdHlwZSBpbnRvIGFuZCB0aGUgdGV4dCB0byB0eXBlLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGtleXN0cm9rZXMgaGF2ZSBzZXR0bGVkLlxuICAgKi9cbiAgdHlwZUludG9FZGl0b3I6ICh0aGlzOiB2b2lkLCBwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byBhIHBvaW50IGp1c3Qgb3V0c2lkZSBhbiBlbGVtZW50J3MgYm91bmRpbmcgYm94XG4gICAqIHVzaW5nIGEgKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLCB0aGVuIHBvbGxzIHVudGlsIHRoZSBlbGVtZW50IG5vXG4gICAqIGxvbmdlciBtYXRjaGVzIGA6aG92ZXJgLlxuICAgKlxuICAgKiBUaGUgaW52ZXJzZSBvZiB7QGxpbmsgTGliLmhvdmVyRWxlbWVudH0uIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWRcbiAgICogd2luZG93J3MgKipnbG9iYWwqKiBwb2ludGVyLCBzbyBvbmx5IG9uZSBlbGVtZW50IGlzIGhvdmVyZWQgYXQgYSB0aW1lLiBXaGVuXG4gICAqIGFuIGVsZW1lbnQgc3BhbnMgdGhlIGZ1bGwgdmlld3BvcnQgKG5vIHBvaW50IG91dHNpZGUgaXRzIGJveCBpcyByZWFjaGFibGUpLFxuICAgKiB1c2Uge0BsaW5rIExpYi5tb3ZlTW91c2V9IGRpcmVjdGx5IHRvIG1vdmUgdGhlIHBvaW50ZXIgdG8gYSBrbm93biBlbXB0eVxuICAgKiBjb29yZGluYXRlIGluc3RlYWQuXG4gICAqXG4gICAqICoqRGVza3RvcCBvbmx5IFx1MjAxNCBpdCB0aHJvd3Mgb24gbW9iaWxlKiosIGZvciB0aGUgc2FtZSByZWFzb24gYXNcbiAgICoge0BsaW5rIExpYi5ob3ZlckVsZW1lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZWxlbWVudCBubyBsb25nZXIgbWF0Y2hlc1xuICAgKiAgIGA6aG92ZXJgLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIGVsZW1lbnQga2VlcHMgbWF0Y2hpbmcgYDpob3ZlcmAsIHdoaWNoIGlzIHdoYXQgYVxuICAgKiAgIGZ1bGwtdmlld3BvcnQgZWxlbWVudCBkb2VzLlxuICAgKi9cbiAgdW5ob3ZlckVsZW1lbnQ6ICh0aGlzOiB2b2lkLCBwYXJhbXM6IFVuaG92ZXJFbGVtZW50UGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBQb2xscyBhIHByZWRpY2F0ZSB1bnRpbCBpdCBiZWNvbWVzIHRydXRoeSwgb3IgcmVqZWN0cyBvbmNlIGEgYm91bmRlZFxuICAgKiB0aW1lb3V0IGVsYXBzZXMuXG4gICAqXG4gICAqIEludGVncmF0aW9uLXRlc3QgYGV2YWxJbk9ic2lkaWFuYCBjYWxsYmFja3Mgcm91dGluZWx5IG5lZWQgdG8gd2FpdCBmb3IgYW5cbiAgICogYXN5bmNocm9ub3VzIGVmZmVjdCB0byBzZXR0bGUgKGEgdmlldyB0byBvcGVuLCBhIERPTSBub2RlIHRvIGFwcGVhciwgYVxuICAgKiBzZXR0aW5nIHRvIGFwcGx5KS4gQmVjYXVzZSB0aGUgY2FsbGJhY2sgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZFxuICAgKiBjYW5ub3QgaW1wb3J0IG1vZHVsZXMsIGl0IGNhbid0IHJldXNlIGBvYnNpZGlhbi1kZXYtdXRpbHNgJ1xuICAgKiBgcmV0cnlXaXRoVGltZW91dGAgLyBgcnVuV2l0aFRpbWVvdXRgLiBUaGlzIGhlbHBlciBpcyB0aGUgc2hhcmVkLCBpbmplY3RlZFxuICAgKiByZXBsYWNlbWVudCBmb3IgdGhlIHBlci1jbG9zdXJlIHBvbGwgbG9vcHMgY29uc3VtZXJzIHdvdWxkIG90aGVyd2lzZVxuICAgKiBoYW5kLXJvbGwuXG4gICAqXG4gICAqIFRoZSBgcHJlZGljYXRlYCBtYXkgYmUgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIFx1MjAxNCBpdCBpcyBhd2FpdGVkIG9uIGV2ZXJ5XG4gICAqIHBvbGwuIEl0IGlzIGNoZWNrZWQgaW1tZWRpYXRlbHksIHRoZW4gcmUtY2hlY2tlZCBldmVyeVxuICAgKiBgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kc2AgdW50aWwgaXQgcmV0dXJucyB0cnV0aHkgb3IgYHRpbWVvdXRJbk1pbGxpc2Vjb25kc2BcbiAgICogZWxhcHNlcywgYXQgd2hpY2ggcG9pbnQgdGhlIHJldHVybmVkIHtAbGluayBQcm9taXNlfSByZWplY3RzICh0aGUgZXJyb3JcbiAgICogaW5jbHVkZXMgYG1lc3NhZ2VgIHdoZW4gcHJvdmlkZWQpLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHByZWRpY2F0ZSB0byBwb2xsIHBsdXMgb3B0aW9uYWwgdGltZW91dCwgaW50ZXJ2YWwsIGFuZFxuICAgKiAgIHRpbWVvdXQgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcmVkaWNhdGUgaXMgdHJ1dGh5LlxuICAgKi9cbiAgd2FpdFVudGlsOiAodGhpczogdm9pZCwgcGFyYW1zOiBXYWl0VW50aWxQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogVGhlIG1vdXNlIGJ1dHRvbiBhIHRydXN0ZWQgY2xpY2sgcHJlc3NlcywgaW4gRWxlY3Ryb24ncyBgc2VuZElucHV0RXZlbnRgXG4gKiBzcGVsbGluZy5cbiAqL1xuZXhwb3J0IHR5cGUgTW91c2VCdXR0b24gPSAnbGVmdCcgfCAnbWlkZGxlJyB8ICdyaWdodCc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYi5tb3ZlTW91c2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBMaWIub3BlblNldHRpbmdzVGFifS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuU2V0dGluZ3NUYWJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBzZXR0aW5ncyB0YWIgdG8gb3BlbiBcdTIwMTQgYSBwbHVnaW4gaWQgZm9yIGEgcGx1Z2luJ3Mgb3duIHRhYiwgb3JcbiAgICogYSBjb3JlIHRhYiBpZCAoYCdlZGl0b3InYCwgYCdob3RrZXlzJ2AsIFx1MjAyNikuXG4gICAqXG4gICAqIFJlcXVpcmVkLCBiZWNhdXNlIG9wZW5pbmcgdGhlIG1vZGFsIHdpdGhvdXQgbmFtaW5nIGEgdGFiIHJlbmRlcnMgKipub3RoaW5nKipcbiAgICogb24gYSBoYXJuZXNzLW93bmVkIGluc3RhbmNlOiB0aGUgbW9kYWwgcmVzdG9yZXMgdGhlIGxhc3QgdGFiIHRoZSBwcm9maWxlXG4gICAqIHVzZWQsIGFuZCBhbiBpc29sYXRlZCBwcm9maWxlIGhhcyBuZXZlciBvcGVuZWQgb25lLCBzbyBgYWN0aXZlVGFiYCBzdGF5c1xuICAgKiBgbnVsbGAgYW5kIG5vIHJvdyBpcyBkcmF3bi4gQW4gdW5rbm93biBpZCBpcyByZWplY3RlZCBpbW1lZGlhdGVseSwgbGlzdGluZ1xuICAgKiB0aGUgaWRzIHRoYXQgZG8gZXhpc3QuXG4gICAqL1xuICByZWFkb25seSB0YWJJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtb2RhbCB0byBvcGVuIGFuZCBmb3IgdGhlIHJlcXVlc3RlZCB0YWIgdG9cbiAgICogcmVuZGVyIGl0cyBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgTGliLnByZXNzS2V5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzc0tleVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHRvIHByZXNzLCBnaXZlbiBhcyBhbiBFbGVjdHJvbiBBY2NlbGVyYXRvciBrZXkgbmFtZSBcdTIwMTQgZS5nLlxuICAgKiBgJ0VudGVyJ2AsIGAnRXNjYXBlJ2AsIGAnVGFiJ2AsIGAnQmFja3NwYWNlJ2AsIGAnRGVsZXRlJ2AsIGFuIGFycm93IGtleVxuICAgKiAoYCdVcCdgIC8gYCdEb3duJ2AgLyBgJ0xlZnQnYCAvIGAnUmlnaHQnYCksIG9yIGEgcHJpbnRhYmxlIGNoYXJhY3RlclxuICAgKiAoYCdhJ2AsIGAnMSdgKS4gVGhlIHByb2R1Y2VkIGNoYXJhY3RlciAod2hlbiB0aGUga2V5IGluc2VydHMgdGV4dCkgaXMgdGhlXG4gICAqIGxpdGVyYWwgYGtleWAgdmFsdWU7IGNhc2UtY29ycmVjdCB0ZXh0IGJlbG9uZ3MgdG9cbiAgICoge0BsaW5rIExpYi50eXBlSW50b0VkaXRvcn0sIG5vdCBhIGtleS1wcmVzcyBwcmltaXRpdmUuXG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZGlmaWVyIGtleXMgdG8gaG9sZCB3aGlsZSB0aGUga2V5IGlzIHByZXNzZWQsIHVzaW5nIE9ic2lkaWFuJ3NcbiAgICoge0BsaW5rIE1vZGlmaWVyfSBuYW1lcyAodGhlIHNhbWUgdmFsdWVzIGFzIGFuIE9ic2lkaWFuIGBIb3RrZXlgKS4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpOyBlYWNoIGlzIG1hcHBlZCB0b1xuICAgKiBFbGVjdHJvbidzIGxvd2VyY2FzZSBgc2VuZElucHV0RXZlbnRgIG1vZGlmaWVyIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbXWBcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVycz86IHJlYWRvbmx5IE1vZGlmaWVyW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYi50eXBlSW50b0VkaXRvcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUludG9FZGl0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVkaXRvciB0byB0eXBlIGludG8uIEl0IGlzIGZvY3VzZWQgKHdpdGggdGhlIGNhcmV0IG1vdmVkIHRvIHRoZSBlbmQgb2ZcbiAgICogdGhlIGRvY3VtZW50KSBiZWZvcmUgdGhlIGtleXN0cm9rZXMgYXJlIGluamVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIHR5cGUuIEVhY2ggY29kZSBwb2ludCBpcyBwcmVzc2VkIHZpYSB7QGxpbmsgTGliLnByZXNzS2V5fVxuICAgKiAoYSB0cnVzdGVkIGBrZXlEb3duYCBcdTIxOTIgYGNoYXJgIFx1MjE5MiBga2V5VXBgKSwgZXhhY3RseSBhcyBhIHJlYWwgdXNlciB0eXBpbmcuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYi51bmhvdmVyRWxlbWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5ob3ZlckVsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uIFRoZSBwb2ludGVyIGlzIG1vdmVkIHRvIGEgcG9pbnRcbiAgICoganVzdCBvdXRzaWRlIGl0cyBib3VuZGluZyBib3guIFRoaXMgaXMgYSBsaXZlIHJlbmRlcmVyIERPTSBub2RlIFx1MjAxNCB0aGVcbiAgICogY2FsbGJhY2sgcnVucyBpbi1yZW5kZXJlciwgc28gbm8gY3Jvc3MtcHJvY2VzcyBzZXJpYWxpemF0aW9uIGlzIG5lZWRlZFxuICAgKiAoc2FtZSBhcyB7QGxpbmsgVHlwZUludG9FZGl0b3JQYXJhbXMuZWRpdG9yfSkuXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgTGliLndhaXRVbnRpbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdFVudGlsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xsaW5nIGludGVydmFsIGJldHdlZW4gcHJlZGljYXRlIGNoZWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDUwYFxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZGV0YWlsIGFwcGVuZGVkIHRvIHRoZSB0aW1lb3V0IGVycm9yIG1lc3NhZ2UsIGRlc2NyaWJpbmcgd2hhdFxuICAgKiB3YXMgYmVpbmcgd2FpdGVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25kaXRpb24gdG8gd2FpdCBmb3IuIFBvbGxlZCBpbW1lZGlhdGVseSwgdGhlbiBvbiBldmVyeSBpbnRlcnZhbCB1bnRpbFxuICAgKiBpdCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLiBNYXkgYmUgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIFx1MjAxNCBpdCBpc1xuICAgKiBhd2FpdGVkIG9uIGVhY2ggcG9sbC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgYXdhaXRlZCBjb25kaXRpb24gaGFzIGJlZW4gbWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZGljYXRlOiAodGhpczogdm9pZCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBiZWZvcmUgcmVqZWN0aW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gaW5wdXQgb2JqZWN0IHRoYXQgaW5jbHVkZXMgYGFwcGAsIGBvYnNpZGlhbk1vZHVsZWAsXG4gKiBgY29udGV4dGAsIGFuZCBhbnkgYWRkaXRpb25hbCBgaW5wdXRgIHBhc3NlZCBieSB0aGUgY2FsbGVyLlxuICogSXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBpbnZva2VkIGFzIGFuIElJRkUuXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzZWxmLWNvbnRhaW5lZCBcdTIwMTQgY2xvc3VyZXMgb3ZlciBsb2NhbCB2YXJpYWJsZXMgd2lsbCBub3Qgd29yay5cbiAqIFBhc3MgYW55IG5lZWRlZCB2YWx1ZXMgYXMgYGlucHV0YCBcdTIwMTQgdGhleSBhcmUgSlNPTi1zZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgb24gdGhlIE9ic2lkaWFuIHNpZGUuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBgSlNPTi5zdHJpbmdpZnlgJ2Qgb24gdGhlIE9ic2lkaWFuIHNpZGUgYW5kIHBhcnNlZCBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjYWxsYmFja2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsSW5PYnNpZGlhbjxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIHBhcmFtczogRXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD5cbik6IFByb21pc2U8UmVzdWx0PiB7XG4gIGNvbnN0IHsgY2FsbGJhY2ssIGNvbnRleHRJZCwgaW5wdXQgPSB7fSwgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcyA9IGZhbHNlLCB0cmFuc3BvcnQ6IHRyYW5zcG9ydE92ZXJyaWRlLCB2YXVsdFBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgY3dkID0gdmF1bHRQYXRoID8/IGdldFZhdWx0UGF0aCgpID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gQ2hlY2s6IFZhdWx0IHBhdGggZXhpc3RzIG9uIGRpc2suXG4gIGlmICh2YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiAhZXhpc3RzU3luYyh2YXVsdFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBwYXRoIGRvZXMgbm90IGV4aXN0OiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydE92ZXJyaWRlID8/IGF3YWl0IGdldE9yQ3JlYXRlVHJhbnNwb3J0KGdldFRyYW5zcG9ydE9wdGlvbnMoKSk7XG5cbiAgaWYgKCFzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzKSB7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnByZWZsaWdodENoZWNrKGN3ZCk7XG4gIH1cblxuICBhd2FpdCBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQodHJhbnNwb3J0LCBjd2QpO1xuXG4gIGNvbnN0IG5hbWVzcGFjZUNhbGxQYXJhbXM6IEdlbmVyYXRlTmFtZXNwYWNlQ2FsbFBhcmFtcyA9IHtcbiAgICBjYWxsYmFjayxcbiAgICBpbnB1dCxcbiAgICAuLi4oY29udGV4dElkICE9PSB1bmRlZmluZWQgJiYgeyBjb250ZXh0SWQ6IFN0cmluZyhjb250ZXh0SWQpIH0pXG4gIH07XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IGdlbmVyYXRlTmFtZXNwYWNlQ2FsbChuYW1lc3BhY2VDYWxsUGFyYW1zKTtcblxuICBjb25zdCByZXN1bHRTdHJpbmcgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0cmluZyA9PT0gJycgfHwgcmVzdWx0U3RyaW5nID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIGxldCBlbnZlbG9wZTogRXZhbFJlc3VsdEVudmVsb3BlO1xuICB0cnkge1xuICAgIGVudmVsb3BlID0gSlNPTi5wYXJzZShyZXN1bHRTdHJpbmcpIGFzIEV2YWxSZXN1bHRFbnZlbG9wZTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogT2JzaWRpYW4gcmV0dXJuZWQgbm9uLUpTT04gb3V0cHV0OiAke3Jlc3VsdFN0cmluZ31gKTtcbiAgfVxuXG4gIGlmICgndHlwZScgaW4gZW52ZWxvcGUpIHtcbiAgICBpZiAoZW52ZWxvcGUudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gUmV3cml0ZSBiYXJlLW9yaWdpbiBsb2NhbGhvc3Qgc3RhY2sgZnJhbWVzIGxpa2UgXCIoaHR0cDovL2xvY2FsaG9zdC86OTE1OjMyKVwiXG4gICAgICAvLyBzbyBWaXRlc3QncyBzb3VyY2UtbWFwIHJlc29sdmVyIHdvbid0IGV4dHJhY3QgXCIvXCIgYXMgdGhlIGZpbGUgcGF0aCBhbmQgY3Jhc2hcbiAgICAgIC8vIHdpdGggRUlTRElSIHdoZW4gaXQgdHJpZXMgdG8gcmVhZEZpbGVTeW5jIG9uIHRoZSByb290IGRpcmVjdG9yeS5cbiAgICAgIGNvbnN0IHNhbml0aXplZERldGFpbCA9IGVudmVsb3BlLnZhbHVlXG4gICAgICAgIC5yZXBsYWNlQWxsKC9cXChodHRwcz86XFwvXFwvbG9jYWxob3N0XFwvOig/PGxpbmU+XFxkKS9nLCAnKG9ic2lkaWFuLXdlYnZpZXc6JDxsaW5lPicpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogRXJyb3IgaW5zaWRlIE9ic2lkaWFuOlxcbiR7c2FuaXRpemVkRGV0YWlsfWApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQgYXMgUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGVudmVsb3BlLnZhbHVlIGFzIFJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBLHFCQUEyQjtBQUMzQiwwQkFBb0I7QUFTcEIsOEJBR087QUFDUCxvQ0FBc0M7QUFDdEMsaUNBQTRDO0FBQzVDLCtCQUFxQztBQTJCckMsTUFBTSxZQUFZO0FBa25CbEIsZUFBc0IsZUFDcEIsUUFDaUI7QUFDakIsUUFBTSxFQUFFLFVBQVUsV0FBVyxRQUFRLENBQUMsR0FBRyw0QkFBNEIsT0FBTyxXQUFXLG1CQUFtQixVQUFVLElBQUk7QUFDeEgsUUFBTSxNQUFNLGlCQUFhLHNDQUFhLEtBQUssb0JBQUFBLFFBQVEsSUFBSTtBQUd2RCxNQUFJLGNBQWMsVUFBYSxLQUFDLDJCQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLFVBQU0sbURBQXFCLDZDQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQywyQkFBMkI7QUFDOUIsVUFBTSxVQUFVLGVBQWUsR0FBRztBQUFBLEVBQ3BDO0FBRUEsWUFBTSx3REFBNEIsV0FBVyxHQUFHO0FBRWhELFFBQU0sc0JBQW1EO0FBQUEsSUFDdkQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFJLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxTQUFTLEVBQUU7QUFBQSxFQUNoRTtBQUVBLFFBQU0saUJBQWEscURBQXNCLG1CQUFtQjtBQUU1RCxRQUFNLGVBQWUsTUFBTSxVQUFVLFNBQVMsWUFBWSxFQUFFLElBQUksQ0FBQztBQUVqRSxNQUFJLGlCQUFpQixNQUFNLGlCQUFpQixXQUFXO0FBQ3JELFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDRixlQUFXLEtBQUssTUFBTSxZQUFZO0FBQUEsRUFDcEMsUUFBUTtBQUNOLFVBQU0sSUFBSSxNQUFNLHNEQUFzRCxZQUFZLEVBQUU7QUFBQSxFQUN0RjtBQUVBLE1BQUksVUFBVSxVQUFVO0FBQ3RCLFFBQUksU0FBUyxTQUFTLFNBQVM7QUFJN0IsWUFBTSxrQkFBa0IsU0FBUyxNQUM5QixXQUFXLHlDQUF5QywyQkFBMkI7QUFDbEYsWUFBTSxJQUFJLE1BQU07QUFBQSxFQUEyQyxlQUFlLEVBQUU7QUFBQSxJQUM5RTtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxTQUFTO0FBQ2xCOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
82
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEVkaXRvcixcbiAgTW9kaWZpZXIsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3VtZW50cyxcbiAgQ29udGV4dElkXG59IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU5hbWVzcGFjZUNhbGxQYXJhbXMgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQge1xuICBnZXRUcmFuc3BvcnRPcHRpb25zLFxuICBnZXRWYXVsdFBhdGhcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB7IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCB9IGZyb20gJy4vbmFtZXNwYWNlLWJvb3RzdHJhcC5janMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmludGVyZmFjZSBFdmFsRXJyb3JFbnZlbG9wZSB7XG4gIHR5cGU6ICdlcnJvcic7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCBlbnZlbG9wZSByZXR1cm5lZCBieSB0aGUgcmVnaXN0ZXJlZCBgZXZhbFdyYXBwZXJgIGZyb20gaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICpcbiAqIC0gYEV2YWxFcnJvckVudmVsb3BlYCBcdTIwMTQgYGNhbGxiYWNrYCB0aHJldzsgYHZhbHVlYCBpcyB0aGUgc2VyaWFsaXplZCBlcnJvci5cbiAqIC0gYEV2YWxVbmRlZmluZWRFbnZlbG9wZWAgXHUyMDE0IGBjYWxsYmFja2AgcmV0dXJuZWQgYHVuZGVmaW5lZGAuXG4gKiAtIGBFdmFsVmFsdWVFbnZlbG9wZWAgXHUyMDE0IGBjYWxsYmFja2AgcmV0dXJuZWQgYSBKU09OLXNlcmlhbGl6YWJsZSB2YWx1ZS5cbiAqL1xudHlwZSBFdmFsUmVzdWx0RW52ZWxvcGUgPVxuICB8IEV2YWxFcnJvckVudmVsb3BlXG4gIHwgRXZhbFVuZGVmaW5lZEVudmVsb3BlXG4gIHwgRXZhbFZhbHVlRW52ZWxvcGU7XG5cbmludGVyZmFjZSBFdmFsVW5kZWZpbmVkRW52ZWxvcGUge1xuICB0eXBlOiAndW5kZWZpbmVkJztcbn1cblxuaW50ZXJmYWNlIEV2YWxWYWx1ZUVudmVsb3BlIHtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYi5jbGlja0VsZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWNrRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbW91c2UgYnV0dG9uIHRvIHByZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xlZnQnYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uPzogTW91c2VCdXR0b247XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGNsaWNrLiBUaGUgcG9pbnRlciBpcyBtb3ZlZCB0byBpdHMgY2VudGVyLiBUaGlzIGlzIGEgbGl2ZVxuICAgKiByZW5kZXJlciBET00gbm9kZSBcdTIwMTQgdGhlIGNhbGxiYWNrIHJ1bnMgaW4tcmVuZGVyZXIsIHNvIG5vIGNyb3NzLXByb2Nlc3NcbiAgICogc2VyaWFsaXphdGlvbiBpcyBuZWVkZWQgKHNhbWUgYXMge0BsaW5rIFR5cGVJbnRvRWRpdG9yUGFyYW1zLmVkaXRvcn0pLlxuICAgKlxuICAgKiBUaGUgaW5wdXQgZ29lcyB0byB0aGUgd2luZG93IHRoYXQgb3ducyB0aGUgZWxlbWVudCAoaXRzXG4gICAqIGBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3YCksIHNvIGFuIGVsZW1lbnQgaW4gYSBwb3BvdXQgaXMgZHJpdmVuIGluIHRoYXRcbiAgICogcG9wb3V0IHdpdGggbm8gZXh0cmEgcGFyYW1ldGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQsIHVzaW5nIE9ic2lkaWFuJ3Mge0BsaW5rIE1vZGlmaWVyfSBuYW1lcy4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBMaWIuY2xpY2tNb3VzZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpY2tNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbW91c2UgYnV0dG9uIHRvIHByZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xlZnQnYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uPzogTW91c2VCdXR0b247XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQsIHVzaW5nIE9ic2lkaWFuJ3Mge0BsaW5rIE1vZGlmaWVyfSBuYW1lcy4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gd2luZG93IHRvIGNsaWNrIGluOiB0aGUgbWFpbiB3aW5kb3cgb3IgYSBwb3BvdXQuIFBhc3MgdGhlXG4gICAqIHdpbmRvdyB0aGF0IG93bnMgdGhlIHRhcmdldCwgZS5nLiBgbGVhZi52aWV3LmNvbnRhaW5lckVsLndpbmAgZm9yIGEgcG9wb3V0XG4gICAqIGxlYWYuIEVhY2ggT2JzaWRpYW4gd2luZG93IGlzIGl0cyBvd24gRWxlY3Ryb24gd2ViIGNvbnRlbnRzLCBzbyBhIGNsaWNrXG4gICAqIHNlbnQgdG8gb25lIG5ldmVyIHJlYWNoZXMgYW5vdGhlciwgYW5kIHRoZSBjb29yZGluYXRlcyBhcmUgaW4gdGhlIG5hbWVkXG4gICAqIHdpbmRvdydzIHZpZXdwb3J0LlxuICAgKlxuICAgKiAqKk9uIG1vYmlsZSoqIHRoZXJlIGFyZSBubyBwb3BvdXRzLCBzbyBhbnkgd2luZG93IGJ1dCB0aGUgbWFpbiBvbmUgdGhyb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgbWFpbiB3aW5kb3cgKGBnbG9iYWxUaGlzYClcbiAgICovXG4gIHJlYWRvbmx5IHdpbmRvdz86IFdpbmRvdztcblxuICAvKipcbiAgICogVGhlIHggY29vcmRpbmF0ZSAod2ViLWNvbnRlbnRzIERJUCkgdG8gY2xpY2sgYXQuXG4gICAqL1xuICByZWFkb25seSB4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB5IGNvb3JkaW5hdGUgKHdlYi1jb250ZW50cyBESVApIHRvIGNsaWNrIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbW1vbiBhcmd1bWVudHMgYXV0b21hdGljYWxseSBwcm92aWRlZCB0byBldmVyeSB7QGxpbmsgZXZhbEluT2JzaWRpYW59IGNhbGxiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkFyZ3VtZW50cyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4ge0BsaW5rIEFwcH0gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHNoYXJlZCBsaWJyYXJ5IGJhZyBpbmplY3RlZCBpbnRvIGV2ZXJ5IGNhbGxiYWNrIFx1MjAxNCBzZWUge0BsaW5rIExpYn0uXG4gICAqXG4gICAqIE5ldmVyIGVtcHR5OiB0aGUgaGFybmVzcyBwcmUtcG9wdWxhdGVzIGEgKipiYXNlKiogc2V0IG9mIHJlbmRlcmVyLWRyaXZpbmdcbiAgICogaGVscGVycyAodHJ1c3RlZCBpbnB1dCBcdTIwMTQgYHR5cGVJbnRvRWRpdG9yYCAvIGBwcmVzc0tleWAgLyBgbW92ZU1vdXNlYCAvXG4gICAqIGBjbGlja01vdXNlYCAvIGBob3ZlckVsZW1lbnRgIC8gYHVuaG92ZXJFbGVtZW50YCAvIGBjbGlja0VsZW1lbnRgIFx1MjAxNCBwbHVzXG4gICAqIGB3YWl0VW50aWxgLCBgY3JlYXRlTm90ZWAgYW5kIGBvcGVuU2V0dGluZ3NUYWJgKSwgYW5kIHByb3ZpZGVyIHBhY2thZ2VzXG4gICAqIChjaGllZmx5IGBvYnNpZGlhbi1kZXYtdXRpbHNgKSBgT2JqZWN0LmFzc2lnbmAgdGhlaXIgd2hvbGUgcmVuZGVyZXItc2FmZVxuICAgKiBsaWJyYXJ5IG9uIHRvcCB2aWEge0BsaW5rIHJlZ2lzdGVyTGliUmVzb2x2ZXJ9LiBBIHNlcmlhbGl6ZWQgY2xvc3VyZSByZWFjaGVzXG4gICAqIGV2ZXJ5IHNoYXJlZCBoZWxwZXIgdGhyb3VnaCBgbGliYCBcdTIwMTQgYGxpYi50eXBlSW50b0VkaXRvcih7IGVkaXRvciwgdGV4dCB9KWAsXG4gICAqIGBsaWIuZ2V0RmlsZU9yTnVsbCh7IGFwcCwgXHUyMDI2IH0pYCBcdTIwMTQgaW5zdGVhZCBvZiBpbXBvcnRpbmcgb3IgaGFuZC1yb2xsaW5nIHRoZW0uXG4gICAqL1xuICBsaWI6IExpYjtcblxuICAvKipcbiAgICogVGhlIGBvYnNpZGlhbmAgbW9kdWxlLCByZXNvbHZlZCBhdCBydW50aW1lIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAgICovXG4gIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYi5jcmVhdGVOb3RlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVOb3RlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBub3RlJ3MgY29udGVudC4gVGhpcyBleGFjdCBzdHJpbmcgaXMgd2hhdCB0aGUgY3JlYXRlZCBub3RlIGlzIHJlYWQgYmFja1xuICAgKiBhZ2FpbnN0LCBzbyBpdCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHN1Y2Nlc3NmdWwgd3JpdGUuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdC1yZWxhdGl2ZSBwYXRoIHRvIGNyZWF0ZSwgZXh0ZW5zaW9uIGluY2x1ZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+IHtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBpbiB0aGUgT2JzaWRpYW4gY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbGxiYWNrOiAoaW5wdXQ6IENvbW1vbkFyZ3VtZW50cyAmIENvbnRleHRBcmd1bWVudHM8VENvbnRleHRJZD4gJiBJbnB1dCkgPT4gUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBDb250ZXh0SWR9IGxpbmtpbmcgdGhpcyBjYWxsIHRvIGEgcGVyc2lzdGVudCBzdG9yZSBvbiBgd2luZG93YFxuICAgKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2Vzcy4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgdHlwZWQgYGNvbnRleHRgIG9iamVjdFxuICAgKiB0aGF0IHN1cnZpdmVzIGFjcm9zcyBjYWxscyBzaGFyaW5nIHRoZSBzYW1lIElELlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBjb250ZXh0YCBpcyBhIGZyZXNoIGVtcHR5IG9iamVjdCBlYWNoIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0SWQ/OiBUQ29udGV4dElkO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4gVmFsdWVzIG1heSBpbmNsdWRlIGZ1bmN0aW9ucyBcdTIwMTRcbiAgICogdGhleSBhcmUgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXQ/OiBJbnB1dDtcblxuICAvKipcbiAgICogU2tpcHMgcHJlLWZsaWdodCBjaGVja3MgKHZhdWx0IHJlZ2lzdHJhdGlvbiwgQ0xJIGF2YWlsYWJpbGl0eSkuXG4gICAqIFVzZWQgaW50ZXJuYWxseSBieSB2YXVsdCByZWdpc3RyYXRpb24gZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdHJhbnNwb3J0IGZvciB0aGlzIGNhbGwuIFdoZW4gb21pdHRlZCwgdXNlcyB0aGUgdHJhbnNwb3J0XG4gICAqIGNvbmZpZ3VyZWQgdmlhIHRoZSBjb250ZXh0IHByb3ZpZGVyIChzZXQgYnkgdGhlIGZyYW1ld29yayBhZGFwdGVyJ3MgZ2xvYmFsIHNldHVwKS5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zcG9ydD86IE9ic2lkaWFuVHJhbnNwb3J0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gdmF1bHQuIERlZmF1bHRzIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBsYWluIG9iamVjdCB3aXRoIHN0cmluZyBrZXlzLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYi5ob3ZlckVsZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdmVyRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBob3Zlci4gVGhlIHBvaW50ZXIgaXMgbW92ZWQgdG8gaXRzIGNlbnRlci4gVGhpcyBpcyBhIGxpdmVcbiAgICogcmVuZGVyZXIgRE9NIG5vZGUgXHUyMDE0IHRoZSBjYWxsYmFjayBydW5zIGluLXJlbmRlcmVyLCBzbyBubyBjcm9zcy1wcm9jZXNzXG4gICAqIHNlcmlhbGl6YXRpb24gaXMgbmVlZGVkIChzYW1lIGFzIHtAbGluayBUeXBlSW50b0VkaXRvclBhcmFtcy5lZGl0b3J9KS5cbiAgICpcbiAgICogVGhlIGlucHV0IGdvZXMgdG8gdGhlIHdpbmRvdyB0aGF0IG93bnMgdGhlIGVsZW1lbnQgKGl0c1xuICAgKiBgb3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld2ApLCBzbyBhbiBlbGVtZW50IGluIGEgcG9wb3V0IGlzIGRyaXZlbiBpbiB0aGF0XG4gICAqIHBvcG91dCB3aXRoIG5vIGV4dHJhIHBhcmFtZXRlci5cbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFRoZSBzaGFyZWQgbGlicmFyeSBiYWcgaW5qZWN0ZWQgaW50byBldmVyeSB7QGxpbmsgZXZhbEluT2JzaWRpYW59IGNhbGxiYWNrIGFzXG4gKiB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLmxpYn0uXG4gKlxuICogVHdvIGxheWVycyBjb21wb3NlIGludG8gdGhpcyBvbmUgYmFnLiBUaGUgKipiYXNlKiogXHUyMDE0IHRoZSBoYXJuZXNzLXByb3ZpZGVkXG4gKiByZW5kZXJlci1kcml2aW5nIGhlbHBlcnMgZGVjbGFyZWQgYmVsb3cgKHRoZSB0cnVzdGVkLWlucHV0IHByaW1pdGl2ZXMgYW5kXG4gKiB7QGxpbmsgTGliLndhaXRVbnRpbH0pIFx1MjAxNCBpcyBhbHdheXMgcHJlc2VudC4gT24gdG9wLCBwcm92aWRlciBwYWNrYWdlcyByZWdpc3RlclxuICogYSByZW5kZXJlci1zaWRlIHJlc29sdmVyIHZpYSB7QGxpbmsgcmVnaXN0ZXJMaWJSZXNvbHZlcn0gdG8gYE9iamVjdC5hc3NpZ25gXG4gKiB0aGVpciB3aG9sZSByZW5kZXJlci1zYWZlIGxpYnJhcnkgYXQgcnVudGltZSwgYW5kIGF1Z21lbnQgdGhpcyAqKmF1Z21lbnRhYmxlKipcbiAqIGludGVyZmFjZSAodGhlIGBpMThuZXh0YCBgQ3VzdG9tVHlwZU9wdGlvbnNgIGlkaW9tKSB2aWFcbiAqIGBkZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZydgIHRvIHR5cGUgaXQuIE11bHRpcGxlIHByb3ZpZGVyc1xuICogY29tcG9zZTogdGhlaXIgZXhwb3J0cyBtZXJnZSBhdCBydW50aW1lIGFuZCB0aGVpciBhdWdtZW50YXRpb25zIG1lcmdlIGluIHRoZVxuICogdHlwZSBzeXN0ZW0gKGBpbnRlcmZhY2UgTGliIGV4dGVuZHMgXHUyMDI2YCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBkZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycge1xuICogICBpbnRlcmZhY2UgTGliIGV4dGVuZHMgKHR5cGVvZiBpbXBvcnQoJ29ic2lkaWFuLWRldi11dGlscy9fX21lcmdlZCcpKSB7fVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGliIHtcbiAgLyoqXG4gICAqIENsaWNrcyB0aGUgY2VudGVyIG9mIGFuIGVsZW1lbnQgdXNpbmcgKip0cnVzdGVkKiogcG9pbnRlciBpbnB1dCBcdTIwMTQgRWxlY3Ryb24nc1xuICAgKiBgc2VuZElucHV0RXZlbnRgIG9uIGRlc2t0b3AsIGEgQ0RQIHRvdWNoIHRhcCBpbiB0aGUgV2ViVmlldyBvbiBtb2JpbGUuXG4gICAqXG4gICAqIFRoZSBlbGVtZW50LXJlbGF0aXZlIGNvdW50ZXJwYXJ0IG9mIHtAbGluayBMaWIuY2xpY2tNb3VzZX0sIG1pcnJvcmluZyB0aGVcbiAgICoge0BsaW5rIExpYi5tb3ZlTW91c2V9IC8ge0BsaW5rIExpYi5ob3ZlckVsZW1lbnR9IHNwbGl0LiBVc2VcbiAgICoge0BsaW5rIExpYi5jbGlja01vdXNlfSBkaXJlY3RseSB3aGVuIHRoZSBwb2ludCB0byBjbGljayBpcyAqKm5vdCoqIHRoZVxuICAgKiBlbGVtZW50J3MgY2VudGVyIFx1MjAxNCB0aGUgbWFya2Rvd24gZWRpdG9yJ3MgbWFyZ2luLCBmb3IgaW5zdGFuY2UsIGxpZXMgaW5zaWRlXG4gICAqIGBjbS5zY3JvbGxET01gIGJ1dCBvdXRzaWRlIGAuY20tc2l6ZXJgLCBzbyBubyBlbGVtZW50J3MgY2VudGVyIGxhbmRzIG9uIGl0LlxuICAgKlxuICAgKiAqKk11c3QgYmUgYXdhaXRlZC4qKiBPbiBtb2JpbGUgdGhlIGluamVjdGlvbiBpcyBhIHJvdW5kLXRyaXAgdG8gdGhlIGhvc3QgXHUyMDE0XG4gICAqIHRoZSByZW5kZXJlciBjYW5ub3QgcHJvZHVjZSBhIHRydXN0ZWQgZXZlbnQgaXRzZWxmIFx1MjAxNCBzbyBhIG1pc3NpbmcgYGF3YWl0YFxuICAgKiB3b3VsZCBsZXQgdGhlIGFzc2VydGlvbiBydW4gYmVmb3JlIHRoZSBjbGljayBsYW5kZWQuXG4gICAqXG4gICAqICoqT24gbW9iaWxlIGl0IHdhaXRzIGZvciB0aGUgZWxlbWVudCB0byBzdG9wIG1vdmluZywgYW5kIHJlZnVzZXMgYSBjb3ZlcmVkXG4gICAqIG9uZS4qKiBUaGUgdGFwIHJlYWNoZXMgdGhlIHBhZ2UgYWJvdXQgYSBzZWNvbmQgYWZ0ZXIgaXRzIHBvaW50IGlzIHJlYWQsXG4gICAqIGFuZCBPYnNpZGlhbiBNb2JpbGUgc2xpZGVzIGEgbW9kYWwgaW4gd2l0aCBhIGB0cmFuc2Zvcm1gIHRyYW5zaXRpb24gdGhhdFxuICAgKiBjYW4gaG9sZCBmb3Igb3ZlciBhIHNlY29uZCwgc28gYSBwb2ludCByZWFkIHRvbyBlYXJseSBpcyB3aGVyZSB0aGVcbiAgICogY29udHJvbCAqdXNlZCB0byBiZSouIFNvIHRoZSBtb2JpbGUgcGF0aCBmaXJzdCB3YWl0cyAodXAgdG8gNSBzKSB1bnRpbCBubyBmaW5pdGVcbiAgICogYW5pbWF0aW9uIG9yIHRyYW5zaXRpb24gcnVucyBvbiB0aGUgZWxlbWVudCBvciBhbnkgYW5jZXN0b3IgYW5kIGl0cyBib3hcbiAgICogaGFzIGhlbGQgYWNyb3NzIHR3byByZWFkcywgdGhlbiBjaGVja3Mgd2l0aCBgZWxlbWVudEZyb21Qb2ludGAgdGhhdCB0aGVcbiAgICogY2VudGVyIGJlbG9uZ3MgdG8gdGhlIGVsZW1lbnQgKGFza2VkIG9mIHRoZSBlbGVtZW50J3Mgb3duIHJvb3QsIHNvIGFcbiAgICogdGFyZ2V0IGluc2lkZSBhIHNoYWRvdyByb290IGlzIGhpdC10ZXN0ZWQgaW4gaXRzIG93biB0cmVlKS4gSXQgdGhyb3dzIGEgbmFtZWQgZXJyb3IgaW4gZWl0aGVyIGNhc2VcbiAgICogcmF0aGVyIHRoYW4gdGFwcGluZywgYmVjYXVzZSBhIHRydXN0ZWQgdGFwIGdvZXMgdG8gd2hhdGV2ZXIgaXMgb24gdG9wIGFuZFxuICAgKiB3b3VsZCBvdGhlcndpc2UgbGFuZCBvbiBpdCBzaWxlbnRseS4gVXNlIHtAbGluayBMaWIuY2xpY2tNb3VzZX0gdG8gdGFwIGFcbiAgICogcG9pbnQgZGVsaWJlcmF0ZWx5LCBjb3ZlcmVkIG9yIG5vdC4gRGVza3RvcCBpcyB1bmNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBjbGljaywgdGhlIGJ1dHRvbiB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVyc1xuICAgKiAgIHRvIGhvbGQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgY2xpY2sgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gICAqL1xuICBjbGlja0VsZW1lbnQ6ICh0aGlzOiB2b2lkLCBwYXJhbXM6IENsaWNrRWxlbWVudFBhcmFtcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQ2xpY2tzIGF0IHRoZSBnaXZlbiB3ZWItY29udGVudHMgY29vcmRpbmF0ZXMgdXNpbmcgKip0cnVzdGVkKiogRWxlY3Ryb25cbiAgICogcG9pbnRlciBpbnB1dCwgc28gQ2hyb21pdW0gc3ludGhlc2l6ZXMgYSByZWFsIGBjbGlja2AgKG9yIGBjb250ZXh0bWVudWAsXG4gICAqIGZvciB0aGUgcmlnaHQgYnV0dG9uKSB3aXRoIGBpc1RydXN0ZWQgPT09IHRydWVgLlxuICAgKlxuICAgKiBUaGlzIGlzIHdoYXQgYGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snKSlgIGNhbm5vdCBkbzpcbiAgICogT2JzaWRpYW4gYW5kIENvZGVNaXJyb3IgZ2F0ZSBvbiBgaXNUcnVzdGVkYCwgc28gYSBkaXNwYXRjaGVkIGV2ZW50IHNpbGVudGx5XG4gICAqIGV4ZXJjaXNlcyBub3RoaW5nIHdoaWxlIHRoZSB0ZXN0IHN0aWxsIHBhc3NlcyB3aGF0ZXZlciB3ZWFrZXIgYXNzZXJ0aW9uIGl0XG4gICAqIG1ha2VzLiBPYnNpZGlhbiAxLjEzLjcncyBtYXJrZG93biB2aWV3cG9ydCAobWFyZ2luKSBtZW51LCBmb3IgZXhhbXBsZSxcbiAgICogb3BlbnMgZnJvbSBhIGBjbS5zY3JvbGxET01gIGBjb250ZXh0bWVudWAgbGlzdGVuZXIgZ3VhcmRlZCBieVxuICAgKiBgZS5pc1RydXN0ZWRgLCB3aGljaCBhIGRpc3BhdGNoZWQgZXZlbnQgbmV2ZXIgZ2V0cyBwYXN0LlxuICAgKlxuICAgKiBJdCBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogYSBzaW5nbGUgdHJ1c3RlZCBgbW91c2VNb3ZlYCBcdTIxOTIgYG1vdXNlRG93bmAgXHUyMTkyXG4gICAqIGBtb3VzZVVwYCBhdCBvbmUgcG9pbnQsIHdpdGggbm8gd2FpdGluZyBmb3IgYW55IGVmZmVjdCAoY2FsbGVycyBwb2xsIHRoZWlyXG4gICAqIG93biByZWFkaW5lc3Mgc2lnbmFsKS4gVGhlIGxlYWRpbmcgbW92ZSBpcyB3aGF0IHB1dHMgdGhlIHBvaW50ZXIgb3ZlciB0aGVcbiAgICogaGl0LXRlc3QgdGFyZ2V0IGJlZm9yZSB0aGUgYnV0dG9uIGdvZXMgZG93bi4gUHJlZmVyXG4gICAqIHtAbGluayBMaWIuY2xpY2tFbGVtZW50fSBmb3IgZWxlbWVudC1yZWxhdGl2ZSBjbGlja3MuXG4gICAqXG4gICAqIEEgcmVhbCBjb250ZXh0IG1lbnUgYWN0dWFsbHkgb3BlbnMsIHNvIGEgc3VpdGUgZHJpdmluZyBhIHJpZ2h0IGNsaWNrIG11c3RcbiAgICogY2xvc2UgaXQgKG9yIHJlbW92ZSB0aGUgbGVmdG92ZXIgYC5tZW51YCBlbGVtZW50KSBiZWZvcmUgdGhlIG5leHQgdGVzdC5cbiAgICpcbiAgICogSXQgY2xpY2tzIGluIHRoZSBtYWluIHdpbmRvdyB1bmxlc3Mge0BsaW5rIENsaWNrTW91c2VQYXJhbXMud2luZG93fSBuYW1lcyBhXG4gICAqIHBvcG91dC4ge0BsaW5rIExpYi5jbGlja0VsZW1lbnR9IG5lZWRzIG5vIHN1Y2ggcGFyYW1ldGVyOiBpdCBjbGlja3MgaW4gdGhlXG4gICAqIHdpbmRvdyB0aGF0IG93bnMgaXRzIGVsZW1lbnQuXG4gICAqXG4gICAqICoqT24gbW9iaWxlKiogdGhlIGJ1dHRvbiBtb2RlbCBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBwb3J0OiB0b3VjaCBoYXMgbm9cbiAgICogYnV0dG9ucywgc28gYCdsZWZ0J2AgKHRoZSBkZWZhdWx0KSBpcyBhICoqdGFwKiosIGAncmlnaHQnYCBpcyB0aGVcbiAgICogKipsb25nLXByZXNzKiogdGhhdCBvcGVucyBPYnNpZGlhbiBNb2JpbGUncyBjb250ZXh0IG1lbnUsIGFuZCBgJ21pZGRsZSdgXG4gICAqIHRocm93cyBcdTIwMTQgdGhlcmUgaXMgbm8gZ2VzdHVyZSBmb3IgaXQsIGFuZCBpbnZlbnRpbmcgb25lIHdvdWxkIGJlIHdvcnNlIHRoYW5cbiAgICogc2F5aW5nIHNvLiBUaGUgY29vcmRpbmF0ZXMgYXJlIENTUyBwaXhlbHMgaW4gdGhlIFdlYlZpZXcncyBvd24gdmlld3BvcnQsXG4gICAqIHdoaWNoIGlzIHdoYXQgQ0RQIHRha2VzLCBzbyBgZGV2aWNlUGl4ZWxSYXRpb2AgbmV2ZXIgZW50ZXJzIHRoZSBwaWN0dXJlLlxuICAgKlxuICAgKiAqKk11c3QgYmUgYXdhaXRlZCoqIFx1MjAxNCBzZWUge0BsaW5rIExpYi5jbGlja0VsZW1lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHdlYi1jb250ZW50cyBESVAgY29vcmRpbmF0ZXMgdG8gY2xpY2sgYXQsIHRoZSBidXR0b24gdG9cbiAgICogICBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWNrIGhhcyBiZWVuIGluamVjdGVkLlxuICAgKi9cbiAgY2xpY2tNb3VzZTogKHRoaXM6IHZvaWQsIHBhcmFtczogQ2xpY2tNb3VzZVBhcmFtcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5vdGUgYW5kIGRvZXMgbm90IHJldHVybiB1bnRpbCBpdHMgY29udGVudCBpcyB2ZXJpZmlhYmx5IG9uXG4gICAqIGRpc2ssIHJld3JpdGluZyBpdCBpZiBpdCBpcyBub3QuXG4gICAqXG4gICAqIFVzZSB0aGlzIGluc3RlYWQgb2YgYGFwcC52YXVsdC5jcmVhdGVgIGluIGFueSBzdWl0ZSB0aGF0IG1heSBydW4gb25cbiAgICogQW5kcm9pZC4gVGhlIGVtdWxhdG9yIHRyYW5zcG9ydCBsb3NlcyByb3VnaGx5ICoqMC45ICUqKiBvZiBgdmF1bHQuY3JlYXRlYFxuICAgKiB3cml0ZXMgKG1lYXN1cmVkOiA3IGxvc3QgaW4gODAwIGNyZWF0ZXMpOiB0aGUgZmlsZSBsYW5kcyAqKjAgYnl0ZXMqKiBvblxuICAgKiBkaXNrIHdoaWxlIE9ic2lkaWFuJ3MgaW4tbWVtb3J5IGBURmlsZS5zdGF0YCByZXBvcnRzIHRoZSBmdWxsIGJ5dGUgY291bnQsXG4gICAqIGFuZCBpdCBkb2VzIG5vdCBoZWFsIG9uIGl0cyBvd24uIEEgc3VpdGUgZG9pbmcgfjM0IGNyZWF0ZXMgcGVyIHJ1blxuICAgKiB0aGVyZWZvcmUgaGFzIGEgfjI2ICUgY2hhbmNlIG9mIGF0IGxlYXN0IG9uZSBsb3N0IHdyaXRlLCBhbmQgd2hpY2hldmVyIHRlc3RcbiAgICogbG9zZXMgdGhhdCBsb3R0ZXJ5IGZhaWxzIG9uIGEgYHdhaXRVbnRpbGAgZm9yIGNvbnRlbnQgdGhhdCB3YXMgbmV2ZXJcbiAgICogd3JpdHRlbiBcdTIwMTQgd2hpY2ggaXMgd2h5IGl0IHJlYWRzIGFzIGFuIHVucmVsYXRlZCBwZXItdGVzdCBmbGFrZSByYXRoZXIgdGhhblxuICAgKiBvbmUgc2hhcmVkIGNhdXNlLlxuICAgKlxuICAgKiBWZXJpZmljYXRpb24gaXMgYnkgKipyZWFkaW5nIHRoZSBub3RlIGJhY2sqKiwgbmV2ZXIgYnkgaW5zcGVjdGluZ1xuICAgKiBgVEZpbGUuc3RhdGA6IGBzdGF0YCBpcyBleGFjdGx5IHRoZSBmaWVsZCB0aGF0IGxpZXMgaGVyZS4gQSByZXdyaXRlIHRocm91Z2hcbiAgICogYHZhdWx0Lm1vZGlmeWAgd2l0aCB0aGUgc2FtZSBjb250ZW50IGxhbmRzIGNvcnJlY3RseSAoYWxzbyBtZWFzdXJlZCksIHNvIGFcbiAgICogbG9zdCB3cml0ZSBjb3N0cyBhIHJldHJ5IHJhdGhlciB0aGFuIGEgZmFpbHVyZS4gQSBub3RlIHdob3NlIGNvbnRlbnQgc3RpbGxcbiAgICogZG9lcyBub3QgbWF0Y2ggYWZ0ZXIgdGhlIGJvdW5kZWQgcmV0cmllcyB0aHJvd3MsIG5hbWluZyB0aGUgcGF0aCBhbmQgYm90aFxuICAgKiBsZW5ndGhzLCBzbyBhIGdlbnVpbmVseSBicm9rZW4gd3JpdGUgZmFpbHMgbG91ZGx5IGluc3RlYWQgb2Ygc3Bpbm5pbmcuXG4gICAqXG4gICAqIEhhcm1sZXNzIGV2ZXJ5d2hlcmUgZWxzZSBcdTIwMTQgb24gYSB0cmFuc3BvcnQgdGhhdCBkb2VzIG5vdCBsb3NlIHdyaXRlcyB0aGVcbiAgICogcmVhZC1iYWNrIG1hdGNoZXMgZmlyc3QgdGltZSBhbmQgbm90aGluZyBpcyByZXdyaXR0ZW4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbm90ZSBwYXRoIGFuZCBjb250ZW50LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGNyZWF0ZWQgZmlsZSwgb25jZSBpdHMgY29udGVudFxuICAgKiAgIGlzIGNvbmZpcm1lZC5cbiAgICovXG4gIGNyZWF0ZU5vdGU6ICh0aGlzOiB2b2lkLCBwYXJhbXM6IENyZWF0ZU5vdGVQYXJhbXMpID0+IFByb21pc2U8VEZpbGU+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byB0aGUgY2VudGVyIG9mIGFuIGVsZW1lbnQgdXNpbmcgKip0cnVzdGVkKipcbiAgICogRWxlY3Ryb24gcG9pbnRlciBpbnB1dCwgdGhlbiBwb2xscyB1bnRpbCB0aGUgZWxlbWVudCBhY3R1YWxseSBtYXRjaGVzXG4gICAqIGA6aG92ZXJgLlxuICAgKlxuICAgKiBCZWNhdXNlIHRoZSBtb3ZlIGlzIHRydXN0ZWQgKHNlZSB7QGxpbmsgTGliLm1vdmVNb3VzZX0pLCB0aGUgcmVhbCBgOmhvdmVyYFxuICAgKiBzdGF0ZSB0YWtlcyBlZmZlY3QgaW4gdGhlIENTUyBlbmdpbmUgXHUyMDE0IHJlYWwgdGhlbWUgYHZhcigpYCB2YWx1ZXMgYW5kIHJlYWxcbiAgICogY29tcG9zaXRpbmcgXHUyMDE0IGluc3RlYWQgb2YgYSBoYW5kLXNpbXVsYXRlZCBjYXNjYWRlLiBJdCBwb2xscyB0aGUgbGl2ZVxuICAgKiBgZWxlbWVudC5tYXRjaGVzKCc6aG92ZXInKWAgc3RhdGUgKG5vdCBhIGZpeGVkIGRlbGF5KSwgc28gaXQgaXMgcm9idXN0IHVuZGVyXG4gICAqIHNoYXJlZC1pbnN0YW5jZSBsb2FkLiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkIHdpbmRvdydzICoqZ2xvYmFsKipcbiAgICogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGEgdGltZS5cbiAgICpcbiAgICogKipEZXNrdG9wIG9ubHkgXHUyMDE0IGl0IHRocm93cyBvbiBtb2JpbGUqKiwgZGVsaWJlcmF0ZWx5OiB0b3VjaCBpbnB1dCBoYXMgbm9cbiAgICogaG92ZXIgc3RhdGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgZmFpdGhmdWwgdG8gaW5qZWN0LiBBIHNpbGVudCBuby1vcCB3b3VsZFxuICAgKiBsZWF2ZSBhIHRlc3QgYXNzZXJ0aW5nIGFnYWluc3QgYSBob3ZlciB0aGF0IG5ldmVyIGhhcHBlbmVkLCB3aGljaCBpcyB0aGVcbiAgICogZXhhY3QgZmFsc2UtY29uZmlkZW5jZSBmYWlsdXJlIHRydXN0ZWQgaW5wdXQgZXhpc3RzIHRvIHByZXZlbnQuIEJyYW5jaCBvblxuICAgKiBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYCwgb3IgZHJpdmUgdGhlIGVsZW1lbnQgd2l0aCB7QGxpbmsgTGliLmNsaWNrRWxlbWVudH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBob3Zlci5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBlbGVtZW50IG1hdGNoZXMgYDpob3ZlcmAuXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgZWxlbWVudCBuZXZlciBtYXRjaGVzIGA6aG92ZXJgLiBSZXNvbHZpbmcgcXVpZXRseSB0aGVyZVxuICAgKiAgIHdvdWxkIGxldCBhIHRlc3QgcmVhZCBhbiBlbGVtZW50IHRoYXQgaXMgbm90IGhvdmVyZWQgYW5kIHBhc3Mgb24gd2hhdGV2ZXJcbiAgICogICBpdHMgYmFzZSBzdHlsZSBoYXBwZW5zIHRvIGJlLlxuICAgKi9cbiAgaG92ZXJFbGVtZW50OiAodGhpczogdm9pZCwgcGFyYW1zOiBIb3ZlckVsZW1lbnRQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBtb3VzZSBwb2ludGVyIHRvIHRoZSBnaXZlbiB3ZWItY29udGVudHMgY29vcmRpbmF0ZXMgdXNpbmcgYVxuICAgKiAqKnRydXN0ZWQqKiBFbGVjdHJvbiBwb2ludGVyIG1vdmUuXG4gICAqXG4gICAqIEEgdHJ1c3RlZCBtb3ZlIChpbmplY3RlZCB2aWEgRWxlY3Ryb24ncyBgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnRgKVxuICAgKiB1cGRhdGVzIHRoZSByZWFsIHBvaW50ZXIgc3RhdGUgaW4gdGhlIENTUyBlbmdpbmUsIHNvIGA6aG92ZXJgIHJ1bGVzXG4gICAqIGdlbnVpbmVseSBhcHBseSBcdTIwMTQgdW5saWtlIGBkaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW92ZXInKSlgLFxuICAgKiB3aGljaCBpcyB1bnRydXN0ZWQgYW5kIG5ldmVyIHNldHMgYDpob3ZlcmAuIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWRcbiAgICogd2luZG93J3MgKipnbG9iYWwqKiBwb2ludGVyLCBzbyBvbmx5IG9uZSBlbGVtZW50IGlzIGhvdmVyZWQgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlOiBpdCBwZXJmb3JtcyBhIHNpbmdsZSBtb3ZlIGFuZCBkb2VzICoqbm90KipcbiAgICogd2FpdCBmb3IgYW55IHN0YXRlIHRvIHNldHRsZSAoY2FsbGVycyBwb2xsIHRoZWlyIG93biByZWFkaW5lc3Mgc2lnbmFsKS5cbiAgICogUHJlZmVyIHtAbGluayBMaWIuaG92ZXJFbGVtZW50fSAvIHtAbGluayBMaWIudW5ob3ZlckVsZW1lbnR9IGZvclxuICAgKiBlbGVtZW50LXJlbGF0aXZlIG1vdmVzOyB1c2UgYG1vdmVNb3VzZWAgZGlyZWN0bHkgd2hlbiBhbiBlbGVtZW50LXJlbGF0aXZlXG4gICAqIHRhcmdldCBkb2VzIG5vdCBmaXQgKGUuZy4gYW4gZWxlbWVudCBzcGFubmluZyB0aGUgZnVsbCB2aWV3cG9ydCB3aWR0aCkuXG4gICAqXG4gICAqICoqRGVza3RvcCBvbmx5IFx1MjAxNCBpdCB0aHJvd3Mgb24gbW9iaWxlKiosIGZvciB0aGUgc2FtZSByZWFzb24gYXNcbiAgICoge0BsaW5rIExpYi5ob3ZlckVsZW1lbnR9OiB0aGVyZSBpcyBubyB0b3VjaCBwb2ludGVyIHRvIG1vdmUuXG4gICAqXG4gICAqIEl0IG1vdmVzIHRoZSBwb2ludGVyIGluIHRoZSBtYWluIHdpbmRvdyB1bmxlc3NcbiAgICoge0BsaW5rIE1vdmVNb3VzZVBhcmFtcy53aW5kb3d9IG5hbWVzIGEgcG9wb3V0LlxuICAgKlxuICAgKiAqKk11c3QgYmUgYXdhaXRlZCoqIFx1MjAxNCBzZWUge0BsaW5rIExpYi5jbGlja0VsZW1lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHdlYi1jb250ZW50cyBESVAgY29vcmRpbmF0ZXMgdG8gbW92ZSB0by5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBtb3ZlIGhhcyBiZWVuIGluamVjdGVkLlxuICAgKi9cbiAgbW92ZU1vdXNlOiAodGhpczogdm9pZCwgcGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE9wZW5zIE9ic2lkaWFuJ3Mgc2V0dGluZ3MgbW9kYWwgb24gYSBnaXZlbiB0YWIsIGFuZCBkb2VzIG5vdCByZXR1cm4gdW50aWxcbiAgICogdGhhdCB0YWIgaGFzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKlxuICAgKiAqKlRoaXMgZXhpc3RzIGJlY2F1c2UgYGFwcC5zZXR0aW5nLm9wZW4oKWAgb24gaXRzIG93biBkb2VzIG5vdCB3b3JrIGZyb20gYVxuICAgKiB0ZXN0LioqIGBhcHAuc2V0dGluZy5jb250YWluZXJFbGAgaXMgYnVpbHQgYXQgc3RhcnR1cCBidXQgaXMgbmV2ZXIgaW4gdGhlXG4gICAqIGRvY3VtZW50LCBhbmQgYG9wZW4oKWAgZG9lcyBub3QgYXR0YWNoIGl0IFx1MjAxNCBzbyB0aGUgbW9kYWwgYnVpbGRzIGludG8gYVxuICAgKiBkZXRhY2hlZCB0cmVlLCBgb3BlbigpYCByZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcsIGFuZCBhIHNjcmVlbnNob3QgdGFrZW5cbiAgICogYWZ0ZXJ3YXJkcyBzaG93cyB0aGUgdW50b3VjaGVkIGRvY3VtZW50LiBUaGF0IGlzIHdoYXQgbWFkZSB0aGUgc2V0dGluZ3MgdGFiXG4gICAqIGxvb2sgaW1wb3NzaWJsZSB0byBjYXB0dXJlLCBhbmQgZ290IHJlY29yZGVkIGFzIHN1Y2ggaW4gdHdvIHBsdWdpbnMuXG4gICAqXG4gICAqIFRoZSBmaXggaXMgb25lIHN0ZXAsIGFuZCBpdHMgKipvcmRlciBpcyBsb2FkLWJlYXJpbmcqKjogdGhlIGNvbnRhaW5lciBpc1xuICAgKiBhcHBlbmRlZCB0byBgZG9jdW1lbnQuYm9keWAgKipiZWZvcmUqKiBgb3BlbigpYC4gQXR0YWNoaW5nIGFmdGVyd2FyZHMgaXMgdG9vXG4gICAqIGxhdGUgXHUyMDE0IHdoYXRldmVyIHRoZSBtb2RhbCBkcmV3IG9uIG9wZW4gaGFzIGFscmVhZHkgZ29uZSBpbnRvIHRoZSBkZXRhY2hlZFxuICAgKiBjb250YWluZXIsIHNvIGl0IGVuZHMgdXAgb24gc2NyZWVuIHNob3dpbmcgdGhlIHdyb25nIHRoaW5nLiBUaGF0IGZhaWx1cmVcbiAgICogbG9va3MgbGlrZSBzdWNjZXNzIHVudGlsIHRoZSBjYXB0dXJlZCBmcmFtZSBpcyBleGFtaW5lZCwgd2hpY2ggaXMgdGhlIHRyYXBcbiAgICogdGhpcyBoZWxwZXIgZXhpc3RzIHRvIHJlbW92ZS5cbiAgICpcbiAgICogUmUtYXR0YWNoaW5nIGlzIGlkZW1wb3RlbnQsIHNvIGEgdGFiIGNsb3NlZCB3aXRoIGBhcHAuc2V0dGluZy5jbG9zZSgpYCBjYW5cbiAgICogc2ltcGx5IGJlIHJlLW9wZW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB0YWIgdG8gb3BlbiBhbmQgaG93IGxvbmcgdG8gd2FpdCBmb3IgaXQgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG5hbWVzIG9mIHRoZSBzZXR0aW5nIHJvd3MgdGhlXG4gICAqICAgdGFiIHJlbmRlcmVkIFx1MjAxNCBib3RoIHRoZSBwcm9vZiBpdCByZW5kZXJlZCBhbmQgd2hhdCBhIGNhbGxlciBhc3NlcnRzIG9uLiBBXG4gICAqICAgdGFiIHRoYXQgbGVnaXRpbWF0ZWx5IHJlbmRlcnMgbm8gYC5zZXR0aW5nLWl0ZW0tbmFtZWAgcm93cyAoSG90a2V5cywgc2F5KVxuICAgKiAgIHJlc29sdmVzIHRvIGFuIGVtcHR5IGFycmF5LlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5vIHRhYiBjYXJyaWVzIHtAbGluayBPcGVuU2V0dGluZ3NUYWJQYXJhbXMudGFiSWR9LCBvciBpZlxuICAgKiAgIHRoZSB0YWIgZG9lcyBub3QgcmVuZGVyIHdpdGhpbiB0aGUgdGltZW91dC5cbiAgICovXG4gIG9wZW5TZXR0aW5nc1RhYjogKHRoaXM6IHZvaWQsIHBhcmFtczogT3BlblNldHRpbmdzVGFiUGFyYW1zKSA9PiBQcm9taXNlPHN0cmluZ1tdPjtcblxuICAvKipcbiAgICogUHJlc3NlcyBhIHNpbmdsZSBrZXkgKG9wdGlvbmFsbHkgd2l0aCBtb2RpZmllcnMpIHVzaW5nICoqdHJ1c3RlZCoqIEVsZWN0cm9uXG4gICAqIGtleWJvYXJkIGlucHV0LCBmaXJpbmcgdGhlIGZ1bGwgcmVhbCBrZXkgcGlwZWxpbmUgXHUyMDE0XG4gICAqIGBrZXlkb3duYCBcdTIxOTIgYGtleXByZXNzYCBcdTIxOTIgYGJlZm9yZWlucHV0YCBcdTIxOTIgYGlucHV0YCBcdTIxOTIgYGtleXVwYC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUga2V5LXByZXNzIGFuYWxvZyBvZiB7QGxpbmsgTGliLnR5cGVJbnRvRWRpdG9yfTogaXQgaW5qZWN0cyBhXG4gICAqIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2VxdWVuY2UgdmlhIEVsZWN0cm9uJ3NcbiAgICogYHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50YCwgc28gaXQgaXMgZGVsaXZlcmVkIHRvIHRoZSB3aW5kb3cncyBET00tZm9jdXNlZFxuICAgKiBlbGVtZW50IGFuZCBmbG93cyB0aHJvdWdoIHRoZSByZWFsIGlucHV0IHBpcGVsaW5lIFx1MjAxNCB1bmxpa2VcbiAgICogYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgLCB3aGljaCBpcyB1bnRydXN0ZWQgKGBpc1RydXN0ZWQ6XG4gICAqIGZhbHNlYCkgYW5kIGlnbm9yZWQgYnkgQ29kZU1pcnJvciBhbmQgbW9zdCBrZXkgaGFuZGxlcnMuIFVzZSBpdCBmb3Igc3BlY2lhbFxuICAgKiBrZXlzIChgJ0VudGVyJ2AsIGAnRXNjYXBlJ2AsIGAnVGFiJ2AsIGFycm93IGtleXMpIGFuZCBtb2RpZmllciBjb21iaW5hdGlvbnNcbiAgICogKGBTaGlmdCtFbnRlcmAsIGBDdHJsK0FgKSB0aGF0IHtAbGluayBMaWIudHlwZUludG9FZGl0b3J9ICh3aGljaCB0eXBlc1xuICAgKiBwcmludGFibGUgdGV4dCkgZG9lcyBub3QgY292ZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBwcmltaXRpdmU6IGl0IGluamVjdHMgdGhlIGtleSBwcmVzcyBhbmQgZG9lcyAqKm5vdCoqXG4gICAqIHBvbGwgZm9yIGFueSBlZmZlY3QgKGEga2V5IHByZXNzIGhhcyBubyB1bml2ZXJzYWwgb2JzZXJ2YWJsZSBvdXRjb21lIFx1MjAxNFxuICAgKiBgRW50ZXJgIGVkaXRzIHRoZSBkb2N1bWVudCwgYEVzY2FwZWAgY2xvc2VzIGEgbW9kYWwsIGBBcnJvd0Rvd25gIG1vdmVzIHRoZVxuICAgKiBzZWxlY3Rpb24pLiBUaGUgY2FsbGVyIGZvY3VzZXMgdGhlIGludGVuZGVkIHRhcmdldCBmaXJzdCwgdGhlbiBhd2FpdHMgdGhlXG4gICAqIGV4cGVjdGVkIGVmZmVjdCB2aWEge0BsaW5rIExpYi53YWl0VW50aWx9LiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkXG4gICAqIHdpbmRvdydzICoqZ2xvYmFsKiogZm9jdXMsIHNvIG9ubHkgdGhlIERPTS1mb2N1c2VkIGVsZW1lbnQgcmVjZWl2ZXMgdGhlIGtleS5cbiAgICpcbiAgICogSXQgcHJlc3NlcyB0aGUga2V5IGluIHRoZSBtYWluIHdpbmRvdyB1bmxlc3NcbiAgICoge0BsaW5rIFByZXNzS2V5UGFyYW1zLndpbmRvd30gbmFtZXMgYSBwb3BvdXQuIEVhY2ggT2JzaWRpYW4gd2luZG93IGlzIGl0c1xuICAgKiBvd24gd2ViIGNvbnRlbnRzLCBzbyBhIGtleSBwcmVzc2VkIGluIG9uZSBuZXZlciByZWFjaGVzIGFub3RoZXIuXG4gICAqXG4gICAqICoqT24gbW9iaWxlKiogdGhlIHNhbWUgc2VxdWVuY2UgaXMgaW5qZWN0ZWQgdGhyb3VnaCB0aGUgV2ViVmlldydzIGRlYnVnZ2VyXG4gICAqIChgSW5wdXQuZGlzcGF0Y2hLZXlFdmVudGApLCB3aGljaCBpcyBlcXVhbGx5IHRydXN0ZWQuIE5hbWVkIGtleXMgKGAnRW50ZXInYCxcbiAgICogYCdFc2NhcGUnYCwgYCdUYWInYCwgYCdCYWNrc3BhY2UnYCwgYCdEZWxldGUnYCwgdGhlIGFycm93cykgYW5kIHNpbmdsZVxuICAgKiBwcmludGFibGUgY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkOyBhbnkgb3RoZXIgbXVsdGktY2hhcmFjdGVyIG5hbWUgdGhyb3dzXG4gICAqIHJhdGhlciB0aGFuIHByZXNzaW5nIG5vdGhpbmcuXG4gICAqXG4gICAqICoqTXVzdCBiZSBhd2FpdGVkKiogXHUyMDE0IHNlZSB7QGxpbmsgTGliLmNsaWNrRWxlbWVudH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUga2V5IHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5IHByZXNzIGhhcyBiZWVuXG4gICAqICAgaW5qZWN0ZWQuXG4gICAqL1xuICBwcmVzc0tleTogKHRoaXM6IHZvaWQsIHBhcmFtczogUHJlc3NLZXlQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFR5cGVzIHRleHQgaW50byBhIENvZGVNaXJyb3Ige0BsaW5rIEVkaXRvcn0gdXNpbmcgKip0cnVzdGVkKiogRWxlY3Ryb25cbiAgICoga2V5Ym9hcmQgaW5wdXQuXG4gICAqXG4gICAqIFR5cGluZyBpcyBwcmVzc2luZyBlYWNoIGNoYXJhY3RlciBrZXkgaW4gdHVybjogdGhpcyBmb2N1c2VzIHRoZSBlZGl0b3JcbiAgICogKGNhcmV0IHRvIGVuZCkgYW5kIHByZXNzZXMgZXZlcnkgY29kZSBwb2ludCBvZiBgdGV4dGAgdmlhXG4gICAqIHtAbGluayBMaWIucHJlc3NLZXl9IFx1MjAxNCB0aGUgc2FtZSB0cnVzdGVkIGBrZXlEb3duYCBcdTIxOTIgYGNoYXJgIFx1MjE5MiBga2V5VXBgIGEgcmVhbFxuICAgKiB1c2VyIHByb2R1Y2VzLiBFYWNoIGtleXN0cm9rZSBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzIERPTS1mb2N1c2VkXG4gICAqIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggQ29kZU1pcnJvcidzIHJlYWwgaW5wdXQgcGlwZWxpbmUsIHNvIHRoZSB0eXBlZFxuICAgKiB0ZXh0IHJlYWNoZXMgdGhlIGRvY3VtZW50ICoqb25seSBpZiB0aGUgZWRpdG9yIGdlbnVpbmVseSBob2xkcyBmb2N1cyoqLlxuICAgKiBUaGlzIG1ha2VzIFwidGhlIHVzZXIgdHlwZWQgaW50byB0aGUgZWRpdG9yXCIgYSBmYWl0aGZ1bCBlbmQtdG8tZW5kIGNoZWNrLFxuICAgKiB1bmxpa2UgYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgICh1bnRydXN0ZWQgXHUyMDE0IGlnbm9yZWQgYnlcbiAgICogQ29kZU1pcnJvcikgb3IgYGV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JylgIChtdXRhdGVzIHRoZSBzZWxlY3Rpb24gZXZlblxuICAgKiB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQsIG1hc2tpbmcgZm9jdXMgYnVncyBhcyBmYWxzZSBwb3NpdGl2ZXMpLlxuICAgKlxuICAgKiBBZnRlciBpbmplY3RpbmcgdGhlIGtleXN0cm9rZXMgaXQgcG9sbHMgdW50aWwgdGhlIGRvY3VtZW50IHJlZmxlY3RzIHRoZVxuICAgKiBpbnB1dCwgb3IgYSBib3VuZGVkIHRpbWVvdXQgZWxhcHNlcyAodGhlIGV4cGVjdGVkIG91dGNvbWUgd2hlbiB0aGUgZWRpdG9yXG4gICAqIGlzIHJlYWQtb25seSBhbmQgcmVqZWN0cyB0aGUgaW5wdXQsIG9yIHdoZW4gZm9jdXMgd2FzIHN0b2xlbikuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXlzdHJva2VzIGhhdmUgc2V0dGxlZC5cbiAgICovXG4gIHR5cGVJbnRvRWRpdG9yOiAodGhpczogdm9pZCwgcGFyYW1zOiBUeXBlSW50b0VkaXRvclBhcmFtcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gYSBwb2ludCBqdXN0IG91dHNpZGUgYW4gZWxlbWVudCdzIGJvdW5kaW5nIGJveFxuICAgKiB1c2luZyBhICoqdHJ1c3RlZCoqIEVsZWN0cm9uIHBvaW50ZXIgbW92ZSwgdGhlbiBwb2xscyB1bnRpbCB0aGUgZWxlbWVudCBub1xuICAgKiBsb25nZXIgbWF0Y2hlcyBgOmhvdmVyYC5cbiAgICpcbiAgICogVGhlIGludmVyc2Ugb2Yge0BsaW5rIExpYi5ob3ZlckVsZW1lbnR9LiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkXG4gICAqIHdpbmRvdydzICoqZ2xvYmFsKiogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGEgdGltZS4gV2hlblxuICAgKiBhbiBlbGVtZW50IHNwYW5zIHRoZSBmdWxsIHZpZXdwb3J0IChubyBwb2ludCBvdXRzaWRlIGl0cyBib3ggaXMgcmVhY2hhYmxlKSxcbiAgICogdXNlIHtAbGluayBMaWIubW92ZU1vdXNlfSBkaXJlY3RseSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvIGEga25vd24gZW1wdHlcbiAgICogY29vcmRpbmF0ZSBpbnN0ZWFkLlxuICAgKlxuICAgKiAqKkRlc2t0b3Agb25seSBcdTIwMTQgaXQgdGhyb3dzIG9uIG1vYmlsZSoqLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gICAqIHtAbGluayBMaWIuaG92ZXJFbGVtZW50fS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIHBvaW50ZXIgYXdheSBmcm9tLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGVsZW1lbnQgbm8gbG9uZ2VyIG1hdGNoZXNcbiAgICogICBgOmhvdmVyYC5cbiAgICogQHRocm93cyBXaGVuIHRoZSBlbGVtZW50IGtlZXBzIG1hdGNoaW5nIGA6aG92ZXJgLCB3aGljaCBpcyB3aGF0IGFcbiAgICogICBmdWxsLXZpZXdwb3J0IGVsZW1lbnQgZG9lcy5cbiAgICovXG4gIHVuaG92ZXJFbGVtZW50OiAodGhpczogdm9pZCwgcGFyYW1zOiBVbmhvdmVyRWxlbWVudFBhcmFtcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUG9sbHMgYSBwcmVkaWNhdGUgdW50aWwgaXQgYmVjb21lcyB0cnV0aHksIG9yIHJlamVjdHMgb25jZSBhIGJvdW5kZWRcbiAgICogdGltZW91dCBlbGFwc2VzLlxuICAgKlxuICAgKiBJbnRlZ3JhdGlvbi10ZXN0IGBldmFsSW5PYnNpZGlhbmAgY2FsbGJhY2tzIHJvdXRpbmVseSBuZWVkIHRvIHdhaXQgZm9yIGFuXG4gICAqIGFzeW5jaHJvbm91cyBlZmZlY3QgdG8gc2V0dGxlIChhIHZpZXcgdG8gb3BlbiwgYSBET00gbm9kZSB0byBhcHBlYXIsIGFcbiAgICogc2V0dGluZyB0byBhcHBseSkuIEJlY2F1c2UgdGhlIGNhbGxiYWNrIGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmRcbiAgICogY2Fubm90IGltcG9ydCBtb2R1bGVzLCBpdCBjYW4ndCByZXVzZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCdcbiAgICogYHJldHJ5V2l0aFRpbWVvdXRgIC8gYHJ1bldpdGhUaW1lb3V0YC4gVGhpcyBoZWxwZXIgaXMgdGhlIHNoYXJlZCwgaW5qZWN0ZWRcbiAgICogcmVwbGFjZW1lbnQgZm9yIHRoZSBwZXItY2xvc3VyZSBwb2xsIGxvb3BzIGNvbnN1bWVycyB3b3VsZCBvdGhlcndpc2VcbiAgICogaGFuZC1yb2xsLlxuICAgKlxuICAgKiBUaGUgYHByZWRpY2F0ZWAgbWF5IGJlIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBcdTIwMTQgaXQgaXMgYXdhaXRlZCBvbiBldmVyeVxuICAgKiBwb2xsLiBJdCBpcyBjaGVja2VkIGltbWVkaWF0ZWx5LCB0aGVuIHJlLWNoZWNrZWQgZXZlcnlcbiAgICogYGludGVydmFsSW5NaWxsaXNlY29uZHNgIHVudGlsIGl0IHJldHVybnMgdHJ1dGh5IG9yIGB0aW1lb3V0SW5NaWxsaXNlY29uZHNgXG4gICAqIGVsYXBzZXMsIGF0IHdoaWNoIHBvaW50IHRoZSByZXR1cm5lZCB7QGxpbmsgUHJvbWlzZX0gcmVqZWN0cyAodGhlIGVycm9yXG4gICAqIGluY2x1ZGVzIGBtZXNzYWdlYCB3aGVuIHByb3ZpZGVkKS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwcmVkaWNhdGUgdG8gcG9sbCBwbHVzIG9wdGlvbmFsIHRpbWVvdXQsIGludGVydmFsLCBhbmRcbiAgICogICB0aW1lb3V0IG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcHJlZGljYXRlIGlzIHRydXRoeS5cbiAgICovXG4gIHdhaXRVbnRpbDogKHRoaXM6IHZvaWQsIHBhcmFtczogV2FpdFVudGlsUGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIFRoZSBtb3VzZSBidXR0b24gYSB0cnVzdGVkIGNsaWNrIHByZXNzZXMsIGluIEVsZWN0cm9uJ3MgYHNlbmRJbnB1dEV2ZW50YFxuICogc3BlbGxpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIE1vdXNlQnV0dG9uID0gJ2xlZnQnIHwgJ21pZGRsZScgfCAncmlnaHQnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBMaWIubW92ZU1vdXNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb3ZlTW91c2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHdpbmRvdyB0byBtb3ZlIHRoZSBwb2ludGVyIGluOiB0aGUgbWFpbiB3aW5kb3cgb3IgYSBwb3BvdXQuXG4gICAqIEVhY2ggT2JzaWRpYW4gd2luZG93IGlzIGl0cyBvd24gRWxlY3Ryb24gd2ViIGNvbnRlbnRzIHdpdGggaXRzIG93biBwb2ludGVyLFxuICAgKiBhbmQgdGhlIGNvb3JkaW5hdGVzIGFyZSBpbiB0aGUgbmFtZWQgd2luZG93J3Mgdmlld3BvcnQuXG4gICAqXG4gICAqIE1vYmlsZSBoYXMgbm8gcG9pbnRlciB0byBtb3ZlLCBzbyB7QGxpbmsgTGliLm1vdmVNb3VzZX0gdGhyb3dzIHRoZXJlXG4gICAqIHdoYXRldmVyIHRoaXMgaXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBtYWluIHdpbmRvdyAoYGdsb2JhbFRoaXNgKVxuICAgKi9cbiAgcmVhZG9ubHkgd2luZG93PzogV2luZG93O1xuXG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBMaWIub3BlblNldHRpbmdzVGFifS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuU2V0dGluZ3NUYWJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBzZXR0aW5ncyB0YWIgdG8gb3BlbiBcdTIwMTQgYSBwbHVnaW4gaWQgZm9yIGEgcGx1Z2luJ3Mgb3duIHRhYiwgb3JcbiAgICogYSBjb3JlIHRhYiBpZCAoYCdlZGl0b3InYCwgYCdob3RrZXlzJ2AsIFx1MjAyNikuXG4gICAqXG4gICAqIFJlcXVpcmVkLCBiZWNhdXNlIG9wZW5pbmcgdGhlIG1vZGFsIHdpdGhvdXQgbmFtaW5nIGEgdGFiIHJlbmRlcnMgKipub3RoaW5nKipcbiAgICogb24gYSBoYXJuZXNzLW93bmVkIGluc3RhbmNlOiB0aGUgbW9kYWwgcmVzdG9yZXMgdGhlIGxhc3QgdGFiIHRoZSBwcm9maWxlXG4gICAqIHVzZWQsIGFuZCBhbiBpc29sYXRlZCBwcm9maWxlIGhhcyBuZXZlciBvcGVuZWQgb25lLCBzbyBgYWN0aXZlVGFiYCBzdGF5c1xuICAgKiBgbnVsbGAgYW5kIG5vIHJvdyBpcyBkcmF3bi4gQW4gdW5rbm93biBpZCBpcyByZWplY3RlZCBpbW1lZGlhdGVseSwgbGlzdGluZ1xuICAgKiB0aGUgaWRzIHRoYXQgZG8gZXhpc3QuXG4gICAqL1xuICByZWFkb25seSB0YWJJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtb2RhbCB0byBvcGVuIGFuZCBmb3IgdGhlIHJlcXVlc3RlZCB0YWIgdG9cbiAgICogcmVuZGVyIGl0cyBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgTGliLnByZXNzS2V5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzc0tleVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHRvIHByZXNzLCBnaXZlbiBhcyBhbiBFbGVjdHJvbiBBY2NlbGVyYXRvciBrZXkgbmFtZSBcdTIwMTQgZS5nLlxuICAgKiBgJ0VudGVyJ2AsIGAnRXNjYXBlJ2AsIGAnVGFiJ2AsIGAnQmFja3NwYWNlJ2AsIGAnRGVsZXRlJ2AsIGFuIGFycm93IGtleVxuICAgKiAoYCdVcCdgIC8gYCdEb3duJ2AgLyBgJ0xlZnQnYCAvIGAnUmlnaHQnYCksIG9yIGEgcHJpbnRhYmxlIGNoYXJhY3RlclxuICAgKiAoYCdhJ2AsIGAnMSdgKS4gVGhlIHByb2R1Y2VkIGNoYXJhY3RlciAod2hlbiB0aGUga2V5IGluc2VydHMgdGV4dCkgaXMgdGhlXG4gICAqIGxpdGVyYWwgYGtleWAgdmFsdWU7IGNhc2UtY29ycmVjdCB0ZXh0IGJlbG9uZ3MgdG9cbiAgICoge0BsaW5rIExpYi50eXBlSW50b0VkaXRvcn0sIG5vdCBhIGtleS1wcmVzcyBwcmltaXRpdmUuXG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZGlmaWVyIGtleXMgdG8gaG9sZCB3aGlsZSB0aGUga2V5IGlzIHByZXNzZWQsIHVzaW5nIE9ic2lkaWFuJ3NcbiAgICoge0BsaW5rIE1vZGlmaWVyfSBuYW1lcyAodGhlIHNhbWUgdmFsdWVzIGFzIGFuIE9ic2lkaWFuIGBIb3RrZXlgKS4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpOyBlYWNoIGlzIG1hcHBlZCB0b1xuICAgKiBFbGVjdHJvbidzIGxvd2VyY2FzZSBgc2VuZElucHV0RXZlbnRgIG1vZGlmaWVyIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbXWBcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVycz86IHJlYWRvbmx5IE1vZGlmaWVyW107XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB3aW5kb3cgdG8gcHJlc3MgdGhlIGtleSBpbjogdGhlIG1haW4gd2luZG93IG9yIGEgcG9wb3V0LiBQYXNzXG4gICAqIHRoZSB3aW5kb3cgdGhhdCBvd25zIHRoZSBmb2N1c2VkIHRhcmdldCwgZS5nLiBgbGVhZi52aWV3LmNvbnRhaW5lckVsLndpbmBcbiAgICogZm9yIGEgcG9wb3V0IGxlYWYuIEVhY2ggT2JzaWRpYW4gd2luZG93IGlzIGl0cyBvd24gRWxlY3Ryb24gd2ViIGNvbnRlbnRzLFxuICAgKiBzbyB0aGUga2V5IGdvZXMgdG8gdGhlIERPTS1mb2N1c2VkIGVsZW1lbnQgb2YgdGhlIHdpbmRvdyBuYW1lZCBoZXJlLFxuICAgKiB3aGljaGV2ZXIgd2luZG93IHRoZSBPUyBoYXMgZm9jdXNlZCwgYW5kIG5ldmVyIHJlYWNoZXMgYW5vdGhlciB3aW5kb3cuXG4gICAqXG4gICAqICoqT24gbW9iaWxlKiogdGhlcmUgYXJlIG5vIHBvcG91dHMsIHNvIGFueSB3aW5kb3cgYnV0IHRoZSBtYWluIG9uZSB0aHJvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBtYWluIHdpbmRvdyAoYGdsb2JhbFRoaXNgKVxuICAgKi9cbiAgcmVhZG9ubHkgd2luZG93PzogV2luZG93O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBMaWIudHlwZUludG9FZGl0b3J9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVJbnRvRWRpdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBlZGl0b3IgdG8gdHlwZSBpbnRvLiBJdCBpcyBmb2N1c2VkICh3aXRoIHRoZSBjYXJldCBtb3ZlZCB0byB0aGUgZW5kIG9mXG4gICAqIHRoZSBkb2N1bWVudCkgYmVmb3JlIHRoZSBrZXlzdHJva2VzIGFyZSBpbmplY3RlZC5cbiAgICpcbiAgICogVGhlIGtleXN0cm9rZXMgZ28gdG8gdGhlIHdpbmRvdyB0aGF0IG93bnMgdGhlIGVkaXRvciwgc28gYW4gZWRpdG9yIGluIGFcbiAgICogcG9wb3V0IGlzIHR5cGVkIGludG8gaW4gdGhhdCBwb3BvdXQgd2l0aCBubyBleHRyYSBwYXJhbWV0ZXIuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I6IEVkaXRvcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gdHlwZS4gRWFjaCBjb2RlIHBvaW50IGlzIHByZXNzZWQgdmlhIHtAbGluayBMaWIucHJlc3NLZXl9XG4gICAqIChhIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGApLCBleGFjdGx5IGFzIGEgcmVhbCB1c2VyIHR5cGluZy5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgTGliLnVuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmhvdmVyRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS4gVGhlIHBvaW50ZXIgaXMgbW92ZWQgdG8gYSBwb2ludFxuICAgKiBqdXN0IG91dHNpZGUgaXRzIGJvdW5kaW5nIGJveC4gVGhpcyBpcyBhIGxpdmUgcmVuZGVyZXIgRE9NIG5vZGUgXHUyMDE0IHRoZVxuICAgKiBjYWxsYmFjayBydW5zIGluLXJlbmRlcmVyLCBzbyBubyBjcm9zcy1wcm9jZXNzIHNlcmlhbGl6YXRpb24gaXMgbmVlZGVkXG4gICAqIChzYW1lIGFzIHtAbGluayBUeXBlSW50b0VkaXRvclBhcmFtcy5lZGl0b3J9KS5cbiAgICpcbiAgICogVGhlIG1vdmUgZ29lcyB0byB0aGUgd2luZG93IHRoYXQgb3ducyB0aGUgZWxlbWVudCwgc28gYW4gZWxlbWVudCBpbiBhXG4gICAqIHBvcG91dCBpcyBkcml2ZW4gaW4gdGhhdCBwb3BvdXQgd2l0aCBubyBleHRyYSBwYXJhbWV0ZXIuXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgTGliLndhaXRVbnRpbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdFVudGlsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xsaW5nIGludGVydmFsIGJldHdlZW4gcHJlZGljYXRlIGNoZWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDUwYFxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZGV0YWlsIGFwcGVuZGVkIHRvIHRoZSB0aW1lb3V0IGVycm9yIG1lc3NhZ2UsIGRlc2NyaWJpbmcgd2hhdFxuICAgKiB3YXMgYmVpbmcgd2FpdGVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25kaXRpb24gdG8gd2FpdCBmb3IuIFBvbGxlZCBpbW1lZGlhdGVseSwgdGhlbiBvbiBldmVyeSBpbnRlcnZhbCB1bnRpbFxuICAgKiBpdCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLiBNYXkgYmUgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIFx1MjAxNCBpdCBpc1xuICAgKiBhd2FpdGVkIG9uIGVhY2ggcG9sbC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgYXdhaXRlZCBjb25kaXRpb24gaGFzIGJlZW4gbWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZGljYXRlOiAodGhpczogdm9pZCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBiZWZvcmUgcmVqZWN0aW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gaW5wdXQgb2JqZWN0IHRoYXQgaW5jbHVkZXMgYGFwcGAsIGBvYnNpZGlhbk1vZHVsZWAsXG4gKiBgY29udGV4dGAsIGFuZCBhbnkgYWRkaXRpb25hbCBgaW5wdXRgIHBhc3NlZCBieSB0aGUgY2FsbGVyLlxuICogSXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBpbnZva2VkIGFzIGFuIElJRkUuXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzZWxmLWNvbnRhaW5lZCBcdTIwMTQgY2xvc3VyZXMgb3ZlciBsb2NhbCB2YXJpYWJsZXMgd2lsbCBub3Qgd29yay5cbiAqIFBhc3MgYW55IG5lZWRlZCB2YWx1ZXMgYXMgYGlucHV0YCBcdTIwMTQgdGhleSBhcmUgSlNPTi1zZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgb24gdGhlIE9ic2lkaWFuIHNpZGUuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBgSlNPTi5zdHJpbmdpZnlgJ2Qgb24gdGhlIE9ic2lkaWFuIHNpZGUgYW5kIHBhcnNlZCBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjYWxsYmFja2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsSW5PYnNpZGlhbjxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIHBhcmFtczogRXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD5cbik6IFByb21pc2U8UmVzdWx0PiB7XG4gIGNvbnN0IHsgY2FsbGJhY2ssIGNvbnRleHRJZCwgaW5wdXQgPSB7fSwgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcyA9IGZhbHNlLCB0cmFuc3BvcnQ6IHRyYW5zcG9ydE92ZXJyaWRlLCB2YXVsdFBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgY3dkID0gdmF1bHRQYXRoID8/IGdldFZhdWx0UGF0aCgpID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gQ2hlY2s6IFZhdWx0IHBhdGggZXhpc3RzIG9uIGRpc2suXG4gIGlmICh2YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiAhZXhpc3RzU3luYyh2YXVsdFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBwYXRoIGRvZXMgbm90IGV4aXN0OiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydE92ZXJyaWRlID8/IGF3YWl0IGdldE9yQ3JlYXRlVHJhbnNwb3J0KGdldFRyYW5zcG9ydE9wdGlvbnMoKSk7XG5cbiAgaWYgKCFzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzKSB7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnByZWZsaWdodENoZWNrKGN3ZCk7XG4gIH1cblxuICBhd2FpdCBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQodHJhbnNwb3J0LCBjd2QpO1xuXG4gIGNvbnN0IG5hbWVzcGFjZUNhbGxQYXJhbXM6IEdlbmVyYXRlTmFtZXNwYWNlQ2FsbFBhcmFtcyA9IHtcbiAgICBjYWxsYmFjayxcbiAgICBpbnB1dCxcbiAgICAuLi4oY29udGV4dElkICE9PSB1bmRlZmluZWQgJiYgeyBjb250ZXh0SWQ6IFN0cmluZyhjb250ZXh0SWQpIH0pXG4gIH07XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IGdlbmVyYXRlTmFtZXNwYWNlQ2FsbChuYW1lc3BhY2VDYWxsUGFyYW1zKTtcblxuICBjb25zdCByZXN1bHRTdHJpbmcgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0cmluZyA9PT0gJycgfHwgcmVzdWx0U3RyaW5nID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIGxldCBlbnZlbG9wZTogRXZhbFJlc3VsdEVudmVsb3BlO1xuICB0cnkge1xuICAgIGVudmVsb3BlID0gSlNPTi5wYXJzZShyZXN1bHRTdHJpbmcpIGFzIEV2YWxSZXN1bHRFbnZlbG9wZTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogT2JzaWRpYW4gcmV0dXJuZWQgbm9uLUpTT04gb3V0cHV0OiAke3Jlc3VsdFN0cmluZ31gKTtcbiAgfVxuXG4gIGlmICgndHlwZScgaW4gZW52ZWxvcGUpIHtcbiAgICBpZiAoZW52ZWxvcGUudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gUmV3cml0ZSBiYXJlLW9yaWdpbiBsb2NhbGhvc3Qgc3RhY2sgZnJhbWVzIGxpa2UgXCIoaHR0cDovL2xvY2FsaG9zdC86OTE1OjMyKVwiXG4gICAgICAvLyBzbyBWaXRlc3QncyBzb3VyY2UtbWFwIHJlc29sdmVyIHdvbid0IGV4dHJhY3QgXCIvXCIgYXMgdGhlIGZpbGUgcGF0aCBhbmQgY3Jhc2hcbiAgICAgIC8vIHdpdGggRUlTRElSIHdoZW4gaXQgdHJpZXMgdG8gcmVhZEZpbGVTeW5jIG9uIHRoZSByb290IGRpcmVjdG9yeS5cbiAgICAgIGNvbnN0IHNhbml0aXplZERldGFpbCA9IGVudmVsb3BlLnZhbHVlXG4gICAgICAgIC5yZXBsYWNlQWxsKC9cXChodHRwcz86XFwvXFwvbG9jYWxob3N0XFwvOig/PGxpbmU+XFxkKS9nLCAnKG9ic2lkaWFuLXdlYnZpZXc6JDxsaW5lPicpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogRXJyb3IgaW5zaWRlIE9ic2lkaWFuOlxcbiR7c2FuaXRpemVkRGV0YWlsfWApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQgYXMgUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGVudmVsb3BlLnZhbHVlIGFzIFJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBLHFCQUEyQjtBQUMzQiwwQkFBb0I7QUFTcEIsOEJBR087QUFDUCxvQ0FBc0M7QUFDdEMsaUNBQTRDO0FBQzVDLCtCQUFxQztBQTJCckMsTUFBTSxZQUFZO0FBaXJCbEIsZUFBc0IsZUFDcEIsUUFDaUI7QUFDakIsUUFBTSxFQUFFLFVBQVUsV0FBVyxRQUFRLENBQUMsR0FBRyw0QkFBNEIsT0FBTyxXQUFXLG1CQUFtQixVQUFVLElBQUk7QUFDeEgsUUFBTSxNQUFNLGlCQUFhLHNDQUFhLEtBQUssb0JBQUFBLFFBQVEsSUFBSTtBQUd2RCxNQUFJLGNBQWMsVUFBYSxLQUFDLDJCQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLFVBQU0sbURBQXFCLDZDQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQywyQkFBMkI7QUFDOUIsVUFBTSxVQUFVLGVBQWUsR0FBRztBQUFBLEVBQ3BDO0FBRUEsWUFBTSx3REFBNEIsV0FBVyxHQUFHO0FBRWhELFFBQU0sc0JBQW1EO0FBQUEsSUFDdkQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFJLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxTQUFTLEVBQUU7QUFBQSxFQUNoRTtBQUVBLFFBQU0saUJBQWEscURBQXNCLG1CQUFtQjtBQUU1RCxRQUFNLGVBQWUsTUFBTSxVQUFVLFNBQVMsWUFBWSxFQUFFLElBQUksQ0FBQztBQUVqRSxNQUFJLGlCQUFpQixNQUFNLGlCQUFpQixXQUFXO0FBQ3JELFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDRixlQUFXLEtBQUssTUFBTSxZQUFZO0FBQUEsRUFDcEMsUUFBUTtBQUNOLFVBQU0sSUFBSSxNQUFNLHNEQUFzRCxZQUFZLEVBQUU7QUFBQSxFQUN0RjtBQUVBLE1BQUksVUFBVSxVQUFVO0FBQ3RCLFFBQUksU0FBUyxTQUFTLFNBQVM7QUFJN0IsWUFBTSxrQkFBa0IsU0FBUyxNQUM5QixXQUFXLHlDQUF5QywyQkFBMkI7QUFDbEYsWUFBTSxJQUFJLE1BQU07QUFBQSxFQUEyQyxlQUFlLEVBQUU7QUFBQSxJQUM5RTtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxTQUFTO0FBQ2xCOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
@@ -22,6 +22,10 @@ export interface ClickElementParams {
22
22
  * The element to click. The pointer is moved to its center. This is a live
23
23
  * renderer DOM node — the callback runs in-renderer, so no cross-process
24
24
  * serialization is needed (same as {@link TypeIntoEditorParams.editor}).
25
+ *
26
+ * The input goes to the window that owns the element (its
27
+ * `ownerDocument.defaultView`), so an element in a popout is driven in that
28
+ * popout with no extra parameter.
25
29
  */
26
30
  readonly element: HTMLElement;
27
31
  /**
@@ -49,6 +53,18 @@ export interface ClickMouseParams {
49
53
  * @default `[]`
50
54
  */
51
55
  readonly modifiers?: readonly Modifier[];
56
+ /**
57
+ * The Obsidian window to click in: the main window or a popout. Pass the
58
+ * window that owns the target, e.g. `leaf.view.containerEl.win` for a popout
59
+ * leaf. Each Obsidian window is its own Electron web contents, so a click
60
+ * sent to one never reaches another, and the coordinates are in the named
61
+ * window's viewport.
62
+ *
63
+ * **On mobile** there are no popouts, so any window but the main one throws.
64
+ *
65
+ * @default the main window (`globalThis`)
66
+ */
67
+ readonly window?: Window;
52
68
  /**
53
69
  * The x coordinate (web-contents DIP) to click at.
54
70
  */
@@ -148,6 +164,10 @@ export interface HoverElementParams {
148
164
  * The element to hover. The pointer is moved to its center. This is a live
149
165
  * renderer DOM node — the callback runs in-renderer, so no cross-process
150
166
  * serialization is needed (same as {@link TypeIntoEditorParams.editor}).
167
+ *
168
+ * The input goes to the window that owns the element (its
169
+ * `ownerDocument.defaultView`), so an element in a popout is driven in that
170
+ * popout with no extra parameter.
151
171
  */
152
172
  readonly element: HTMLElement;
153
173
  }
@@ -226,6 +246,10 @@ export interface Lib {
226
246
  * A real context menu actually opens, so a suite driving a right click must
227
247
  * close it (or remove the leftover `.menu` element) before the next test.
228
248
  *
249
+ * It clicks in the main window unless {@link ClickMouseParams.window} names a
250
+ * popout. {@link Lib.clickElement} needs no such parameter: it clicks in the
251
+ * window that owns its element.
252
+ *
229
253
  * **On mobile** the button model does not survive the port: touch has no
230
254
  * buttons, so `'left'` (the default) is a **tap**, `'right'` is the
231
255
  * **long-press** that opens Obsidian Mobile's context menu, and `'middle'`
@@ -313,6 +337,9 @@ export interface Lib {
313
337
  * **Desktop only — it throws on mobile**, for the same reason as
314
338
  * {@link Lib.hoverElement}: there is no touch pointer to move.
315
339
  *
340
+ * It moves the pointer in the main window unless
341
+ * {@link MoveMouseParams.window} names a popout.
342
+ *
316
343
  * **Must be awaited** — see {@link Lib.clickElement}.
317
344
  *
318
345
  * @param params - The web-contents DIP coordinates to move to.
@@ -371,6 +398,10 @@ export interface Lib {
371
398
  * expected effect via {@link Lib.waitUntil}. It targets the single shared
372
399
  * window's **global** focus, so only the DOM-focused element receives the key.
373
400
  *
401
+ * It presses the key in the main window unless
402
+ * {@link PressKeyParams.window} names a popout. Each Obsidian window is its
403
+ * own web contents, so a key pressed in one never reaches another.
404
+ *
374
405
  * **On mobile** the same sequence is injected through the WebView's debugger
375
406
  * (`Input.dispatchKeyEvent`), which is equally trusted. Named keys (`'Enter'`,
376
407
  * `'Escape'`, `'Tab'`, `'Backspace'`, `'Delete'`, the arrows) and single
@@ -461,6 +492,17 @@ export type MouseButton = 'left' | 'middle' | 'right';
461
492
  * Parameters for {@link Lib.moveMouse}.
462
493
  */
463
494
  export interface MoveMouseParams {
495
+ /**
496
+ * The Obsidian window to move the pointer in: the main window or a popout.
497
+ * Each Obsidian window is its own Electron web contents with its own pointer,
498
+ * and the coordinates are in the named window's viewport.
499
+ *
500
+ * Mobile has no pointer to move, so {@link Lib.moveMouse} throws there
501
+ * whatever this is.
502
+ *
503
+ * @default the main window (`globalThis`)
504
+ */
505
+ readonly window?: Window;
464
506
  /**
465
507
  * The x coordinate (web-contents DIP) to move the pointer to.
466
508
  */
@@ -515,6 +557,18 @@ export interface PressKeyParams {
515
557
  * @default `[]`
516
558
  */
517
559
  readonly modifiers?: readonly Modifier[];
560
+ /**
561
+ * The Obsidian window to press the key in: the main window or a popout. Pass
562
+ * the window that owns the focused target, e.g. `leaf.view.containerEl.win`
563
+ * for a popout leaf. Each Obsidian window is its own Electron web contents,
564
+ * so the key goes to the DOM-focused element of the window named here,
565
+ * whichever window the OS has focused, and never reaches another window.
566
+ *
567
+ * **On mobile** there are no popouts, so any window but the main one throws.
568
+ *
569
+ * @default the main window (`globalThis`)
570
+ */
571
+ readonly window?: Window;
518
572
  }
519
573
  /**
520
574
  * Parameters for {@link Lib.typeIntoEditor}.
@@ -523,6 +577,9 @@ export interface TypeIntoEditorParams {
523
577
  /**
524
578
  * The editor to type into. It is focused (with the caret moved to the end of
525
579
  * the document) before the keystrokes are injected.
580
+ *
581
+ * The keystrokes go to the window that owns the editor, so an editor in a
582
+ * popout is typed into in that popout with no extra parameter.
526
583
  */
527
584
  readonly editor: Editor;
528
585
  /**
@@ -540,6 +597,9 @@ export interface UnhoverElementParams {
540
597
  * just outside its bounding box. This is a live renderer DOM node — the
541
598
  * callback runs in-renderer, so no cross-process serialization is needed
542
599
  * (same as {@link TypeIntoEditorParams.editor}).
600
+ *
601
+ * The move goes to the window that owns the element, so an element in a
602
+ * popout is driven in that popout with no extra parameter.
543
603
  */
544
604
  readonly element: HTMLElement;
545
605
  }
@@ -43,6 +43,8 @@ __export(index_exports, {
43
43
  SilentAsarFallbackError: () => import_silent_asar_fallback_error.SilentAsarFallbackError,
44
44
  StaleBuildError: () => import_stale_build_error.StaleBuildError,
45
45
  TemporaryVault: () => import_temporary_vault.TemporaryVault,
46
+ applyObsidianTheme: () => import_apply_obsidian_theme.applyObsidianTheme,
47
+ assertObsidianThemeUnchanged: () => import_apply_obsidian_theme.assertObsidianThemeUnchanged,
46
48
  assertValidConfigDirectory: () => import_config_directory.assertValidConfigDirectory,
47
49
  bootstrapDemoVaultPlugins: () => import_demo_vault_bootstrap.bootstrapDemoVaultPlugins,
48
50
  buildDemoVaultPopulate: () => import_demo_vault_populate.buildDemoVaultPopulate,
@@ -77,6 +79,7 @@ __export(index_exports, {
77
79
  openObsidianSettingsTab: () => import_open_obsidian_settings_tab.openObsidianSettingsTab,
78
80
  paintOutStatusBar: () => import_paint_out_status_bar.paintOutStatusBar,
79
81
  parseInputMethodState: () => import_soft_keyboard_geometry.parseInputMethodState,
82
+ pinWindowFocus: () => import_pin_window_focus.pinWindowFocus,
80
83
  pollInObsidian: () => import_poll_in_obsidian.pollInObsidian,
81
84
  raiseSoftKeyboard: () => import_soft_keyboard.raiseSoftKeyboard,
82
85
  readDemoVaultTree: () => import_demo_vault_tree.readDemoVaultTree,
@@ -111,6 +114,7 @@ __export(index_exports, {
111
114
  module.exports = __toCommonJS(index_exports);
112
115
  var import_adb = require("./adb.cjs");
113
116
  var import_app_config = require("./app-config.cjs");
117
+ var import_apply_obsidian_theme = require("./apply-obsidian-theme.cjs");
114
118
  var import_asar_fallback_detection = require("./asar-fallback-detection.cjs");
115
119
  var import_capture_obsidian_screenshot = require("./capture-obsidian-screenshot.cjs");
116
120
  var import_capture_screenshot = require("./capture-screenshot.cjs");
@@ -146,6 +150,7 @@ var import_obsidian_version = require("./obsidian-version.cjs");
146
150
  var import_open_obsidian_settings_tab = require("./open-obsidian-settings-tab.cjs");
147
151
  var import_owned_instance_exited_error = require("./owned-instance-exited-error.cjs");
148
152
  var import_paint_out_status_bar = require("./paint-out-status-bar.cjs");
153
+ var import_pin_window_focus = require("./pin-window-focus.cjs");
149
154
  var import_poll_in_obsidian = require("./poll-in-obsidian.cjs");
150
155
  var import_renderer_failed_to_initialize_error = require("./renderer-failed-to-initialize-error.cjs");
151
156
  var import_resolve_emulator_device_id = require("./resolve-emulator-device-id.cjs");
@@ -188,6 +193,8 @@ var import_version_matrix = require("./version-matrix.cjs");
188
193
  SilentAsarFallbackError,
189
194
  StaleBuildError,
190
195
  TemporaryVault,
196
+ applyObsidianTheme,
197
+ assertObsidianThemeUnchanged,
191
198
  assertValidConfigDirectory,
192
199
  bootstrapDemoVaultPlugins,
193
200
  buildDemoVaultPopulate,
@@ -222,6 +229,7 @@ var import_version_matrix = require("./version-matrix.cjs");
222
229
  openObsidianSettingsTab,
223
230
  paintOutStatusBar,
224
231
  parseInputMethodState,
232
+ pinWindowFocus,
225
233
  pollInObsidian,
226
234
  raiseSoftKeyboard,
227
235
  readDemoVaultTree,
@@ -253,4 +261,4 @@ var import_version_matrix = require("./version-matrix.cjs");
253
261
  withSoftKeyboardEnabled,
254
262
  writeDeviceSetting
255
263
  });
256
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBDb25maWdSZXN0b3JlLFxuICBHZXRBcHBDb25maWdQYXJhbXMsXG4gIFNldEFwcENvbmZpZ1BhcmFtcyxcbiAgV2l0aEFwcENvbmZpZ1BhcmFtc1xufSBmcm9tICcuL2FwcC1jb25maWcuY2pzJztcbmV4cG9ydCB7XG4gIGdldEFwcENvbmZpZyxcbiAgcmVzdG9yZUFwcENvbmZpZyxcbiAgc2V0QXBwQ29uZmlnLFxuICB3aXRoQXBwQ29uZmlnXG59IGZyb20gJy4vYXBwLWNvbmZpZy5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2RwQ29tbWFuZFRpbWVvdXRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLmNqcyc7XG5leHBvcnQgeyBDZHBDb21tYW5kVGltZW91dEVycm9yIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvciB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHtcbiAgYXNzZXJ0VmFsaWRDb25maWdEaXJlY3RvcnksXG4gIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWVxufSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmd1bWVudHMsXG4gIENvbnRleHRPZlxufSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgVmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQge1xuICBzZXRTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMsXG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQsXG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtcyxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLmNqcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5janMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLmNqcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5janMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5janMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxDYXBFeGNlZWRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2V2YWwtY2FwLWV4Y2VlZGVkLWVycm9yLmNqcyc7XG5leHBvcnQge1xuICBFdmFsQ2FwRXhjZWVkZWRFcnJvcixcbiAgaXNTY3JpcHRUaW1lb3V0RXJyb3Jcbn0gZnJvbSAnLi9ldmFsLWNhcC1leGNlZWRlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuL2V2YWwtY2FwLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgSGlkZGVuQ2FyZXQsXG4gIEhpZGVDYXJldE9wdGlvbnNcbn0gZnJvbSAnLi9oaWRlLWNhcmV0LmNqcyc7XG5leHBvcnQgeyBoaWRlQ2FyZXQgfSBmcm9tICcuL2hpZGUtY2FyZXQuY2pzJztcbmV4cG9ydCB0eXBlIHsgSGlkZVZhdWx0TmFtZU9wdGlvbnMgfSBmcm9tICcuL2hpZGUtdmF1bHQtbmFtZS5janMnO1xuZXhwb3J0IHsgaGlkZVZhdWx0TmFtZSB9IGZyb20gJy4vaGlkZS12YXVsdC1uYW1lLmNqcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IuY2pzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zLFxuICBNZWFzdXJlTGFiZWxDYXB0aW9uUGFyYW1zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90LFxuICBtZWFzdXJlTGFiZWxDYXB0aW9uXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkNoYW5nZWxvZ1VybHMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuZXhwb3J0IHR5cGUgeyBPcGVuT2JzaWRpYW5TZXR0aW5nc1RhYlBhcmFtcyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIuY2pzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5janMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZVBhcmFtcyxcbiAgUGFpbnRPdXRTdGF0dXNCYXJPcHRpb25zLFxuICBSZXNvbHZlU3RhdHVzQmFyQmFuZFBhcmFtcyxcbiAgU3RhdHVzQmFyQmFuZENvbG9yLFxuICBTdGF0dXNCYXJCYW5kVmVyZGljdFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLmNqcyc7XG5leHBvcnQge1xuICBidWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZSxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX0VER0VfTUFSR0lOX0lOX1BJWEVMUyxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX1NBTVBMRV9JTlNFVF9JTl9QSVhFTFMsXG4gIHBhaW50T3V0U3RhdHVzQmFyLFxuICByZXNvbHZlU3RhdHVzQmFyQmFuZFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLmNqcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgeyByZXNvbHZlRW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWQuY2pzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZVBhcmFtcyxcbiAgQ2hlY2tJc1NvZnRLZXlib2FyZFVwUGFyYW1zLFxuICBFbGVtZW50UmVjdCxcbiAgUmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1BhcmFtcyxcbiAgU29mdEtleWJvYXJkVGFwUG9pbnQsXG4gIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Rcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5LmNqcyc7XG5leHBvcnQge1xuICBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlLFxuICBjaGVja0lzSW5wdXRNZXRob2RTaG93bixcbiAgY2hlY2tJc1NvZnRLZXlib2FyZFVwLFxuICBERUZBVUxUX01JTklNVU1fS0VZQk9BUkRfSEVJR0hUX0lOX1BJWEVMUyxcbiAgcGFyc2VJbnB1dE1ldGhvZFN0YXRlLFxuICByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyxcbiAgVGFwRGV2aWNlUGFyYW1zXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5janMnO1xuZXhwb3J0IHtcbiAgcmFpc2VTb2Z0S2V5Ym9hcmQsXG4gIHRhcERldmljZVxufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQuY2pzJztcbmV4cG9ydCB0eXBlIHsgU3RhbGVCdWlsZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBTdGFsZUJ1aWxkRXJyb3IgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0Q29uc3RydWN0b3JPcHRpb25zXG59IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5leHBvcnQgeyBUZW1wb3JhcnlWYXVsdCB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEFwcGl1bVNlc3Npb25JbmZvLFxuICBBcHBpdW1UcmFuc3BvcnRDb25maWdcbn0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLmNqcyc7XG5leHBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0uY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUFzYXIsXG4gIE93bmVkSW5zdGFuY2VDb25maWcsXG4gIE93bmVkSW5zdGFuY2VFbmRwb2ludFxufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuZXhwb3J0IHsgY2hlY2tJc01vYmlsZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29uc29sZUNhcHR1cmVIYW5kbGUsXG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQSxpQkFJTztBQU9QLHdCQUtPO0FBTVAscUNBQW9DO0FBRXBDLHlDQUEwQztBQUsxQyxnQ0FLTztBQUVQLHVDQUF1QztBQUV2Qyw2Q0FBNkM7QUFDN0MsOEJBR087QUFLUCw0QkFBNkI7QUFLN0Isd0JBQTBCO0FBTTFCLDhCQUlPO0FBT1Asa0NBR087QUFNUCxpQ0FHTztBQUVQLDZCQUFrQztBQUNsQyw0Q0FBMkM7QUFFM0MsK0JBQXdDO0FBTXhDLG9DQUdPO0FBRVAscUNBSU87QUFNUCw2QkFLTztBQU1QLG9DQUE2QztBQUs3QyxnQ0FBdUM7QUFFdkMscUNBR087QUFDUCxzQkFBaUQ7QUFrQmpELDhCQUErQjtBQU0vQiw0QkFHTztBQUtQLHdCQUEwQjtBQUUxQiw2QkFBOEI7QUFFOUIsa0RBQWtEO0FBTWxELHFDQUE4QztBQUU5Qyw0Q0FBNEM7QUFRNUMsOEJBTU87QUFFUCwwQkFBb0M7QUFPcEMsK0JBQW1DO0FBQ25DLDhCQUdPO0FBRVAsd0NBQXdDO0FBRXhDLHlDQUF5QztBQVF6QyxrQ0FNTztBQUVQLDhCQUErQjtBQUMvQixpREFBZ0Q7QUFFaEQsd0NBQXdDO0FBRXhDLGdDQUF5QztBQUV6Qyx3Q0FBd0M7QUFTeEMsb0NBT087QUFLUCwyQkFHTztBQUVQLCtCQUFnQztBQU1oQyw2QkFBK0I7QUFLL0IsOEJBQWdDO0FBT2hDLG1DQUFvQztBQUNwQywrQkFBMkM7QUFNM0MsK0JBQXVDO0FBTXZDLDRCQUdPO0FBRVAsNEJBQStDOyIsCiAgIm5hbWVzIjogW10KfQo=
264
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBDb25maWdSZXN0b3JlLFxuICBHZXRBcHBDb25maWdQYXJhbXMsXG4gIFNldEFwcENvbmZpZ1BhcmFtcyxcbiAgV2l0aEFwcENvbmZpZ1BhcmFtc1xufSBmcm9tICcuL2FwcC1jb25maWcuY2pzJztcbmV4cG9ydCB7XG4gIGdldEFwcENvbmZpZyxcbiAgcmVzdG9yZUFwcENvbmZpZyxcbiAgc2V0QXBwQ29uZmlnLFxuICB3aXRoQXBwQ29uZmlnXG59IGZyb20gJy4vYXBwLWNvbmZpZy5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBseU9ic2lkaWFuVGhlbWVQYXJhbXMsXG4gIEFzc2VydE9ic2lkaWFuVGhlbWVVbmNoYW5nZWRQYXJhbXMsXG4gIE9ic2lkaWFuVGhlbWVcbn0gZnJvbSAnLi9hcHBseS1vYnNpZGlhbi10aGVtZS5janMnO1xuZXhwb3J0IHtcbiAgYXBwbHlPYnNpZGlhblRoZW1lLFxuICBhc3NlcnRPYnNpZGlhblRoZW1lVW5jaGFuZ2VkXG59IGZyb20gJy4vYXBwbHktb2JzaWRpYW4tdGhlbWUuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXNhckZhbGxiYWNrLFxuICBBc2FyRmFsbGJhY2tUaWVyLFxuICBSZXNvbHZlQXNhckZhbGxiYWNrUGFyYW1zXG59IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB7IHJlc29sdmVBc2FyRmFsbGJhY2sgfSBmcm9tICcuL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLmNqcyc7XG5leHBvcnQgdHlwZSB7IENhcHR1cmVPYnNpZGlhblNjcmVlbnNob3RPcHRpb25zIH0gZnJvbSAnLi9jYXB0dXJlLW9ic2lkaWFuLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7IGNhcHR1cmVPYnNpZGlhblNjcmVlbnNob3QgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDYXB0dXJlU2NyZWVuc2hvdFBhcmFtcyxcbiAgUG5nRGltZW5zaW9uc1xufSBmcm9tICcuL2NhcHR1cmUtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VNZXRyaWNzT3ZlcnJpZGUsXG4gIGRlY29kZUJhc2U2NFBuZyxcbiAgaXNQbmcsXG4gIHJlYWRQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7IENkcENvbW1hbmRUaW1lb3V0RXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vY2RwLWNvbW1hbmQtdGltZW91dC1lcnJvci5janMnO1xuZXhwb3J0IHsgQ2RwQ29tbWFuZFRpbWVvdXRFcnJvciB9IGZyb20gJy4vY2RwLWNvbW1hbmQtdGltZW91dC1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUgeyBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnktZmFsbGJhY2stZXJyb3IuY2pzJztcbmV4cG9ydCB7IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3IgfSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnktZmFsbGJhY2stZXJyb3IuY2pzJztcbmV4cG9ydCB7XG4gIGFzc2VydFZhbGlkQ29uZmlnRGlyZWN0b3J5LFxuICBERUZBVUxUX0NPTkZJR19ESVJFQ1RPUllcbn0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENkcENvbm5lY3Rpb24sXG4gIENvbm5lY3RUb0NkcE9wdGlvbnNcbn0gZnJvbSAnLi9jb25uZWN0LXRvLWNkcC5janMnO1xuZXhwb3J0IHsgY29ubmVjdFRvQ2RwIH0gZnJvbSAnLi9jb25uZWN0LXRvLWNkcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDb250ZXh0QXJndW1lbnRzLFxuICBDb250ZXh0T2Zcbn0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5leHBvcnQgeyBDb250ZXh0SWQgfSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgU2V0dXBFcnJvclJlc29sdmVyLFxuICBUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIsXG4gIFZhdWx0UGF0aFJlc29sdmVyXG59IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5janMnO1xuZXhwb3J0IHtcbiAgc2V0U2V0dXBFcnJvclJlc29sdmVyLFxuICBzZXRUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIsXG4gIHNldFZhdWx0UGF0aFJlc29sdmVyXG59IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUGFyYW1zLFxuICBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUmVzdWx0LFxuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNQYXJhbXMsXG4gIEluc3RhbGxlZFBsdWdpbkluZm9cbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5janMnO1xuZXhwb3J0IHtcbiAgYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2lucyxcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jXG59IGZyb20gJy4vZGVtby12YXVsdC1ib290c3RyYXAuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGREZW1vVmF1bHRQb3B1bGF0ZVBhcmFtcyxcbiAgSW5qZWN0UGx1Z2luUGFyYW1zLFxuICBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtc1xufSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUuY2pzJztcbmV4cG9ydCB7XG4gIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUsXG4gIHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkRGVtb1ZhdWx0VHJlZVBhcmFtcyB9IGZyb20gJy4vZGVtby12YXVsdC10cmVlLmNqcyc7XG5leHBvcnQgeyByZWFkRGVtb1ZhdWx0VHJlZSB9IGZyb20gJy4vZGVtby12YXVsdC10cmVlLmNqcyc7XG5leHBvcnQgeyBEZXNrdG9wT25seVBsdWdpblNraXBFcnJvciB9IGZyb20gJy4vZGVza3RvcC1vbmx5LXBsdWdpbi1za2lwLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IENhcHR1cmVEZXZpY2VTY3JlZW5zaG90UGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZURldmljZVNjcmVlbnNob3QgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIERldmljZVNldHRpbmdSZXN0b3JlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZURlbGV0ZSxcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVXcml0ZVxufSBmcm9tICcuL2RldmljZS1zZXR0aW5nLXJlc3RvcmUuY2pzJztcbmV4cG9ydCB7XG4gIERldmljZVNldHRpbmdSZXN0b3JlS2luZCxcbiAgcmVzb2x2ZURldmljZVNldHRpbmdSZXN0b3JlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5janMnO1xuZXhwb3J0IHR5cGUgeyBCdWlsZERldmljZVNldHRpbmdzQ29tbWFuZEFyZ3VtZW50c1BhcmFtcyB9IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcbmV4cG9ydCB7XG4gIGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzLFxuICBEZXZpY2VTZXR0aW5nTmFtZXNwYWNlLFxuICBEZXZpY2VTZXR0aW5nVmVyYlxufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy1jb21tYW5kLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIERldmljZVNldHRpbmdQYXJhbXMsXG4gIFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zLFxuICBXcml0ZURldmljZVNldHRpbmdQYXJhbXNcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MuY2pzJztcbmV4cG9ydCB7XG4gIGRlbGV0ZURldmljZVNldHRpbmcsXG4gIHJlYWREZXZpY2VTZXR0aW5nLFxuICB3aXRoU29mdEtleWJvYXJkRW5hYmxlZCxcbiAgd3JpdGVEZXZpY2VTZXR0aW5nXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEVsZWN0cm9uQ29tcGF0aWJpbGl0eSxcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5VGllcixcbiAgUmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2VsZWN0cm9uLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB7IHJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHkgfSBmcm9tICcuL2VsZWN0cm9uLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRW11bGF0b3JEZXZpY2VDYW5kaWRhdGUsXG4gIFNlbGVjdEVtdWxhdG9yRGV2aWNlSWRQYXJhbXNcbn0gZnJvbSAnLi9lbXVsYXRvci1kZXZpY2UtaWQuY2pzJztcbmV4cG9ydCB7IHNlbGVjdEVtdWxhdG9yRGV2aWNlSWQgfSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5janMnO1xuZXhwb3J0IHR5cGUgeyBFdmFsQ2FwRXhjZWVkZWRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9ldmFsLWNhcC1leGNlZWRlZC1lcnJvci5janMnO1xuZXhwb3J0IHtcbiAgRXZhbENhcEV4Y2VlZGVkRXJyb3IsXG4gIGlzU2NyaXB0VGltZW91dEVycm9yXG59IGZyb20gJy4vZXZhbC1jYXAtZXhjZWVkZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB7IERFRkFVTFRfRVZBTF9DQVBfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi9ldmFsLWNhcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDbGlja0VsZW1lbnRQYXJhbXMsXG4gIENsaWNrTW91c2VQYXJhbXMsXG4gIENvbW1vbkFyZ3VtZW50cyxcbiAgQ3JlYXRlTm90ZVBhcmFtcyxcbiAgRXZhbEluT2JzaWRpYW5QYXJhbXMsXG4gIEdlbmVyaWNPYmplY3QsXG4gIEhvdmVyRWxlbWVudFBhcmFtcyxcbiAgTGliLFxuICBNb3VzZUJ1dHRvbixcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBPcGVuU2V0dGluZ3NUYWJQYXJhbXMsXG4gIFByZXNzS2V5UGFyYW1zLFxuICBUeXBlSW50b0VkaXRvclBhcmFtcyxcbiAgVW5ob3ZlckVsZW1lbnRQYXJhbXMsXG4gIFdhaXRVbnRpbFBhcmFtc1xufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbXB1dGVGaXRUb0NhbnZhc1BhcmFtcyxcbiAgRml0U2NyZWVuc2hvdFRvQ2FudmFzT3B0aW9ucyxcbiAgRml0VG9DYW52YXNHZW9tZXRyeVxufSBmcm9tICcuL2ZpdC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBjb21wdXRlRml0VG9DYW52YXMsXG4gIGZpdFNjcmVlbnNob3RUb0NhbnZhc1xufSBmcm9tICcuL2ZpdC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEhpZGRlbkNhcmV0LFxuICBIaWRlQ2FyZXRPcHRpb25zXG59IGZyb20gJy4vaGlkZS1jYXJldC5janMnO1xuZXhwb3J0IHsgaGlkZUNhcmV0IH0gZnJvbSAnLi9oaWRlLWNhcmV0LmNqcyc7XG5leHBvcnQgdHlwZSB7IEhpZGVWYXVsdE5hbWVPcHRpb25zIH0gZnJvbSAnLi9oaWRlLXZhdWx0LW5hbWUuY2pzJztcbmV4cG9ydCB7IGhpZGVWYXVsdE5hbWUgfSBmcm9tICcuL2hpZGUtdmF1bHQtbmFtZS5janMnO1xuZXhwb3J0IHR5cGUgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLmNqcyc7XG5leHBvcnQgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3IgfSBmcm9tICcuL2luY29tcGF0aWJsZS1pbnN0YWxsZXItdmVyc2lvbi1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5LFxuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5VGllcixcbiAgUmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9pbnN0YWxsZXItY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHkgfSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgdHlwZSB7IEludGVncmF0aW9uU2V0dXBGYWlsZWRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB7IEludGVncmF0aW9uU2V0dXBGYWlsZWRFcnJvciB9IGZyb20gJy4vaW50ZWdyYXRpb24tc2V0dXAtZmFpbGVkLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbXB1dGVMYWJlbEJhbmRQYXJhbXMsXG4gIExhYmVsQmFuZEdlb21ldHJ5LFxuICBMYWJlbENhcHRpb25NZWFzdXJlbWVudCxcbiAgTGFiZWxTY3JlZW5zaG90T3B0aW9ucyxcbiAgTWVhc3VyZUxhYmVsQ2FwdGlvblBhcmFtc1xufSBmcm9tICcuL2xhYmVsLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7XG4gIGJ1aWxkTGFiZWxTdmcsXG4gIGNvbXB1dGVMYWJlbEJhbmQsXG4gIGVzY2FwZVN2Z1RleHQsXG4gIGxhYmVsU2NyZWVuc2hvdCxcbiAgbWVhc3VyZUxhYmVsQ2FwdGlvblxufSBmcm9tICcuL2xhYmVsLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgTGliUmVzb2x2ZXIgfSBmcm9tICcuL2xpYi1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHsgcmVnaXN0ZXJMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuUnVudGltZVZlcnNpb25zLFxuICBPYnNpZGlhblZlcnNpb25DaGFuZ2Vsb2dVcmxzLFxuICBPYnNpZGlhblZlcnNpb25Eb3dubG9hZHMsXG4gIE9ic2lkaWFuVmVyc2lvbk1ldGFkYXRhXG59IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcbmV4cG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcbmV4cG9ydCB7XG4gIENBVEFMWVNUX0xBVEVTVCxcbiAgUFVCTElDX0xBVEVTVFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgT3Blbk9ic2lkaWFuU2V0dGluZ3NUYWJQYXJhbXMgfSBmcm9tICcuL29wZW4tb2JzaWRpYW4tc2V0dGluZ3MtdGFiLmNqcyc7XG5leHBvcnQgeyBvcGVuT2JzaWRpYW5TZXR0aW5nc1RhYiB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIuY2pzJztcbmV4cG9ydCB0eXBlIHsgT3duZWRJbnN0YW5jZUV4aXRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgT3duZWRJbnN0YW5jZUV4aXRlZEVycm9yIH0gZnJvbSAnLi9vd25lZC1pbnN0YW5jZS1leGl0ZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGRTdGF0dXNCYXJCYW5kRmFpbHVyZU1lc3NhZ2VQYXJhbXMsXG4gIFBhaW50T3V0U3RhdHVzQmFyT3B0aW9ucyxcbiAgUmVzb2x2ZVN0YXR1c0JhckJhbmRQYXJhbXMsXG4gIFN0YXR1c0JhckJhbmRDb2xvcixcbiAgU3RhdHVzQmFyQmFuZFZlcmRpY3Rcbn0gZnJvbSAnLi9wYWludC1vdXQtc3RhdHVzLWJhci5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGRTdGF0dXNCYXJCYW5kRmFpbHVyZU1lc3NhZ2UsXG4gIERFRkFVTFRfU1RBVFVTX0JBUl9FREdFX01BUkdJTl9JTl9QSVhFTFMsXG4gIERFRkFVTFRfU1RBVFVTX0JBUl9TQU1QTEVfSU5TRVRfSU5fUElYRUxTLFxuICBwYWludE91dFN0YXR1c0JhcixcbiAgcmVzb2x2ZVN0YXR1c0JhckJhbmRcbn0gZnJvbSAnLi9wYWludC1vdXQtc3RhdHVzLWJhci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBQaW5uZWRXaW5kb3dGb2N1cyxcbiAgUGluV2luZG93Rm9jdXNPcHRpb25zXG59IGZyb20gJy4vcGluLXdpbmRvdy1mb2N1cy5janMnO1xuZXhwb3J0IHsgcGluV2luZG93Rm9jdXMgfSBmcm9tICcuL3Bpbi13aW5kb3ctZm9jdXMuY2pzJztcbmV4cG9ydCB0eXBlIHsgUG9sbEluT2JzaWRpYW5QYXJhbXMgfSBmcm9tICcuL3BvbGwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB7IHBvbGxJbk9ic2lkaWFuIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgeyBSZW5kZXJlckZhaWxlZFRvSW5pdGlhbGl6ZUVycm9yIH0gZnJvbSAnLi9yZW5kZXJlci1mYWlsZWQtdG8taW5pdGlhbGl6ZS1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUgeyBSZXNvbHZlRW11bGF0b3JEZXZpY2VJZFBhcmFtcyB9IGZyb20gJy4vcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWQuY2pzJztcbmV4cG9ydCB7IHJlc29sdmVFbXVsYXRvckRldmljZUlkIH0gZnJvbSAnLi9yZXNvbHZlLWVtdWxhdG9yLWRldmljZS1pZC5janMnO1xuZXhwb3J0IHR5cGUgeyBSdW5PYnNpZGlhblZlcnNpb25NYXRyaXhQYXJhbXMgfSBmcm9tICcuL3J1bi12ZXJzaW9uLW1hdHJpeC5janMnO1xuZXhwb3J0IHsgcnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4IH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB0eXBlIHsgU2lsZW50QXNhckZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IuY2pzJztcbmV4cG9ydCB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yIH0gZnJvbSAnLi9zaWxlbnQtYXNhci1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlUGFyYW1zLFxuICBDaGVja0lzU29mdEtleWJvYXJkVXBQYXJhbXMsXG4gIEVsZW1lbnRSZWN0LFxuICBSZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzUGFyYW1zLFxuICBTb2Z0S2V5Ym9hcmRUYXBQb2ludCxcbiAgU29mdEtleWJvYXJkVmlld3BvcnRTbmFwc2hvdFxufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQtZ2VvbWV0cnkuY2pzJztcbmV4cG9ydCB7XG4gIGJ1aWxkU29mdEtleWJvYXJkRGlhZ25vc3RpY01lc3NhZ2UsXG4gIGNoZWNrSXNJbnB1dE1ldGhvZFNob3duLFxuICBjaGVja0lzU29mdEtleWJvYXJkVXAsXG4gIERFRkFVTFRfTUlOSU1VTV9LRVlCT0FSRF9IRUlHSFRfSU5fUElYRUxTLFxuICBwYXJzZUlucHV0TWV0aG9kU3RhdGUsXG4gIHJlc29sdmVTb2Z0S2V5Ym9hcmRUYXBQb2ludHNcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFJhaXNlU29mdEtleWJvYXJkUGFyYW1zLFxuICBUYXBEZXZpY2VQYXJhbXNcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLmNqcyc7XG5leHBvcnQge1xuICByYWlzZVNvZnRLZXlib2FyZCxcbiAgdGFwRGV2aWNlXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5janMnO1xuZXhwb3J0IHR5cGUgeyBTdGFsZUJ1aWxkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vc3RhbGUtYnVpbGQtZXJyb3IuY2pzJztcbmV4cG9ydCB7IFN0YWxlQnVpbGRFcnJvciB9IGZyb20gJy4vc3RhbGUtYnVpbGQtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgUG9wdWxhdGVGaWxlQ29udGVudCxcbiAgUG9wdWxhdGVGaWxlc1BhcmFtcyxcbiAgVGVtcG9yYXJ5VmF1bHRDb25zdHJ1Y3Rvck9wdGlvbnNcbn0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmV4cG9ydCB7IFRlbXBvcmFyeVZhdWx0IH0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXBwaXVtU2Vzc2lvbkluZm8sXG4gIEFwcGl1bVRyYW5zcG9ydENvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0uY2pzJztcbmV4cG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnLFxuICBPd25lZEluc3RhbmNlQXNhcixcbiAgT3duZWRJbnN0YW5jZUNvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUVuZHBvaW50XG59IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5leHBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAuY2pzJztcbmV4cG9ydCB7IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5leHBvcnQgeyBjaGVja0lzTW9iaWxlVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDb25zb2xlQ2FwdHVyZUhhbmRsZSxcbiAgT2JzaWRpYW5UcmFuc3BvcnQsXG4gIFRyYW5zcG9ydEV2YWxPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LmNqcyc7XG5leHBvcnQge1xuICByZWdpc3RlclZhdWx0LFxuICB1bnJlZ2lzdGVyVmF1bHRcbn0gZnJvbSAnLi92YXVsdC1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHR5cGUgeyBPYnNpZGlhblZlcnNpb25NYXRyaXhFbnRyeSB9IGZyb20gJy4vdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB7IERFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDUyB9IGZyb20gJy4vdmVyc2lvbi1tYXRyaXguY2pzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLGlCQUlPO0FBT1Asd0JBS087QUFNUCxrQ0FHTztBQU1QLHFDQUFvQztBQUVwQyx5Q0FBMEM7QUFLMUMsZ0NBS087QUFFUCx1Q0FBdUM7QUFFdkMsNkNBQTZDO0FBQzdDLDhCQUdPO0FBS1AsNEJBQTZCO0FBSzdCLHdCQUEwQjtBQU0xQiw4QkFJTztBQU9QLGtDQUdPO0FBTVAsaUNBR087QUFFUCw2QkFBa0M7QUFDbEMsNENBQTJDO0FBRTNDLCtCQUF3QztBQU14QyxvQ0FHTztBQUVQLHFDQUlPO0FBTVAsNkJBS087QUFNUCxvQ0FBNkM7QUFLN0MsZ0NBQXVDO0FBRXZDLHFDQUdPO0FBQ1Asc0JBQWlEO0FBa0JqRCw4QkFBK0I7QUFNL0IsNEJBR087QUFLUCx3QkFBMEI7QUFFMUIsNkJBQThCO0FBRTlCLGtEQUFrRDtBQU1sRCxxQ0FBOEM7QUFFOUMsNENBQTRDO0FBUTVDLDhCQU1PO0FBRVAsMEJBQW9DO0FBT3BDLCtCQUFtQztBQUNuQyw4QkFHTztBQUVQLHdDQUF3QztBQUV4Qyx5Q0FBeUM7QUFRekMsa0NBTU87QUFLUCw4QkFBK0I7QUFFL0IsOEJBQStCO0FBQy9CLGlEQUFnRDtBQUVoRCx3Q0FBd0M7QUFFeEMsZ0NBQXlDO0FBRXpDLHdDQUF3QztBQVN4QyxvQ0FPTztBQUtQLDJCQUdPO0FBRVAsK0JBQWdDO0FBTWhDLDZCQUErQjtBQUsvQiw4QkFBZ0M7QUFPaEMsbUNBQW9DO0FBQ3BDLCtCQUEyQztBQU0zQywrQkFBdUM7QUFNdkMsNEJBR087QUFFUCw0QkFBK0M7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -7,6 +7,8 @@ export type { RunAdbParams } from './adb.cjs';
7
7
  export { runAdbBinary, runAdbText, runAdbTextWithoutDevice } from './adb.cjs';
8
8
  export type { AppConfigRestore, GetAppConfigParams, SetAppConfigParams, WithAppConfigParams } from './app-config.cjs';
9
9
  export { getAppConfig, restoreAppConfig, setAppConfig, withAppConfig } from './app-config.cjs';
10
+ export type { ApplyObsidianThemeParams, AssertObsidianThemeUnchangedParams, ObsidianTheme } from './apply-obsidian-theme.cjs';
11
+ export { applyObsidianTheme, assertObsidianThemeUnchanged } from './apply-obsidian-theme.cjs';
10
12
  export type { AsarFallback, AsarFallbackTier, ResolveAsarFallbackParams } from './asar-fallback-detection.cjs';
11
13
  export { resolveAsarFallback } from './asar-fallback-detection.cjs';
12
14
  export type { CaptureObsidianScreenshotOptions } from './capture-obsidian-screenshot.cjs';
@@ -73,6 +75,8 @@ export type { OwnedInstanceExitedErrorConstructorParams } from './owned-instance
73
75
  export { OwnedInstanceExitedError } from './owned-instance-exited-error.cjs';
74
76
  export type { BuildStatusBarBandFailureMessageParams, PaintOutStatusBarOptions, ResolveStatusBarBandParams, StatusBarBandColor, StatusBarBandVerdict } from './paint-out-status-bar.cjs';
75
77
  export { buildStatusBarBandFailureMessage, DEFAULT_STATUS_BAR_EDGE_MARGIN_IN_PIXELS, DEFAULT_STATUS_BAR_SAMPLE_INSET_IN_PIXELS, paintOutStatusBar, resolveStatusBarBand } from './paint-out-status-bar.cjs';
78
+ export type { PinnedWindowFocus, PinWindowFocusOptions } from './pin-window-focus.cjs';
79
+ export { pinWindowFocus } from './pin-window-focus.cjs';
76
80
  export type { PollInObsidianParams } from './poll-in-obsidian.cjs';
77
81
  export { pollInObsidian } from './poll-in-obsidian.cjs';
78
82
  export { RendererFailedToInitializeError } from './renderer-failed-to-initialize-error.cjs';
@@ -21,7 +21,7 @@ __export(library_exports, {
21
21
  LIBRARY_VERSION: () => LIBRARY_VERSION
22
22
  });
23
23
  module.exports = __toCommonJS(library_exports);
24
- const LIBRARY_VERSION = false ? "dev" : "17.2.0";
24
+ const LIBRARY_VERSION = false ? "dev" : "17.3.0";
25
25
  // Annotate the CommonJS export names for ESM import in node:
26
26
  0 && (module.exports = {
27
27
  LIBRARY_VERSION