obsidian-integration-testing 9.1.1 → 9.2.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.
- package/README.md +106 -13
- package/dist/lib/cjs/connect-to-cdp.cjs +23 -2
- package/dist/lib/cjs/global-setup-core.cjs +28 -1
- package/dist/lib/cjs/index.cjs +12 -1
- package/dist/lib/cjs/index.d.cts +5 -0
- package/dist/lib/cjs/leftover-cleanup.cjs +116 -0
- package/dist/lib/cjs/leftover-cleanup.d.cts +163 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/obsidian-metadata.cjs +15 -1
- package/dist/lib/cjs/run-version-matrix.cjs +64 -0
- package/dist/lib/cjs/run-version-matrix.d.cts +49 -0
- package/dist/lib/cjs/setup-lock.cjs +145 -32
- package/dist/lib/cjs/setup-lock.d.cts +9 -3
- package/dist/lib/cjs/temp-vault.cjs +3 -2
- package/dist/lib/cjs/transport-appium.cjs +86 -30
- package/dist/lib/cjs/transport-appium.d.cts +43 -3
- package/dist/lib/cjs/transport-factory.cjs +52 -4
- package/dist/lib/cjs/transport-options.cjs +1 -1
- package/dist/lib/cjs/transport-options.d.cts +57 -0
- package/dist/lib/cjs/version-matrix.cjs +175 -0
- package/dist/lib/cjs/version-matrix.d.cts +224 -0
- package/dist/lib/esm/connect-to-cdp.mjs +27 -2
- package/dist/lib/esm/global-setup-core.mjs +36 -2
- package/dist/lib/esm/index.d.mts +5 -0
- package/dist/lib/esm/index.mjs +11 -1
- package/dist/lib/esm/leftover-cleanup.d.mts +163 -0
- package/dist/lib/esm/leftover-cleanup.mjs +88 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/obsidian-metadata.mjs +15 -1
- package/dist/lib/esm/run-version-matrix.d.mts +49 -0
- package/dist/lib/esm/run-version-matrix.mjs +48 -0
- package/dist/lib/esm/setup-lock.d.mts +9 -3
- package/dist/lib/esm/setup-lock.mjs +145 -32
- package/dist/lib/esm/temp-vault.mjs +3 -2
- package/dist/lib/esm/transport-appium.d.mts +43 -3
- package/dist/lib/esm/transport-appium.mjs +84 -29
- package/dist/lib/esm/transport-factory.mjs +62 -5
- package/dist/lib/esm/transport-options.d.mts +57 -0
- package/dist/lib/esm/version-matrix.d.mts +224 -0
- package/dist/lib/esm/version-matrix.mjs +147 -0
- package/dist/obsidian-integration-testing-9.2.0.tgz +0 -0
- package/package.json +18 -25
- package/dist/obsidian-integration-testing-9.1.1.tgz +0 -0
|
@@ -14,4 +14,4 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
14
14
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
15
|
var transport_options_exports = {};
|
|
16
16
|
module.exports = __toCommonJS(transport_options_exports);
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiB0eXBlcyBmb3IgY29uZmlndXJpbmcgdGhlIE9ic2lkaWFuIHRyYW5zcG9ydFxuICogdmlhIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zYC5cbiAqL1xuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBBbmRyb2lkIHRlc3RpbmcgdmlhIEFwcGl1bSBXZWJWaWV3IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFwcCBwYWNrYWdlIChBbmRyb2lkKSBvciBidW5kbGUgSUQgKGlPUykuXG4gICAqIERlZmF1bHRzIHRvIGAnbWQub2JzaWRpYW4nYFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgYXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgdG8gYmVjb21lIHJlYWR5XG4gICAqIChpdHMgYC9zdGF0dXNgIGVuZHBvaW50IHRvIHJlc3BvbmQpLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgaGFybmVzcyBhdXRvLXN0YXJ0cyB0aGUgQXBwaXVtIHNlcnZlclxuICAgKiAoe0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0pOyBpZ25vcmVkIHdoZW4gYXR0YWNoaW5nIHRvIGFuXG4gICAqIGFscmVhZHktcnVubmluZyBzZXJ2ZXIuIE9uIGEgY29sZCBtYWNoaW5lIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIGNhbiB0YWtlXG4gICAqIGEgd2hpbGUgdG8gZmluaXNoIGJvb3RpbmcsIHNvIHJhaXNlIHRoaXMgaWYgc3RhcnR1cCB0aW1lcyBvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBhcHBpdW1TdGFydFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMIChlLmcuIGAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJ2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwaXVtVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbmRyb2lkIEFWRCAoQW5kcm9pZCBWaXJ0dWFsIERldmljZSkgbmFtZS5cbiAgICpcbiAgICogVGhlIHRyYW5zcG9ydCBmYWN0b3J5IGxhdW5jaGVzIGBlbXVsYXRvciAtYXZkIDxhdmROYW1lPmAgYXMgYSBiYWNrZ3JvdW5kXG4gICAqIHByb2Nlc3MgYW5kIHBvbGxzIHVudGlsIHRoZSBkZXZpY2UgYXBwZWFycy4gVGhlIGVtdWxhdG9yIGlzIGtpbGxlZFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIFJ1biBgZW11bGF0b3IgLWxpc3QtYXZkc2AgdG8gc2VlIGF2YWlsYWJsZSBBVkQgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgVURJRCB0byByZXVzZSAoZS5nLiBgJ2VtdWxhdG9yLTU1NTQnYCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYWZ0ZXIgdGhlIEFwcGl1bSBzZXNzaW9uIGlzXG4gICAqIGVzdGFibGlzaGVkLiBXaGVuIHByZXNlbnQgYWxvbmdzaWRlIHtAbGluayBzZXNzaW9uSWR9LCB0aGUgdHJhbnNwb3J0XG4gICAqIGZhY3Rvcnkgc2tpcHMgZW11bGF0b3Igc3RhcnR1cCBhbmQgYXR0YWNoZXMgdG8gdGhlIGV4aXN0aW5nIHNlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcsIGFmdGVyIGBzeXMuYm9vdF9jb21wbGV0ZWRgLCBmb3IgYVxuICAgKiBoYXJuZXNzLXN0YXJ0ZWQgZW11bGF0b3IgdG8gYmVjb21lIGlkbGUgYmVmb3JlIHRoZSBBcHBpdW0gc2Vzc2lvbiBpc1xuICAgKiBlc3RhYmxpc2hlZC5cbiAgICpcbiAgICogYHN5cy5ib290X2NvbXBsZXRlZGAgZmlyZXMgKmJlZm9yZSogdGhlIGd1ZXN0IGlzIGFjdHVhbGx5IGlkbGU6IHBhY2thZ2VcbiAgICogb3B0aW1pemF0aW9uIGFuZCBzeXN0ZW0gc2VydmljZXMga2VlcCBjaHVybmluZywgc28gZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uXG4gICAqIGltbWVkaWF0ZWx5IG1ha2VzIGV2ZXJ5IG9uZSBvZiBVaUF1dG9tYXRvcjIncyBzZXJpYWxpemVkIGBhZGJgIHJvdW5kLXRyaXBzXG4gICAqIGNvbnRlbmQgd2l0aCB0aGF0IHdvcmsgYW5kIGluZmxhdGVzIHNlc3Npb24gZXN0YWJsaXNobWVudCB+M3guIFRoZSBmYWN0b3J5XG4gICAqIGluc3RlYWQgd2FpdHMgdW50aWwgdGhlIGJvb3QgYW5pbWF0aW9uIGhhcyBzdG9wcGVkIGFuZCB0aGUgcGFja2FnZSBtYW5hZ2VyXG4gICAqIGlzIHNlcnZpbmcsIHByb2NlZWRpbmcgZWFybHkgb25jZSBpZGxlIG9yIGFmdGVyIHRoaXMgYnVkZ2V0IChiZXN0LWVmZm9ydCBcdTIwMTQgYVxuICAgKiB0aW1lb3V0IGxvZ3MgYSB3YXJuaW5nIGFuZCBwcm9jZWVkcykuIFNldCBgMGAgdG8gc2tpcCB0aGUgd2FpdC4gT25seSBhcHBsaWVzXG4gICAqIHRvIGEgaGFybmVzcy1zdGFydGVkIGVtdWxhdG9yLCBub3QgYSByZXVzZWQgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZGxlVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBjb25zb2xlIHdpbmRvdyBpcyBzaG93bi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgICh0aGUgZGVmYXVsdCksIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIHByb2Nlc3MgaXMgc3Bhd25lZCB3aXRoXG4gICAqIGl0cyBjb25zb2xlIHdpbmRvdyBoaWRkZW4gKGB3aW5kb3dzSGlkZWApIGFuZCBpdHMgb3V0cHV0IGRpc2NhcmRlZCwgc28gaXRcbiAgICogbmVpdGhlciBzdGVhbHMgZm9jdXMgbm9yIHdyaXRlcyB0byB0aGUgaW52b2tpbmcgdGVybWluYWwuIElnbm9yZWQgd2hlblxuICAgKiBhdHRhY2hpbmcgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIEFwcGl1bSBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19XG4gICAqIGBmYWxzZWAsIG9yIHRoZSBzZXJ2ZXIgYWxyZWFkeSByZWFjaGFibGUpLiBTZXQgYHRydWVgIHRvIHNlZSB0aGUgc2VydmVyIGxvZyB3aW5kb3dcbiAgICogYW5kIGl0cyBsaXZlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNBcHBpdW1Db25zb2xlVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGF1dG8tc3RhcnRlZCBBbmRyb2lkIGVtdWxhdG9yIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCAodGhlIGRlZmF1bHQpLCB0aGUgZW11bGF0b3IgaXMgc3RhcnRlZCB3aXRoIGAtbm8td2luZG93YFxuICAgKiAoaGVhZGxlc3MpLCBzbyBpdCBuZXZlciBzdGVhbHMgZm9jdXMuIElnbm9yZWQgd2hlbiByZXVzaW5nIGFuIGFscmVhZHktcnVubmluZ1xuICAgKiBkZXZpY2UgKG5vdGhpbmcgaXMgbGF1bmNoZWQgdG8gaGlkZSkuIFNldCBgdHJ1ZWAgdG8gd2F0Y2ggdGhlIGVtdWxhdG9yIFVJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0VtdWxhdG9yVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWAgYWZ0ZXJcbiAgICogdGhlIHZhdWx0IGlzIChyZSlvcGVuZWQuXG4gICAqXG4gICAqIFJlZ2lzdGVyaW5nIGEgdmF1bHQgdHJpZ2dlcnMgYSBmdWxsIE9ic2lkaWFuIHJlLWluaXQgKGBsb2NhdGlvbi5yZWxvYWQoKWBcbiAgICogcmVvcGVucyB0aGUgdmF1bHQgYW5kIHJlbG9hZHMgZXZlcnkgcGx1Z2luIFx1MjAxNCB0aGUgaGVhdmllc3Qgc3RhcnR1cCBzdGVwKS4gT25cbiAgICogYSBjb2xkLWJvb3RlZCBvciB1bmRlci1wcm92aXNpb25lZCBlbXVsYXRvciB0aGF0IGluaXQgY2FuIHRha2UgYSB3aGlsZSwgc29cbiAgICogdGhpcyBidWRnZXQgaXMgdGhlIGxhcmdlc3Qgb2YgdGhlIHRyYW5zcG9ydCB0aW1lb3V0cy4gUmFpc2UgaXQgZnVydGhlciBpZlxuICAgKiByZWxlYXNlcyBzdGlsbCBmbGFrZSBvbiBzbG93IENJIGVtdWxhdG9ycy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDkwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGF5b3V0UmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBleHRyYSBhdHRlbXB0cyB0byBlbmFibGUgdGhlIHBsdWdpbiBhbmQgdmVyaWZ5IGl0IGxvYWRlZCwgb24gdG9wXG4gICAqIG9mIHRoZSBmaXJzdCBhdHRlbXB0LlxuICAgKlxuICAgKiBPbiBhIGZyZXNobHkgY29sZC1ib290ZWQgZW11bGF0b3IgdGhlIHBsdWdpbiBzdWJzeXN0ZW0gY2FuIHN0aWxsIGJlIHNldHRsaW5nXG4gICAqIHdoZW4gdGhlIGhhcm5lc3MgZW5hYmxlcyB0aGUgcGx1Z2luLCBzbyB0aGUgZW5hYmxlIGxhbmRzIGluIHRoZSBlbmFibGVkIHNldFxuICAgKiBidXQgdGhlIGxvYWQgcmFjZXMgYW5kIGZhaWxzIChgXCI8aWQ+XCIgaXMgaW4gdGhlIGVuYWJsZWQgc2V0IGJ1dCBub3QgbG9hZGVkYCkuXG4gICAqIERldmljZS1pZGxlIGFuZCBgbGF5b3V0UmVhZHlgIGFyZSBhbHJlYWR5IGF3YWl0ZWQsIHNvIHRoaXMgaXMgdGhlIG5hcnJvd1xuICAgKiByZXNpZHVhbCByYWNlOiB0aGUgaGFybmVzcyByZXRyaWVzIHRoZSBlbmFibGUgKyBsb2FkLXZlcmlmaWNhdGlvbiB0aGlzIG1hbnlcbiAgICogdGltZXMgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIChzZWVcbiAgICoge0BsaW5rIHBsdWdpbkVuYWJsZVJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kc30pLCBmb3JjaW5nIGEgZ2VudWluZSByZWxvYWQgZWFjaFxuICAgKiBhdHRlbXB0LiBBIGNhcHR1cmVkIHBsdWdpbiBsb2FkIGVycm9yIGlzIHRyZWF0ZWQgYXMgYSBkZXRlcm1pbmlzdGljIGJ1ZyBhbmRcbiAgICogaXMgKipub3QqKiByZXRyaWVkLiBTZXQgYDBgIHRvIGRpc2FibGUgcmV0cnkgKGEgc2luZ2xlIGF0dGVtcHQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgM2BcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkVuYWJsZVJldHJ5Q291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEJhc2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gcGx1Z2luLWVuYWJsZSBhdHRlbXB0cyAoc2VlXG4gICAqIHtAbGluayBwbHVnaW5FbmFibGVSZXRyeUNvdW50fSkuXG4gICAqXG4gICAqIFRoZSBkZWxheSBncm93cyBleHBvbmVudGlhbGx5IHBlciByZXRyeTogdGhlIGZpcnN0IHJldHJ5IHdhaXRzIHRoaXMgbG9uZyxcbiAgICogdGhlIHNlY29uZCB0d2ljZSBhcyBsb25nLCB0aGUgdGhpcmQgZm91ciB0aW1lcywgYW5kIHNvIG9uIFx1MjAxNCBnaXZpbmcgYVxuICAgKiBzdGlsbC1zZXR0bGluZyBjb2xkIGd1ZXN0IHByb2dyZXNzaXZlbHkgbW9yZSB0aW1lIHRvIGJlY29tZSByZWFkeS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDIwMDBgXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5FbmFibGVSZXRyeURlbGF5SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBlc3RhYmxpc2hpbmcgdGhlIEFwcGl1bSBzZXNzaW9uIChXZWJEcml2ZXJJT1xuICAgKiBgcmVtb3RlKClgIFx1MjAxNCBVaUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGwgKyBhcHAgbGF1bmNoKS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbGFyZ2VzdCBhbmQgbW9zdCBsb2FkLXNlbnNpdGl2ZSBzdGVwIG9mIHRoZSBBbmRyb2lkIHNldHVwOlxuICAgKiBvbiBhIGNvbGQgb3IgY29udGVuZGVkIGVtdWxhdG9yIGl0IGRvbWluYXRlcyBzdGFydHVwIGFuZCBjYW4gdGFrZSBhIGZld1xuICAgKiBtaW51dGVzLiBSYWlzZSBpdCBpZiBzZXNzaW9uIGVzdGFibGlzaG1lbnQgdGltZXMgb3V0IHVuZGVyIGxvYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29ubmVjdGlvblJldHJ5VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiBleGlzdGluZyBBcHBpdW0gc2Vzc2lvbiBJRCB0byByZWF0dGFjaCB0by5cbiAgICpcbiAgICogUG9wdWxhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGdsb2JhbCBzZXR1cCBhbmQgcHJvdmlkZWQgdG8gdGVzdCB3b3JrZXJzXG4gICAqIHZpYSB0aGUgZnJhbWV3b3JrJ3MgY29udGV4dCBtZWNoYW5pc20gKGUuZy4gVml0ZXN0IGBwcm92aWRlYC9gaW5qZWN0YCkuXG4gICAqIFdoZW4gcHJlc2VudCwgdGhlIHRyYW5zcG9ydCBmYWN0b3J5IHVzZXMgV2ViRHJpdmVySU8ncyBgYXR0YWNoKClgIGluc3RlYWRcbiAgICogb2YgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbiwgYXZvaWRpbmcgZHVwbGljYXRlIEFwcGl1bS9BREIgY29ubmVjdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIG1pc3NpbmcgQXBwaXVtIGRlcGVuZGVuY2llcyAodGhlXG4gICAqIGB1aWF1dG9tYXRvcjJgIGRyaXZlciwgYW5kIEFwcGl1bSBpdHNlbGYpIGJlZm9yZSBhdXRvLXN0YXJ0aW5nIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCkgYW5kIHRoZSBoYXJuZXNzIGlzIGFib3V0IHRvIGF1dG8tc3RhcnQgdGhlIEFwcGl1bVxuICAgKiBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19KSwgdGhlIGZhY3RvcnkgZmlyc3QgZW5zdXJlcyBBcHBpdW0gaXNcbiAgICogaW5zdGFsbGVkIChnbG9iYWxseSwgdmlhIGBucG0gaW5zdGFsbCAtZyBhcHBpdW1gKSBhbmQgdGhhdCB0aGVcbiAgICogYHVpYXV0b21hdG9yMmAgZHJpdmVyIGlzIGluc3RhbGxlZCAoYGFwcGl1bSBkcml2ZXIgaW5zdGFsbCB1aWF1dG9tYXRvcjJgKSxcbiAgICogaW5zdGFsbGluZyB3aGljaGV2ZXIgaXMgbWlzc2luZy4gSWdub3JlZCB3aGVuIGF0dGFjaGluZyB0byBhblxuICAgKiBhbHJlYWR5LXJ1bm5pbmcgc2VydmVyIChub3RoaW5nIGlzIGF1dG8tc3RhcnRlZCwgc28gbm90aGluZyBpcyBpbnN0YWxsZWQpIG9yXG4gICAqIHdoZW4ge0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0gaXMgYGZhbHNlYC4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gbWFuYWdlXG4gICAqIHRoZSBBcHBpdW0gdG9vbGNoYWluIHlvdXJzZWxmIGFuZCBza2lwIHRoZSBtYWNoaW5lLW11dGF0aW5nIGdsb2JhbCBpbnN0YWxsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEF1dG9JbnN0YWxsQXBwaXVtRGVwZW5kZW5jaWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZSBBcHBpdW0gc2VydmVyIGlmIGl0IGlzIG5vdCByZWFjaGFibGUuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSB0cmFuc3BvcnQgZmFjdG9yeSBzcGF3bnMgYG5weCBhcHBpdW1gXG4gICAqIGFzIGEgYmFja2dyb3VuZCBwcm9jZXNzIHdoZW4gdGhlIHByZWZsaWdodCBjaGVjayBmYWlscywgYW5kIGtpbGxzIGl0XG4gICAqIG9uIHRyYW5zcG9ydCBkaXNwb3NhbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBdXRvU3RhcnRBcHBpdW0/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNjcmltaW5hbnQgZm9yIHRoZSB0cmFuc3BvcnQgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bSc7XG5cbiAgLyoqXG4gICAqIEJhc2UgcGF0aCBvbiB0aGUgZGV2aWNlIHdoZXJlIE9ic2lkaWFuIHN0b3JlcyB2YXVsdHMuXG4gICAqXG4gICAqIERlZmF1bHRzOlxuICAgKiAtIEFuZHJvaWQ6IGAvc2RjYXJkL0RvY3VtZW50cy9gXG4gICAqIC0gaU9TOiBgQG1kLm9ic2lkaWFuOmRvY3VtZW50cy9gXG4gICAqL1xuICByZWFkb25seSB2YXVsdEJhc2VQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3Igd2FpdGluZyBmb3IgdGhlIFdlYlZpZXcgY29udGV4dCB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBPbiBzbG93IGVtdWxhdG9ycywgdGhlIENocm9tZURyaXZlciBwcm94eSB0aGF0IGhhbmRsZXMgV2ViVmlldyBjb21tYW5kc1xuICAgKiBtYXkgbm90IGJlIHJlYWR5IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBBcHBpdW0gc2Vzc2lvbiBzdGFydHMuIFRoaXMgdGltZW91dFxuICAgKiBjb250cm9scyBob3cgbG9uZyB0byBwb2xsIGJlZm9yZSBnaXZpbmcgdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA2MDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHdlYnZpZXdUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVHJhbnNwb3J0IG9wdGlvbnMgZm9yIGRlc2t0b3AgdGVzdGluZyB2aWEgQ2hyb21lIERldlRvb2xzIFByb3RvY29sLlxuICpcbiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgZGVza3RvcCB0cmFuc3BvcnQuIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgKipsYXVuY2hlcyBhbmRcbiAqIG93bnMgYW4gaXNvbGF0ZWQgT2JzaWRpYW4gaW5zdGFuY2UqKiBpbiBhIHRlbXBvcmFyeSB1c2VyLWRhdGEgZGlyIChuZXZlclxuICogdG91Y2hpbmcgdGhlIHVzZXIncyBPYnNpZGlhbiksIGNvbm5lY3RlZCBvdmVyIGEgZnJlZSBDRFAgcG9ydC4gUHJvdmlkZVxuICoge0BsaW5rIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucy5wb3J0fSB0byBpbnN0ZWFkIGF0dGFjaCB0byBhblxuICogYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgaW5kaXZpZHVhbCBDRFAgY29tbWFuZHMuXG4gICAqIERlZmF1bHRzIHRvIDMwMDAwXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHcmFjZSB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGZvciBmYXN0LWZhaWxpbmcgYSAqKmRlYWQgYm9vdCoqIG9mIHRoZSBvd25lZFxuICAgKiBpbnN0YW5jZS5cbiAgICpcbiAgICogV2hlbiBhbiBhc2FyIGNhbm5vdCBydW4gb24gdGhlIGxhdW5jaGVkIEVsZWN0cm9uIHNoZWxsICh0aGUgaW5zdGFsbGVyXG4gICAqIHZlcnNpb24gaXMgdG9vIG9sZCBmb3IgdGhlIGFwcCB2ZXJzaW9uKSwgdGhlIHJlbmRlcmVyIGxvYWRzIGJ1dCBuZXZlclxuICAgKiBib290c3RyYXBzOiBgZG9jdW1lbnQuYm9keWAgc3RheXMgZW1wdHkgYW5kIGB3aW5kb3cuYXBwYCByZW1haW5zXG4gICAqIGB1bmRlZmluZWRgIFx1MjAxNCBhIGJsYWNrIHNjcmVlbi4gUmF0aGVyIHRoYW4gd2FpdGluZyBvdXQgdGhlIGZ1bGwgcmVhZGluZXNzXG4gICAqIHRpbWVvdXQsIHRoZSBvd25lZC12YXVsdCByZWFkaW5lc3MgcG9sbCBjb25jbHVkZXMgdGhlIGJvb3QgaXMgZGVhZCBvbmNlIHRoZVxuICAgKiByZW5kZXJlciBoYXMgYmVlbiBgZG9jdW1lbnQucmVhZHlTdGF0ZWAgYCdjb21wbGV0ZSdgIGZvciB0aGlzIGxvbmcgd2l0aCBub1xuICAgKiBgd2luZG93LmFwcGAgYW5kIGFuIGVtcHR5IGA8Ym9keT5gLCBhbmQgdGhyb3dzIGFcbiAgICogYFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3JgLiBPbmx5IGFwcGxpZXMgdG8gYW4gb3duZWQgaW5zdGFuY2VcbiAgICogKGlnbm9yZWQgaW4gYXR0YWNoIG1vZGUsIHtAbGluayBwb3J0fSBzZXQpLiBTZXQgYDBgIHRvIGRpc2FibGUgZmFzdC1mYWlsIGFuZFxuICAgKiByZXN0b3JlIHRoZSBwbGFpbiB3YWl0LW91dC10aGUtcmVhZGluZXNzLXRpbWVvdXQgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0RQIGhvc3QuXG4gICAqIERlZmF1bHRzIHRvIGAnbG9jYWxob3N0J2BcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcmtzIHtAbGluayBwb3J0fSBhcyB0aGUgQ0RQIHBvcnQgb2YgYSAqKmhhcm5lc3Mtb3duZWQsIGlzb2xhdGVkIGluc3RhbmNlKipcbiAgICogdGhhdCB0aGUgZ2xvYmFsIHNldHVwIGFscmVhZHkgbGF1bmNoZWQgYW5kIHByZXBhcmVkICh2YXVsdCByZWdpc3RlcmVkLFxuICAgKiBwbHVnaW4gZW5hYmxlZCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYW5kIHByb3ZpZGVkIHRvIHRlc3Qgd29ya2VycyB2aWFcbiAgICogdGhlIGZyYW1ld29yaydzIGNvbnRleHQgbWVjaGFuaXNtIChlLmcuIFZpdGVzdCBgcHJvdmlkZWAvYGluamVjdGApLiBXaGVuIHNldCxcbiAgICogdGhlIHdvcmtlciAqKmF0dGFjaGVzKiogdG8gdGhlIG93bmVkIGluc3RhbmNlIG9uIHtAbGluayBwb3J0fSBpbnN0ZWFkIG9mXG4gICAqIGxhdW5jaGluZyBpdHMgb3duLCBhbmQgc2tpcHMgdGhlIHVzZXItc2NvcGUgdmF1bHQtcmVnaXN0cmF0aW9uIHByZWZsaWdodCBcdTIwMTRcbiAgICogdGhlIG93bmVkIGluc3RhbmNlJ3MgdmF1bHQgbGl2ZXMgaW4gYW4gaXNvbGF0ZWQgdXNlci1kYXRhIGNvbmZpZywgbm90IHRoZVxuICAgKiB1c2VyLXNjb3BlIHJlZ2lzdHJ5LiBEbyBub3Qgc2V0IHRoaXMgbWFudWFsbHk7IGZvciBwbGFpbiBhdHRhY2ggbW9kZSB1c2VcbiAgICoge0BsaW5rIHBvcnR9IGFsb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNIYXJuZXNzT3duZWRJbnN0YW5jZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkIGRlc2t0b3AgT2JzaWRpYW4gd2luZG93IGlzIHNob3duIG9uIHNjcmVlbi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgLCB0aGUgaGFybmVzcyBsYXVuY2hlcyB0aGUgb3duZWQgaW5zdGFuY2Ugd2l0aFxuICAgKiBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIGFuZCBtb3ZlcyBpdHMgd2luZG93ICoqb2ZmLXNjcmVlbioqIG9uY2UgRWxlY3Ryb24nc1xuICAgKiByZW1vdGUgYnJpZGdlIGlzIGF2YWlsYWJsZSwgc28gdGhlIHJ1biBuZXZlciBzdGVhbHMgZm9jdXMgb3IgcG9wcyBhIHdpbmRvdyBpblxuICAgKiBmcm9udCBvZiB5b3UuIE9mZi1zY3JlZW4gKG5vdCBtaW5pbWl6ZWQpIGtlZXBzIHRoZSByZW5kZXJlciBsaXZlLCBzb1xuICAgKiBgc2V0VGltZW91dGAsIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLCBgOmhvdmVyYCwgYW5kIHRydXN0ZWQgaW5wdXQgYmVoYXZlXG4gICAqIGlkZW50aWNhbGx5IHRvIGEgdmlzaWJsZSB3aW5kb3cuIERlZmF1bHRzIHRvIGB0cnVlYDsgaW50ZWdyYXRpb24gc2V0dXBcbiAgICogZXhwbGljaXRseSBwYXNzZXMgYGZhbHNlYCB0byBhdm9pZCBzdGVhbGluZyBmb2N1cy4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZVxuICAgKiAoe0BsaW5rIHBvcnR9IHNldCkgXHUyMDE0IHRoZSBoYXJuZXNzIG5ldmVyXG4gICAqIG1vdmVzIHRoZSB1c2VyJ3Mgb3duIHJ1bm5pbmcgd2luZG93LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzT2JzaWRpYW5BcHBWaXNpYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipFbGVjdHJvbiBzaGVsbCoqIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLlxuICAgKlxuICAgKiBBY2NlcHRzIGFuIGV4cGxpY2l0IGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuXG4gICAqIFRoZSBtYXRjaGluZyBHaXRIdWIgcmVsZWFzZSBpbnN0YWxsZXIgaXMgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkIHRvIGFcbiAgICogcG9ydGFibGUgc2hlbGwgKGNhY2hlZCBmb3IgcmV1c2UpLiBQdWJsaWMgcmVsZWFzZXMgb25seSBcdTIwMTQgY2F0YWx5c3QgYnVpbGRzXG4gICAqIGhhdmUgbm8gcHVibGljIGluc3RhbGxlci4gSWdub3JlZCB3aGVuIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipPYnNpZGlhbiBhcHAgdmVyc2lvbioqIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy5cbiAgICpcbiAgICogQWNjZXB0cyBhbiBleHBsaWNpdCBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLlxuICAgKiBWZXJzaW9ucyBhdCBvciBhYm92ZSB0aGUgc2hlbGwgdmVyc2lvbiBhcmUgYXBwbGllZCBhcyBhIGNoZWFwIGFzYXIgc3dhcDtcbiAgICogb2xkZXIgdmVyc2lvbnMgdHJhbnNwYXJlbnRseSB1c2UgdGhlIG1hdGNoaW5nIGluc3RhbGxlciBzaGVsbC4gV2hlbiBvbWl0dGVkLFxuICAgKiB0aGUgdXNlcidzIGN1cnJlbnRseS1pbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLiBJZ25vcmVkIHdoZW4ge0BsaW5rIHBvcnR9XG4gICAqIChhdHRhY2ggbW9kZSkgaXMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0byAodGhlXG4gICAqIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgaXQgd2FzIGxhdW5jaGVkIHdpdGgpLiBXaGVuIHNldCwgdGhlIGhhcm5lc3NcbiAgICogYXR0YWNoZXMgaW5zdGVhZCBvZiBvd25pbmcgYW4gaW5zdGFuY2UsIGFuZCB0aGUgdmVyc2lvbiBrbm9icyBhcmUgaWdub3JlZC5cbiAgICogV2hlbiBvbWl0dGVkLCBhbiBvd25lZCBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5XG4gICAqIGNob3NlbiBmcmVlIHBvcnQgKG5vIHBvcnQgaXMgaGFyZGNvZGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbGF1bmNoIHRoZSBvd25lZCBpbnN0YW5jZSB3aXRoIENocm9taXVtJ3Mgc2FuZGJveCBkaXNhYmxlZFxuICAgKiAoYC0tbm8tc2FuZGJveGApLlxuICAgKlxuICAgKiBOZWVkZWQgdG8gYm9vdCBhbiBvd25lZCBpbnN0YW5jZSBvbiBMaW51eCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZCBgY2hyb21lLXNhbmRib3hgIGhlbHBlciBcdTIwMTQgZS5nLiBhIHBvcnRhYmxlIHNoZWxsXG4gICAqIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbGxlciwgb3IgYSBDSSBydW5uZXIgbGF1bmNoaW5nIGFzIGEgbm9uLXJvb3QgdXNlciwgaW5cbiAgICogd2hpY2ggY2FzZSB0aGUgcmVuZGVyZXIgb3RoZXJ3aXNlIHJlZnVzZXMgdG8gc3RhcnQuIEhhcm1sZXNzIG9uXG4gICAqIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiByZWxhdW5jaGVzIHRoZSB1c2VyJ3MgcnVubmluZyBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFuICoqdW5ydW5uYWJsZSoqIGluc3RhbGxlclx1MjE5NGFwcCB2ZXJzaW9uIHBhaXIgZmFpbHMgZmFzdCBiZWZvcmUgbGF1bmNoLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBhbiBpbnN0YWxsZXIgYmVsb3cgdGhlIGFwcCdzIHJ1biBmbG9vciAodGhlXG4gICAqIG9sZGVzdCBpbnN0YWxsZXIgdGhlIGFwcCdzIGFzYXIgY2FuIGJvb3Qgb24pIHRocm93c1xuICAgKiBgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yYCBmcm9tIHZlcnNpb24gcmVzb2x1dGlvbiwgYmVmb3JlIGFueXRoaW5nXG4gICAqIGlzIGRvd25sb2FkZWQgb3IgbGF1bmNoZWQuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgcGluIHByb2NlZWQgdG8gbGF1bmNoXG4gICAqIGluc3RlYWQgXHUyMDE0IHdoZXJlIHRoZSByZWFjdGl2ZSBkZWFkLWJvb3QgZmFzdC1mYWlsXG4gICAqIChgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvcmAsIHNlZSB7QGxpbmsgZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzfSlcbiAgICogc3RpbGwgY2F0Y2hlcyB0aGUgYmxhY2stc2NyZWVuIGJvb3QsIGFuZCB0aGUgYCd1bnJ1bm5hYmxlJ2AgdmVyZGljdCBpc1xuICAgKiBzdXJmYWNlZCBhcyBkYXRhIHJhdGhlciB0aGFuIHRocm93bi4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlXG4gICAqIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhICoqc2lsZW50IGFzYXIgZmFsbGJhY2sqKiBmYWlscyBmYXN0IGFmdGVyIGJvb3QuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBpcyBzd2FwcGVkIG9udG8gYW4gaW5zdGFsbGVyIHNoZWxsIHRvbyBvbGQgZm9yIGl0LCB0aGUgaW5zdGFuY2VcbiAgICogbWF5IG5vdCBkZWFkLWJvb3QgXHUyMDE0IGl0IGNhbiBzaWxlbnRseSByZXZlcnQgdG8gdGhlIGluc3RhbGxlcidzIG93biBidW5kbGVkXG4gICAqIGFzYXIgYW5kIHJ1biB0aGUgKip3cm9uZyAob2xkZXIpKiogdmVyc2lvbiBiZWhpbmQgYSBoZWFsdGh5IFVJLiBXaGVuIGB0cnVlYFxuICAgKiAodGhlIGRlZmF1bHQpLCB0aGUgdHJhbnNwb3J0IHZlcmlmaWVzIHRoZSBydW5uaW5nIGFwcCB2ZXJzaW9uIGFnYWluc3QgdGhlIHBpblxuICAgKiBwb3N0LWJvb3QgYW5kIHRocm93cyBgU2lsZW50QXNhckZhbGxiYWNrRXJyb3JgIG9uIGEgbWlzbWF0Y2guIFNldCBgZmFsc2VgIHRvXG4gICAqIGxldCB0aGUgYm9vdCBwcm9jZWVkIFx1MjAxNCB0aGUgbWlzbWF0Y2ggaXMgdGhlbiBzdXJmYWNlZCBhcyBkYXRhICh0aGUgZmFsbGJhY2tcbiAgICogdmVyZGljdCkgcmF0aGVyIHRoYW4gdGhyb3duLiBPbmx5IGFwcGxpZXMgdG8gYW4gb3duZWQgaW5zdGFuY2UgcnVubmluZyBhXG4gICAqIHN3YXBwZWQtaW4gYXNhciAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCwgYW5kIHdoZW4gbm8gYXNhciBpc1xuICAgKiBzd2FwcGVkIFx1MjAxNCB0aGVyZSBpcyBub3RoaW5nIHRvIHZlcmlmeSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkgKipuYWcgd2FybmluZ3MqKiBhcmUgZW1pdHRlZC5cbiAgICpcbiAgICogQ292ZXJzICoqYm90aCoqIGNvbXBhdGliaWxpdHkgbmFnczogdGhlIG9mZmxpbmUgaW5zdGFsbGVyXHUyMTk0YXBwIHdhcm5pbmcgKGFcbiAgICogcnVubmFibGUgaW5zdGFsbGVyIGJlbG93IHRoZSByZWNvbW1lbmRlZCBmbG9vcikgYW5kIHRoZSBwb3N0LWJvb3RcbiAgICogcnVudGltZS1FbGVjdHJvbiB3YXJuaW5nIChhIGxpdmUgRWxlY3Ryb24gYmVsb3cgdGhlIGFwcCdzIHJlY29tbWVuZGVkXG4gICAqIG1pbmltdW0pLiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGVhY2ggZmlyZXMgdmlhIHRoZSBoYXJuZXNzIGxvZzsgc2V0XG4gICAqIGBmYWxzZWAgdG8gc2lsZW5jZSBib3RoIFx1MjAxNCB0aGUgdmVyZGljdHMgYXJlIHN0aWxsIGNvbXB1dGVkIGFuZCBzdXJmYWNlZCBhc1xuICAgKiBkYXRhIChgY29tcGF0aWJpbGl0eWAgLyBgZWxlY3Ryb25Db21wYXRpYmlsaXR5YCksIG9ubHkgdGhlIGxvZyBpcyBzdXBwcmVzc2VkLlxuICAgKiBEb2VzIG5vdCBhZmZlY3QgdGhlIGAndW5ydW5uYWJsZSdgIHRocm93IChzZWVcbiAgICoge0BsaW5rIHNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXJ9KS4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkXG4gICAqIGluc3RhbmNlIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzY3JpbWluYW50IGZvciB0aGUgdHJhbnNwb3J0IHR5cGUuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnb2JzaWRpYW4tY2RwJztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIHVuaW9uIG9mIGFsbCBzdXBwb3J0ZWQgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFVzZWQgaW4gdml0ZXN0IGBlbnZpcm9ubWVudE9wdGlvbnMub2JzaWRpYW5UcmFuc3BvcnRgIHRvIHNlbGVjdCBhbmRcbiAqIGNvbmZpZ3VyZSB0aGUgdHJhbnNwb3J0IGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IHR5cGUgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zID1cbiAgfCBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zXG4gIHwgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiB0eXBlcyBmb3IgY29uZmlndXJpbmcgdGhlIE9ic2lkaWFuIHRyYW5zcG9ydFxuICogdmlhIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zYC5cbiAqL1xuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBBbmRyb2lkIHRlc3RpbmcgdmlhIEFwcGl1bSBXZWJWaWV3IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFwcCBwYWNrYWdlIChBbmRyb2lkKSBvciBidW5kbGUgSUQgKGlPUykuXG4gICAqIERlZmF1bHRzIHRvIGAnbWQub2JzaWRpYW4nYFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgYXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgdG8gYmVjb21lIHJlYWR5XG4gICAqIChpdHMgYC9zdGF0dXNgIGVuZHBvaW50IHRvIHJlc3BvbmQpLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgaGFybmVzcyBhdXRvLXN0YXJ0cyB0aGUgQXBwaXVtIHNlcnZlclxuICAgKiAoe0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0pOyBpZ25vcmVkIHdoZW4gYXR0YWNoaW5nIHRvIGFuXG4gICAqIGFscmVhZHktcnVubmluZyBzZXJ2ZXIuIE9uIGEgY29sZCBtYWNoaW5lIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIGNhbiB0YWtlXG4gICAqIGEgd2hpbGUgdG8gZmluaXNoIGJvb3RpbmcsIHNvIHJhaXNlIHRoaXMgaWYgc3RhcnR1cCB0aW1lcyBvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBhcHBpdW1TdGFydFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMIChlLmcuIGAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJ2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwaXVtVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbmRyb2lkIEFWRCAoQW5kcm9pZCBWaXJ0dWFsIERldmljZSkgbmFtZS5cbiAgICpcbiAgICogVGhlIHRyYW5zcG9ydCBmYWN0b3J5IGxhdW5jaGVzIGBlbXVsYXRvciAtYXZkIDxhdmROYW1lPmAgYXMgYSBiYWNrZ3JvdW5kXG4gICAqIHByb2Nlc3MgYW5kIHBvbGxzIHVudGlsIHRoZSBkZXZpY2UgYXBwZWFycy4gVGhlIGVtdWxhdG9yIGlzIGtpbGxlZFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIFJ1biBgZW11bGF0b3IgLWxpc3QtYXZkc2AgdG8gc2VlIGF2YWlsYWJsZSBBVkQgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgVURJRCB0byByZXVzZSAoZS5nLiBgJ2VtdWxhdG9yLTU1NTQnYCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYWZ0ZXIgdGhlIEFwcGl1bSBzZXNzaW9uIGlzXG4gICAqIGVzdGFibGlzaGVkLiBXaGVuIHByZXNlbnQgYWxvbmdzaWRlIHtAbGluayBzZXNzaW9uSWR9LCB0aGUgdHJhbnNwb3J0XG4gICAqIGZhY3Rvcnkgc2tpcHMgZW11bGF0b3Igc3RhcnR1cCBhbmQgYXR0YWNoZXMgdG8gdGhlIGV4aXN0aW5nIHNlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcsIGFmdGVyIGBzeXMuYm9vdF9jb21wbGV0ZWRgLCBmb3IgYVxuICAgKiBoYXJuZXNzLXN0YXJ0ZWQgZW11bGF0b3IgdG8gYmVjb21lIGlkbGUgYmVmb3JlIHRoZSBBcHBpdW0gc2Vzc2lvbiBpc1xuICAgKiBlc3RhYmxpc2hlZC5cbiAgICpcbiAgICogYHN5cy5ib290X2NvbXBsZXRlZGAgZmlyZXMgKmJlZm9yZSogdGhlIGd1ZXN0IGlzIGFjdHVhbGx5IGlkbGU6IHBhY2thZ2VcbiAgICogb3B0aW1pemF0aW9uIGFuZCBzeXN0ZW0gc2VydmljZXMga2VlcCBjaHVybmluZywgc28gZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uXG4gICAqIGltbWVkaWF0ZWx5IG1ha2VzIGV2ZXJ5IG9uZSBvZiBVaUF1dG9tYXRvcjIncyBzZXJpYWxpemVkIGBhZGJgIHJvdW5kLXRyaXBzXG4gICAqIGNvbnRlbmQgd2l0aCB0aGF0IHdvcmsgYW5kIGluZmxhdGVzIHNlc3Npb24gZXN0YWJsaXNobWVudCB+M3guIFRoZSBmYWN0b3J5XG4gICAqIGluc3RlYWQgd2FpdHMgdW50aWwgdGhlIGJvb3QgYW5pbWF0aW9uIGhhcyBzdG9wcGVkIGFuZCB0aGUgcGFja2FnZSBtYW5hZ2VyXG4gICAqIGlzIHNlcnZpbmcsIHByb2NlZWRpbmcgZWFybHkgb25jZSBpZGxlIG9yIGFmdGVyIHRoaXMgYnVkZ2V0IChiZXN0LWVmZm9ydCBcdTIwMTQgYVxuICAgKiB0aW1lb3V0IGxvZ3MgYSB3YXJuaW5nIGFuZCBwcm9jZWVkcykuIFNldCBgMGAgdG8gc2tpcCB0aGUgd2FpdC4gT25seSBhcHBsaWVzXG4gICAqIHRvIGEgaGFybmVzcy1zdGFydGVkIGVtdWxhdG9yLCBub3QgYSByZXVzZWQgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZGxlVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBjb25zb2xlIHdpbmRvdyBpcyBzaG93bi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgICh0aGUgZGVmYXVsdCksIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIHByb2Nlc3MgaXMgc3Bhd25lZCB3aXRoXG4gICAqIGl0cyBjb25zb2xlIHdpbmRvdyBoaWRkZW4gKGB3aW5kb3dzSGlkZWApIGFuZCBpdHMgb3V0cHV0IGRpc2NhcmRlZCwgc28gaXRcbiAgICogbmVpdGhlciBzdGVhbHMgZm9jdXMgbm9yIHdyaXRlcyB0byB0aGUgaW52b2tpbmcgdGVybWluYWwuIElnbm9yZWQgd2hlblxuICAgKiBhdHRhY2hpbmcgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIEFwcGl1bSBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19XG4gICAqIGBmYWxzZWAsIG9yIHRoZSBzZXJ2ZXIgYWxyZWFkeSByZWFjaGFibGUpLiBTZXQgYHRydWVgIHRvIHNlZSB0aGUgc2VydmVyIGxvZyB3aW5kb3dcbiAgICogYW5kIGl0cyBsaXZlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNBcHBpdW1Db25zb2xlVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGF1dG8tc3RhcnRlZCBBbmRyb2lkIGVtdWxhdG9yIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCAodGhlIGRlZmF1bHQpLCB0aGUgZW11bGF0b3IgaXMgc3RhcnRlZCB3aXRoIGAtbm8td2luZG93YFxuICAgKiAoaGVhZGxlc3MpLCBzbyBpdCBuZXZlciBzdGVhbHMgZm9jdXMuIElnbm9yZWQgd2hlbiByZXVzaW5nIGFuIGFscmVhZHktcnVubmluZ1xuICAgKiBkZXZpY2UgKG5vdGhpbmcgaXMgbGF1bmNoZWQgdG8gaGlkZSkuIFNldCBgdHJ1ZWAgdG8gd2F0Y2ggdGhlIGVtdWxhdG9yIFVJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0VtdWxhdG9yVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWAgYWZ0ZXJcbiAgICogdGhlIHZhdWx0IGlzIChyZSlvcGVuZWQuXG4gICAqXG4gICAqIFJlZ2lzdGVyaW5nIGEgdmF1bHQgdHJpZ2dlcnMgYSBmdWxsIE9ic2lkaWFuIHJlLWluaXQgKGBsb2NhdGlvbi5yZWxvYWQoKWBcbiAgICogcmVvcGVucyB0aGUgdmF1bHQgYW5kIHJlbG9hZHMgZXZlcnkgcGx1Z2luIFx1MjAxNCB0aGUgaGVhdmllc3Qgc3RhcnR1cCBzdGVwKS4gT25cbiAgICogYSBjb2xkLWJvb3RlZCBvciB1bmRlci1wcm92aXNpb25lZCBlbXVsYXRvciB0aGF0IGluaXQgY2FuIHRha2UgYSB3aGlsZSwgc29cbiAgICogdGhpcyBidWRnZXQgaXMgdGhlIGxhcmdlc3Qgb2YgdGhlIHRyYW5zcG9ydCB0aW1lb3V0cy4gUmFpc2UgaXQgZnVydGhlciBpZlxuICAgKiByZWxlYXNlcyBzdGlsbCBmbGFrZSBvbiBzbG93IENJIGVtdWxhdG9ycy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDkwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGF5b3V0UmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBvbGQgYSBsZWZ0b3ZlciAqKmhvc3QqKiBkaXJlY3RvcnkgbXVzdCBiZSBiZWZvcmVcbiAgICoge0BsaW5rIHNob3VsZFN3ZWVwTGVmdG92ZXJzfSByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBHb3Zlcm5zIHRoZSBob3N0LXNpZGUgc3dlZXAgb25seSAodGhlIGB0ZW1wLXZhdWx0LSpgIHN0YWdpbmcgZGlyZWN0b3JpZXNcbiAgICogdGhpcyBydW4ncyBtYWNoaW5lIGFjY3VtdWxhdGVzIGluIGl0cyB0ZW1wIGRpcikuIFRoZSAqKmRldmljZSoqIHN3ZWVwIGlzXG4gICAqIHVuY29uZGl0aW9uYWw6IEFuZHJvaWQgcnVucyBob2xkIHRoZSBleGNsdXNpdmUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIHNvIG5vXG4gICAqIGNvbmN1cnJlbnQgcnVuIGNhbiBvd24gYSBkZXZpY2UgdmF1bHQsIGFuZCBhbiBhZ2UgZ2F0ZSB0aGVyZSB3b3VsZCBsZXQgYVxuICAgKiB2YXVsdCBsZWFrZWQgbWludXRlcyBhZ28gc3Vydml2ZSBpbnRvIHRoZSBuZXh0IHJ1biBcdTIwMTQgd2hpY2ggaXMgdGhlIGZhaWx1cmVcbiAgICogbG9vcCB0aGUgc3dlZXAgZXhpc3RzIHRvIGJyZWFrLiBTZXQgYDBgIHRvIHJlbW92ZSBldmVyeSBob3N0IG1hdGNoIHRvby5cbiAgICpcbiAgICogQGRlZmF1bHQgYDcyMDAwMDBgXG4gICAqL1xuICByZWFkb25seSBsZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZXh0cmEgYXR0ZW1wdHMgdG8gZW5hYmxlIHRoZSBwbHVnaW4gYW5kIHZlcmlmeSBpdCBsb2FkZWQsIG9uIHRvcFxuICAgKiBvZiB0aGUgZmlyc3QgYXR0ZW1wdC5cbiAgICpcbiAgICogT24gYSBmcmVzaGx5IGNvbGQtYm9vdGVkIGVtdWxhdG9yIHRoZSBwbHVnaW4gc3Vic3lzdGVtIGNhbiBzdGlsbCBiZSBzZXR0bGluZ1xuICAgKiB3aGVuIHRoZSBoYXJuZXNzIGVuYWJsZXMgdGhlIHBsdWdpbiwgc28gdGhlIGVuYWJsZSBsYW5kcyBpbiB0aGUgZW5hYmxlZCBzZXRcbiAgICogYnV0IHRoZSBsb2FkIHJhY2VzIGFuZCBmYWlscyAoYFwiPGlkPlwiIGlzIGluIHRoZSBlbmFibGVkIHNldCBidXQgbm90IGxvYWRlZGApLlxuICAgKiBEZXZpY2UtaWRsZSBhbmQgYGxheW91dFJlYWR5YCBhcmUgYWxyZWFkeSBhd2FpdGVkLCBzbyB0aGlzIGlzIHRoZSBuYXJyb3dcbiAgICogcmVzaWR1YWwgcmFjZTogdGhlIGhhcm5lc3MgcmV0cmllcyB0aGUgZW5hYmxlICsgbG9hZC12ZXJpZmljYXRpb24gdGhpcyBtYW55XG4gICAqIHRpbWVzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiAoc2VlXG4gICAqIHtAbGluayBwbHVnaW5FbmFibGVSZXRyeURlbGF5SW5NaWxsaXNlY29uZHN9KSwgZm9yY2luZyBhIGdlbnVpbmUgcmVsb2FkIGVhY2hcbiAgICogYXR0ZW1wdC4gQSBjYXB0dXJlZCBwbHVnaW4gbG9hZCBlcnJvciBpcyB0cmVhdGVkIGFzIGEgZGV0ZXJtaW5pc3RpYyBidWcgYW5kXG4gICAqIGlzICoqbm90KiogcmV0cmllZC4gU2V0IGAwYCB0byBkaXNhYmxlIHJldHJ5IChhIHNpbmdsZSBhdHRlbXB0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDNgXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5FbmFibGVSZXRyeUNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBCYXNlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHBsdWdpbi1lbmFibGUgYXR0ZW1wdHMgKHNlZVxuICAgKiB7QGxpbmsgcGx1Z2luRW5hYmxlUmV0cnlDb3VudH0pLlxuICAgKlxuICAgKiBUaGUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseSBwZXIgcmV0cnk6IHRoZSBmaXJzdCByZXRyeSB3YWl0cyB0aGlzIGxvbmcsXG4gICAqIHRoZSBzZWNvbmQgdHdpY2UgYXMgbG9uZywgdGhlIHRoaXJkIGZvdXIgdGltZXMsIGFuZCBzbyBvbiBcdTIwMTQgZ2l2aW5nIGFcbiAgICogc3RpbGwtc2V0dGxpbmcgY29sZCBndWVzdCBwcm9ncmVzc2l2ZWx5IG1vcmUgdGltZSB0byBiZWNvbWUgcmVhZHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAyMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luRW5hYmxlUmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZXN0YWJsaXNoaW5nIHRoZSBBcHBpdW0gc2Vzc2lvbiAoV2ViRHJpdmVySU9cbiAgICogYHJlbW90ZSgpYCBcdTIwMTQgVWlBdXRvbWF0b3IyIHNlcnZlciBpbnN0YWxsICsgYXBwIGxhdW5jaCkuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxhcmdlc3QgYW5kIG1vc3QgbG9hZC1zZW5zaXRpdmUgc3RlcCBvZiB0aGUgQW5kcm9pZCBzZXR1cDpcbiAgICogb24gYSBjb2xkIG9yIGNvbnRlbmRlZCBlbXVsYXRvciBpdCBkb21pbmF0ZXMgc3RhcnR1cCBhbmQgY2FuIHRha2UgYSBmZXdcbiAgICogbWludXRlcy4gUmFpc2UgaXQgaWYgc2Vzc2lvbiBlc3RhYmxpc2htZW50IHRpbWVzIG91dCB1bmRlciBsb2FkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTgwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkNvbm5lY3Rpb25SZXRyeVRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gZXhpc3RpbmcgQXBwaXVtIHNlc3Npb24gSUQgdG8gcmVhdHRhY2ggdG8uXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYW5kIHByb3ZpZGVkIHRvIHRlc3Qgd29ya2Vyc1xuICAgKiB2aWEgdGhlIGZyYW1ld29yaydzIGNvbnRleHQgbWVjaGFuaXNtIChlLmcuIFZpdGVzdCBgcHJvdmlkZWAvYGluamVjdGApLlxuICAgKiBXaGVuIHByZXNlbnQsIHRoZSB0cmFuc3BvcnQgZmFjdG9yeSB1c2VzIFdlYkRyaXZlcklPJ3MgYGF0dGFjaCgpYCBpbnN0ZWFkXG4gICAqIG9mIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24sIGF2b2lkaW5nIGR1cGxpY2F0ZSBBcHBpdW0vQURCIGNvbm5lY3Rpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBtaXNzaW5nIEFwcGl1bSBkZXBlbmRlbmNpZXMgKHRoZVxuICAgKiBgdWlhdXRvbWF0b3IyYCBkcml2ZXIsIGFuZCBBcHBpdW0gaXRzZWxmKSBiZWZvcmUgYXV0by1zdGFydGluZyB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGFuZCB0aGUgaGFybmVzcyBpcyBhYm91dCB0byBhdXRvLXN0YXJ0IHRoZSBBcHBpdW1cbiAgICogc2VydmVyICh7QGxpbmsgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtfSksIHRoZSBmYWN0b3J5IGZpcnN0IGVuc3VyZXMgQXBwaXVtIGlzXG4gICAqIGluc3RhbGxlZCAoZ2xvYmFsbHksIHZpYSBgbnBtIGluc3RhbGwgLWcgYXBwaXVtYCkgYW5kIHRoYXQgdGhlXG4gICAqIGB1aWF1dG9tYXRvcjJgIGRyaXZlciBpcyBpbnN0YWxsZWQgKGBhcHBpdW0gZHJpdmVyIGluc3RhbGwgdWlhdXRvbWF0b3IyYCksXG4gICAqIGluc3RhbGxpbmcgd2hpY2hldmVyIGlzIG1pc3NpbmcuIElnbm9yZWQgd2hlbiBhdHRhY2hpbmcgdG8gYW5cbiAgICogYWxyZWFkeS1ydW5uaW5nIHNlcnZlciAobm90aGluZyBpcyBhdXRvLXN0YXJ0ZWQsIHNvIG5vdGhpbmcgaXMgaW5zdGFsbGVkKSBvclxuICAgKiB3aGVuIHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19IGlzIGBmYWxzZWAuIFNldCBpdCB0byBgZmFsc2VgIHRvIG1hbmFnZVxuICAgKiB0aGUgQXBwaXVtIHRvb2xjaGFpbiB5b3Vyc2VsZiBhbmQgc2tpcCB0aGUgbWFjaGluZS1tdXRhdGluZyBnbG9iYWwgaW5zdGFsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBdXRvSW5zdGFsbEFwcGl1bURlcGVuZGVuY2llcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzdGFydCB0aGUgQXBwaXVtIHNlcnZlciBpZiBpdCBpcyBub3QgcmVhY2hhYmxlLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCB0aGUgdHJhbnNwb3J0IGZhY3Rvcnkgc3Bhd25zIGBucHggYXBwaXVtYFxuICAgKiBhcyBhIGJhY2tncm91bmQgcHJvY2VzcyB3aGVuIHRoZSBwcmVmbGlnaHQgY2hlY2sgZmFpbHMsIGFuZCBraWxscyBpdFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaGFybmVzcyByZW1vdmVzIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgZWFybGllciBydW5zIGxlYWtlZC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgZWFjaCBydW4gc3dlZXBzIGF0IHN0YXJ0ICoqYW5kKiogYXQgZW5kOiBvbiB0aGVcbiAgICogZGV2aWNlLCBldmVyeSBgdGVtcC12YXVsdC0qYCBkaXJlY3RvcnkgdW5kZXIge0BsaW5rIHZhdWx0QmFzZVBhdGh9IChwbHVzIHRoZVxuICAgKiBzdGFsZSB2YXVsdCByZWdpc3RyYXRpb25zIGluIE9ic2lkaWFuIE1vYmlsZSdzIGBsb2NhbFN0b3JhZ2VgKTsgb24gdGhlIGhvc3QsXG4gICAqIHRoZSBsZWZ0b3ZlciBgdGVtcC12YXVsdC0qYCBhbmQgb3duZWQgYHVzZXJkYXRhLSpgIGRpcmVjdG9yaWVzIG9sZGVyIHRoYW5cbiAgICoge0BsaW5rIGxlZnRvdmVyTWF4QWdlSW5NaWxsaXNlY29uZHN9LlxuICAgKlxuICAgKiBBIHJ1biB0aGF0IGRpZXMgY2Fubm90IGNsZWFuIHVwIGFmdGVyIGl0c2VsZiBcdTIwMTQgaXRzIHRlYXJkb3duIGdvZXMgdGhyb3VnaCB0aGVcbiAgICogV2ViVmlldywgYW5kIGEgZGVhZCBXZWJWaWV3IGlzIHdoYXQgbW9zdCBBbmRyb2lkIGZhaWx1cmVzIGFyZSBcdTIwMTQgc28gdGhlXG4gICAqIHJlc2lkdWUgYWNjdW11bGF0ZXMgYW5kIHNsb3dzIHRoZSBuZXh0IHJ1bidzIHN0YXJ0dXAgZW51bWVyYXRpb24gdW50aWwgaXRcbiAgICogbWlzc2VzIHRoZSBXZWJWaWV3LXJlYWRpbmVzcyBidWRnZXQuIFRoZSBzdGFydCBzd2VlcCBpcyB0aGUgaGFsZiB0aGF0IGJyZWFrc1xuICAgKiB0aGF0IGxvb3AsIGJlY2F1c2UgaXQgcnVucyBiZWZvcmUgYW55dGhpbmcgdGhhdCBjYW4gZGllLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFN3ZWVwTGVmdG92ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzY3JpbWluYW50IGZvciB0aGUgdHJhbnNwb3J0IHR5cGUuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnb2JzaWRpYW4tYW5kcm9pZC1hcHBpdW0nO1xuXG4gIC8qKlxuICAgKiBCYXNlIHBhdGggb24gdGhlIGRldmljZSB3aGVyZSBPYnNpZGlhbiBzdG9yZXMgdmF1bHRzLlxuICAgKlxuICAgKiBEZWZhdWx0czpcbiAgICogLSBBbmRyb2lkOiBgL3NkY2FyZC9Eb2N1bWVudHMvYFxuICAgKiAtIGlPUzogYEBtZC5vYnNpZGlhbjpkb2N1bWVudHMvYFxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRCYXNlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcgZm9yIHRoZSBXZWJWaWV3IGNvbnRleHQgdG8gYmVjb21lIGF2YWlsYWJsZS5cbiAgICpcbiAgICogT24gc2xvdyBlbXVsYXRvcnMsIHRoZSBDaHJvbWVEcml2ZXIgcHJveHkgdGhhdCBoYW5kbGVzIFdlYlZpZXcgY29tbWFuZHNcbiAgICogbWF5IG5vdCBiZSByZWFkeSBpbW1lZGlhdGVseSBhZnRlciB0aGUgQXBwaXVtIHNlc3Npb24gc3RhcnRzLiBUaGlzIHRpbWVvdXRcbiAgICogY29udHJvbHMgaG93IGxvbmcgdG8gcG9sbCBiZWZvcmUgZ2l2aW5nIHVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSB3ZWJ2aWV3VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBkZXNrdG9wIHRlc3RpbmcgdmlhIENocm9tZSBEZXZUb29scyBQcm90b2NvbC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGRlc2t0b3AgdHJhbnNwb3J0LiBCeSBkZWZhdWx0IHRoZSBoYXJuZXNzICoqbGF1bmNoZXMgYW5kXG4gKiBvd25zIGFuIGlzb2xhdGVkIE9ic2lkaWFuIGluc3RhbmNlKiogaW4gYSB0ZW1wb3JhcnkgdXNlci1kYXRhIGRpciAobmV2ZXJcbiAqIHRvdWNoaW5nIHRoZSB1c2VyJ3MgT2JzaWRpYW4pLCBjb25uZWN0ZWQgb3ZlciBhIGZyZWUgQ0RQIHBvcnQuIFByb3ZpZGVcbiAqIHtAbGluayBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMucG9ydH0gdG8gaW5zdGVhZCBhdHRhY2ggdG8gYW5cbiAqIGFscmVhZHktcnVubmluZyBPYnNpZGlhbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMge1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGluZGl2aWR1YWwgQ0RQIGNvbW1hbmRzLlxuICAgKiBEZWZhdWx0cyB0byAzMDAwMFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogR3JhY2Ugd2luZG93IGluIG1pbGxpc2Vjb25kcyBmb3IgZmFzdC1mYWlsaW5nIGEgKipkZWFkIGJvb3QqKiBvZiB0aGUgb3duZWRcbiAgICogaW5zdGFuY2UuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBjYW5ub3QgcnVuIG9uIHRoZSBsYXVuY2hlZCBFbGVjdHJvbiBzaGVsbCAodGhlIGluc3RhbGxlclxuICAgKiB2ZXJzaW9uIGlzIHRvbyBvbGQgZm9yIHRoZSBhcHAgdmVyc2lvbiksIHRoZSByZW5kZXJlciBsb2FkcyBidXQgbmV2ZXJcbiAgICogYm9vdHN0cmFwczogYGRvY3VtZW50LmJvZHlgIHN0YXlzIGVtcHR5IGFuZCBgd2luZG93LmFwcGAgcmVtYWluc1xuICAgKiBgdW5kZWZpbmVkYCBcdTIwMTQgYSBibGFjayBzY3JlZW4uIFJhdGhlciB0aGFuIHdhaXRpbmcgb3V0IHRoZSBmdWxsIHJlYWRpbmVzc1xuICAgKiB0aW1lb3V0LCB0aGUgb3duZWQtdmF1bHQgcmVhZGluZXNzIHBvbGwgY29uY2x1ZGVzIHRoZSBib290IGlzIGRlYWQgb25jZSB0aGVcbiAgICogcmVuZGVyZXIgaGFzIGJlZW4gYGRvY3VtZW50LnJlYWR5U3RhdGVgIGAnY29tcGxldGUnYCBmb3IgdGhpcyBsb25nIHdpdGggbm9cbiAgICogYHdpbmRvdy5hcHBgIGFuZCBhbiBlbXB0eSBgPGJvZHk+YCwgYW5kIHRocm93cyBhXG4gICAqIGBSZW5kZXJlckZhaWxlZFRvSW5pdGlhbGl6ZUVycm9yYC4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlXG4gICAqIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS4gU2V0IGAwYCB0byBkaXNhYmxlIGZhc3QtZmFpbCBhbmRcbiAgICogcmVzdG9yZSB0aGUgcGxhaW4gd2FpdC1vdXQtdGhlLXJlYWRpbmVzcy10aW1lb3V0IGJlaGF2aW9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZWFkQm9vdEdyYWNlSW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENEUCBob3N0LlxuICAgKiBEZWZhdWx0cyB0byBgJ2xvY2FsaG9zdCdgXG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB7QGxpbmsgcG9ydH0gYXMgdGhlIENEUCBwb3J0IG9mIGEgKipoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBpbnN0YW5jZSoqXG4gICAqIHRoYXQgdGhlIGdsb2JhbCBzZXR1cCBhbHJlYWR5IGxhdW5jaGVkIGFuZCBwcmVwYXJlZCAodmF1bHQgcmVnaXN0ZXJlZCxcbiAgICogcGx1Z2luIGVuYWJsZWQpLlxuICAgKlxuICAgKiBQb3B1bGF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgZ2xvYmFsIHNldHVwIGFuZCBwcm92aWRlZCB0byB0ZXN0IHdvcmtlcnMgdmlhXG4gICAqIHRoZSBmcmFtZXdvcmsncyBjb250ZXh0IG1lY2hhbmlzbSAoZS5nLiBWaXRlc3QgYHByb3ZpZGVgL2BpbmplY3RgKS4gV2hlbiBzZXQsXG4gICAqIHRoZSB3b3JrZXIgKiphdHRhY2hlcyoqIHRvIHRoZSBvd25lZCBpbnN0YW5jZSBvbiB7QGxpbmsgcG9ydH0gaW5zdGVhZCBvZlxuICAgKiBsYXVuY2hpbmcgaXRzIG93biwgYW5kIHNraXBzIHRoZSB1c2VyLXNjb3BlIHZhdWx0LXJlZ2lzdHJhdGlvbiBwcmVmbGlnaHQgXHUyMDE0XG4gICAqIHRoZSBvd25lZCBpbnN0YW5jZSdzIHZhdWx0IGxpdmVzIGluIGFuIGlzb2xhdGVkIHVzZXItZGF0YSBjb25maWcsIG5vdCB0aGVcbiAgICogdXNlci1zY29wZSByZWdpc3RyeS4gRG8gbm90IHNldCB0aGlzIG1hbnVhbGx5OyBmb3IgcGxhaW4gYXR0YWNoIG1vZGUgdXNlXG4gICAqIHtAbGluayBwb3J0fSBhbG9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IGlzSGFybmVzc093bmVkSW5zdGFuY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZCBkZXNrdG9wIE9ic2lkaWFuIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCwgdGhlIGhhcm5lc3MgbGF1bmNoZXMgdGhlIG93bmVkIGluc3RhbmNlIHdpdGhcbiAgICoga2VlcC1hbGl2ZSBDaHJvbWl1bSBmbGFncyBhbmQgbW92ZXMgaXRzIHdpbmRvdyAqKm9mZi1zY3JlZW4qKiBvbmNlIEVsZWN0cm9uJ3NcbiAgICogcmVtb3RlIGJyaWRnZSBpcyBhdmFpbGFibGUsIHNvIHRoZSBydW4gbmV2ZXIgc3RlYWxzIGZvY3VzIG9yIHBvcHMgYSB3aW5kb3cgaW5cbiAgICogZnJvbnQgb2YgeW91LiBPZmYtc2NyZWVuIChub3QgbWluaW1pemVkKSBrZWVwcyB0aGUgcmVuZGVyZXIgbGl2ZSwgc29cbiAgICogYHNldFRpbWVvdXRgLCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCwgYDpob3ZlcmAsIGFuZCB0cnVzdGVkIGlucHV0IGJlaGF2ZVxuICAgKiBpZGVudGljYWxseSB0byBhIHZpc2libGUgd2luZG93LiBEZWZhdWx0cyB0byBgdHJ1ZWA7IGludGVncmF0aW9uIHNldHVwXG4gICAqIGV4cGxpY2l0bHkgcGFzc2VzIGBmYWxzZWAgdG8gYXZvaWQgc3RlYWxpbmcgZm9jdXMuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGVcbiAgICogKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiBtb3ZlcyB0aGUgdXNlcidzIG93biBydW5uaW5nIHdpbmRvdy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBpc09ic2lkaWFuQXBwVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhvdyBvbGQgYSBsZWZ0b3ZlciBkaXJlY3RvcnkgbXVzdCBiZSBiZWZvcmUge0BsaW5rIHNob3VsZFN3ZWVwTGVmdG92ZXJzfVxuICAgKiByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBUaGUgZ2F0ZSBtYXR0ZXJzIG1vc3Qgb24gZGVza3RvcDogcnVucyBhcmUgZGVsaWJlcmF0ZWx5ICoqbm90Kiogc2VyaWFsaXplZFxuICAgKiAoZWFjaCBvd25zIGFuIGlzb2xhdGVkIGluc3RhbmNlKSwgYW5kIGV2ZXJ5IHByb2plY3Qgb24gdGhlIG1hY2hpbmUgc2hhcmVzXG4gICAqIG9uZSB0ZW1wIGRpcmVjdG9yeSwgc28gYSB5b3VuZyBgdGVtcC12YXVsdC0qYCAvIGB1c2VyZGF0YS0qYCBkaXJlY3RvcnkgbWF5XG4gICAqIHdlbGwgYmVsb25nIHRvIGEgcnVuIHRoYXQgaXMgc3RpbGwgaW4gZmxpZ2h0LiBSYWlzZSBpdCBpZiBhIHJ1biBvZiB5b3VycyBjYW5cbiAgICogb3V0bGl2ZSB0aGUgZGVmYXVsdDsgc2V0IGAwYCB0byByZW1vdmUgZXZlcnkgbWF0Y2ggcmVnYXJkbGVzcyBvZiBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA3MjAwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipFbGVjdHJvbiBzaGVsbCoqIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLlxuICAgKlxuICAgKiBBY2NlcHRzIGFuIGV4cGxpY2l0IGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuXG4gICAqIFRoZSBtYXRjaGluZyBHaXRIdWIgcmVsZWFzZSBpbnN0YWxsZXIgaXMgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkIHRvIGFcbiAgICogcG9ydGFibGUgc2hlbGwgKGNhY2hlZCBmb3IgcmV1c2UpLiBQdWJsaWMgcmVsZWFzZXMgb25seSBcdTIwMTQgY2F0YWx5c3QgYnVpbGRzXG4gICAqIGhhdmUgbm8gcHVibGljIGluc3RhbGxlci4gSWdub3JlZCB3aGVuIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipPYnNpZGlhbiBhcHAgdmVyc2lvbioqIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy5cbiAgICpcbiAgICogQWNjZXB0cyBhbiBleHBsaWNpdCBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLlxuICAgKiBWZXJzaW9ucyBhdCBvciBhYm92ZSB0aGUgc2hlbGwgdmVyc2lvbiBhcmUgYXBwbGllZCBhcyBhIGNoZWFwIGFzYXIgc3dhcDtcbiAgICogb2xkZXIgdmVyc2lvbnMgdHJhbnNwYXJlbnRseSB1c2UgdGhlIG1hdGNoaW5nIGluc3RhbGxlciBzaGVsbC4gV2hlbiBvbWl0dGVkLFxuICAgKiB0aGUgdXNlcidzIGN1cnJlbnRseS1pbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLiBJZ25vcmVkIHdoZW4ge0BsaW5rIHBvcnR9XG4gICAqIChhdHRhY2ggbW9kZSkgaXMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0byAodGhlXG4gICAqIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgaXQgd2FzIGxhdW5jaGVkIHdpdGgpLiBXaGVuIHNldCwgdGhlIGhhcm5lc3NcbiAgICogYXR0YWNoZXMgaW5zdGVhZCBvZiBvd25pbmcgYW4gaW5zdGFuY2UsIGFuZCB0aGUgdmVyc2lvbiBrbm9icyBhcmUgaWdub3JlZC5cbiAgICogV2hlbiBvbWl0dGVkLCBhbiBvd25lZCBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5XG4gICAqIGNob3NlbiBmcmVlIHBvcnQgKG5vIHBvcnQgaXMgaGFyZGNvZGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbGF1bmNoIHRoZSBvd25lZCBpbnN0YW5jZSB3aXRoIENocm9taXVtJ3Mgc2FuZGJveCBkaXNhYmxlZFxuICAgKiAoYC0tbm8tc2FuZGJveGApLlxuICAgKlxuICAgKiBOZWVkZWQgdG8gYm9vdCBhbiBvd25lZCBpbnN0YW5jZSBvbiBMaW51eCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZCBgY2hyb21lLXNhbmRib3hgIGhlbHBlciBcdTIwMTQgZS5nLiBhIHBvcnRhYmxlIHNoZWxsXG4gICAqIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbGxlciwgb3IgYSBDSSBydW5uZXIgbGF1bmNoaW5nIGFzIGEgbm9uLXJvb3QgdXNlciwgaW5cbiAgICogd2hpY2ggY2FzZSB0aGUgcmVuZGVyZXIgb3RoZXJ3aXNlIHJlZnVzZXMgdG8gc3RhcnQuIEhhcm1sZXNzIG9uXG4gICAqIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiByZWxhdW5jaGVzIHRoZSB1c2VyJ3MgcnVubmluZyBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBoYXJuZXNzIHJlbW92ZXMgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBlYXJsaWVyIHJ1bnMgbGVha2VkLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBlYWNoIHJ1biBzd2VlcHMgYXQgc3RhcnQgYW5kIGF0IGVuZCBmb3JcbiAgICogYHRlbXAtdmF1bHQtKmAgc3RhZ2luZyBkaXJlY3RvcmllcyBhbmQgb3duZWQgYHVzZXJkYXRhLSpgIGluc3RhbmNlIHByb2ZpbGVzXG4gICAqIG9sZGVyIHRoYW4ge0BsaW5rIGxlZnRvdmVyTWF4QWdlSW5NaWxsaXNlY29uZHN9LiBBIHJ1biBraWxsZWQgbWlkLWZsaWdodFxuICAgKiBuZXZlciByZWFjaGVzIGl0cyBvd24gY2xlYW51cCwgc28gd2l0aG91dCB0aGlzIHRoZSB0ZW1wIGRpcmVjdG9yeSBncm93c1xuICAgKiB3aXRob3V0IGJvdW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFN3ZWVwTGVmdG92ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhbiAqKnVucnVubmFibGUqKiBpbnN0YWxsZXJcdTIxOTRhcHAgdmVyc2lvbiBwYWlyIGZhaWxzIGZhc3QgYmVmb3JlIGxhdW5jaC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgYW4gaW5zdGFsbGVyIGJlbG93IHRoZSBhcHAncyBydW4gZmxvb3IgKHRoZVxuICAgKiBvbGRlc3QgaW5zdGFsbGVyIHRoZSBhcHAncyBhc2FyIGNhbiBib290IG9uKSB0aHJvd3NcbiAgICogYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgZnJvbSB2ZXJzaW9uIHJlc29sdXRpb24sIGJlZm9yZSBhbnl0aGluZ1xuICAgKiBpcyBkb3dubG9hZGVkIG9yIGxhdW5jaGVkLiBTZXQgYGZhbHNlYCB0byBsZXQgdGhlIHBpbiBwcm9jZWVkIHRvIGxhdW5jaFxuICAgKiBpbnN0ZWFkIFx1MjAxNCB3aGVyZSB0aGUgcmVhY3RpdmUgZGVhZC1ib290IGZhc3QtZmFpbFxuICAgKiAoYFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3JgLCBzZWUge0BsaW5rIGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kc30pXG4gICAqIHN0aWxsIGNhdGNoZXMgdGhlIGJsYWNrLXNjcmVlbiBib290LCBhbmQgdGhlIGAndW5ydW5uYWJsZSdgIHZlcmRpY3QgaXNcbiAgICogc3VyZmFjZWQgYXMgZGF0YSByYXRoZXIgdGhhbiB0aHJvd24uIE9ubHkgYXBwbGllcyB0byBhbiBvd25lZCBpbnN0YW5jZVxuICAgKiAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSAqKnNpbGVudCBhc2FyIGZhbGxiYWNrKiogZmFpbHMgZmFzdCBhZnRlciBib290LlxuICAgKlxuICAgKiBXaGVuIGFuIGFzYXIgaXMgc3dhcHBlZCBvbnRvIGFuIGluc3RhbGxlciBzaGVsbCB0b28gb2xkIGZvciBpdCwgdGhlIGluc3RhbmNlXG4gICAqIG1heSBub3QgZGVhZC1ib290IFx1MjAxNCBpdCBjYW4gc2lsZW50bHkgcmV2ZXJ0IHRvIHRoZSBpbnN0YWxsZXIncyBvd24gYnVuZGxlZFxuICAgKiBhc2FyIGFuZCBydW4gdGhlICoqd3JvbmcgKG9sZGVyKSoqIHZlcnNpb24gYmVoaW5kIGEgaGVhbHRoeSBVSS4gV2hlbiBgdHJ1ZWBcbiAgICogKHRoZSBkZWZhdWx0KSwgdGhlIHRyYW5zcG9ydCB2ZXJpZmllcyB0aGUgcnVubmluZyBhcHAgdmVyc2lvbiBhZ2FpbnN0IHRoZSBwaW5cbiAgICogcG9zdC1ib290IGFuZCB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYCBvbiBhIG1pc21hdGNoLiBTZXQgYGZhbHNlYCB0b1xuICAgKiBsZXQgdGhlIGJvb3QgcHJvY2VlZCBcdTIwMTQgdGhlIG1pc21hdGNoIGlzIHRoZW4gc3VyZmFjZWQgYXMgZGF0YSAodGhlIGZhbGxiYWNrXG4gICAqIHZlcmRpY3QpIHJhdGhlciB0aGFuIHRocm93bi4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlIHJ1bm5pbmcgYVxuICAgKiBzd2FwcGVkLWluIGFzYXIgKGlnbm9yZWQgaW4gYXR0YWNoIG1vZGUsIHtAbGluayBwb3J0fSBzZXQsIGFuZCB3aGVuIG5vIGFzYXIgaXNcbiAgICogc3dhcHBlZCBcdTIwMTQgdGhlcmUgaXMgbm90aGluZyB0byB2ZXJpZnkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZC1pbnN0YW5jZSBjb21wYXRpYmlsaXR5ICoqbmFnIHdhcm5pbmdzKiogYXJlIGVtaXR0ZWQuXG4gICAqXG4gICAqIENvdmVycyAqKmJvdGgqKiBjb21wYXRpYmlsaXR5IG5hZ3M6IHRoZSBvZmZsaW5lIGluc3RhbGxlclx1MjE5NGFwcCB3YXJuaW5nIChhXG4gICAqIHJ1bm5hYmxlIGluc3RhbGxlciBiZWxvdyB0aGUgcmVjb21tZW5kZWQgZmxvb3IpIGFuZCB0aGUgcG9zdC1ib290XG4gICAqIHJ1bnRpbWUtRWxlY3Ryb24gd2FybmluZyAoYSBsaXZlIEVsZWN0cm9uIGJlbG93IHRoZSBhcHAncyByZWNvbW1lbmRlZFxuICAgKiBtaW5pbXVtKS4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSBlYWNoIGZpcmVzIHZpYSB0aGUgaGFybmVzcyBsb2c7IHNldFxuICAgKiBgZmFsc2VgIHRvIHNpbGVuY2UgYm90aCBcdTIwMTQgdGhlIHZlcmRpY3RzIGFyZSBzdGlsbCBjb21wdXRlZCBhbmQgc3VyZmFjZWQgYXNcbiAgICogZGF0YSAoYGNvbXBhdGliaWxpdHlgIC8gYGVsZWN0cm9uQ29tcGF0aWJpbGl0eWApLCBvbmx5IHRoZSBsb2cgaXMgc3VwcHJlc3NlZC5cbiAgICogRG9lcyBub3QgYWZmZWN0IHRoZSBgJ3VucnVubmFibGUnYCB0aHJvdyAoc2VlXG4gICAqIHtAbGluayBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyfSkuIE9ubHkgYXBwbGllcyB0byBhbiBvd25lZFxuICAgKiBpbnN0YW5jZSAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3Vlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc2NyaW1pbmFudCBmb3IgdGhlIHRyYW5zcG9ydCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ29ic2lkaWFuLWNkcCc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBvZiBhbGwgc3VwcG9ydGVkIHRyYW5zcG9ydCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBVc2VkIGluIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zLm9ic2lkaWFuVHJhbnNwb3J0YCB0byBzZWxlY3QgYW5kXG4gKiBjb25maWd1cmUgdGhlIHRyYW5zcG9ydCBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cbmV4cG9ydCB0eXBlIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyA9XG4gIHwgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9uc1xuICB8IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -100,6 +100,20 @@ export interface ObsidianAndroidAppiumTransportOptions {
|
|
|
100
100
|
* @default `90000`
|
|
101
101
|
*/
|
|
102
102
|
readonly layoutReadyTimeoutInMilliseconds?: number;
|
|
103
|
+
/**
|
|
104
|
+
* How old a leftover **host** directory must be before
|
|
105
|
+
* {@link shouldSweepLeftovers} removes it.
|
|
106
|
+
*
|
|
107
|
+
* Governs the host-side sweep only (the `temp-vault-*` staging directories
|
|
108
|
+
* this run's machine accumulates in its temp dir). The **device** sweep is
|
|
109
|
+
* unconditional: Android runs hold the exclusive `android` setup lock, so no
|
|
110
|
+
* concurrent run can own a device vault, and an age gate there would let a
|
|
111
|
+
* vault leaked minutes ago survive into the next run — which is the failure
|
|
112
|
+
* loop the sweep exists to break. Set `0` to remove every host match too.
|
|
113
|
+
*
|
|
114
|
+
* @default `7200000`
|
|
115
|
+
*/
|
|
116
|
+
readonly leftoverMaxAgeInMilliseconds?: number;
|
|
103
117
|
/**
|
|
104
118
|
* Number of extra attempts to enable the plugin and verify it loaded, on top
|
|
105
119
|
* of the first attempt.
|
|
@@ -174,6 +188,24 @@ export interface ObsidianAndroidAppiumTransportOptions {
|
|
|
174
188
|
* @default `true`
|
|
175
189
|
*/
|
|
176
190
|
readonly shouldAutoStartAppium?: boolean;
|
|
191
|
+
/**
|
|
192
|
+
* Whether the harness removes the temporary directories earlier runs leaked.
|
|
193
|
+
*
|
|
194
|
+
* When `true` (the default), each run sweeps at start **and** at end: on the
|
|
195
|
+
* device, every `temp-vault-*` directory under {@link vaultBasePath} (plus the
|
|
196
|
+
* stale vault registrations in Obsidian Mobile's `localStorage`); on the host,
|
|
197
|
+
* the leftover `temp-vault-*` and owned `userdata-*` directories older than
|
|
198
|
+
* {@link leftoverMaxAgeInMilliseconds}.
|
|
199
|
+
*
|
|
200
|
+
* A run that dies cannot clean up after itself — its teardown goes through the
|
|
201
|
+
* WebView, and a dead WebView is what most Android failures are — so the
|
|
202
|
+
* residue accumulates and slows the next run's startup enumeration until it
|
|
203
|
+
* misses the WebView-readiness budget. The start sweep is the half that breaks
|
|
204
|
+
* that loop, because it runs before anything that can die.
|
|
205
|
+
*
|
|
206
|
+
* @default `true`
|
|
207
|
+
*/
|
|
208
|
+
readonly shouldSweepLeftovers?: boolean;
|
|
177
209
|
/**
|
|
178
210
|
* Discriminant for the transport type.
|
|
179
211
|
*/
|
|
@@ -267,6 +299,19 @@ export interface ObsidianCdpTransportOptions {
|
|
|
267
299
|
* @default `true`
|
|
268
300
|
*/
|
|
269
301
|
readonly isObsidianAppVisible?: boolean;
|
|
302
|
+
/**
|
|
303
|
+
* How old a leftover directory must be before {@link shouldSweepLeftovers}
|
|
304
|
+
* removes it.
|
|
305
|
+
*
|
|
306
|
+
* The gate matters most on desktop: runs are deliberately **not** serialized
|
|
307
|
+
* (each owns an isolated instance), and every project on the machine shares
|
|
308
|
+
* one temp directory, so a young `temp-vault-*` / `userdata-*` directory may
|
|
309
|
+
* well belong to a run that is still in flight. Raise it if a run of yours can
|
|
310
|
+
* outlive the default; set `0` to remove every match regardless of age.
|
|
311
|
+
*
|
|
312
|
+
* @default `7200000`
|
|
313
|
+
*/
|
|
314
|
+
readonly leftoverMaxAgeInMilliseconds?: number;
|
|
270
315
|
/**
|
|
271
316
|
* Pins the **Electron shell** (installer build) the owned instance runs.
|
|
272
317
|
*
|
|
@@ -314,6 +359,18 @@ export interface ObsidianCdpTransportOptions {
|
|
|
314
359
|
* @default `false`
|
|
315
360
|
*/
|
|
316
361
|
readonly shouldDisableSandbox?: boolean;
|
|
362
|
+
/**
|
|
363
|
+
* Whether the harness removes the temporary directories earlier runs leaked.
|
|
364
|
+
*
|
|
365
|
+
* When `true` (the default), each run sweeps at start and at end for
|
|
366
|
+
* `temp-vault-*` staging directories and owned `userdata-*` instance profiles
|
|
367
|
+
* older than {@link leftoverMaxAgeInMilliseconds}. A run killed mid-flight
|
|
368
|
+
* never reaches its own cleanup, so without this the temp directory grows
|
|
369
|
+
* without bound.
|
|
370
|
+
*
|
|
371
|
+
* @default `true`
|
|
372
|
+
*/
|
|
373
|
+
readonly shouldSweepLeftovers?: boolean;
|
|
317
374
|
/**
|
|
318
375
|
* Whether an **unrunnable** installer↔app version pair fails fast before launch.
|
|
319
376
|
*
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var version_matrix_exports = {};
|
|
20
|
+
__export(version_matrix_exports, {
|
|
21
|
+
DEFAULT_OBSIDIAN_VERSION_SPECS: () => DEFAULT_OBSIDIAN_VERSION_SPECS,
|
|
22
|
+
buildVersionMatrix: () => buildVersionMatrix,
|
|
23
|
+
formatVersionMatrixEntry: () => formatVersionMatrixEntry,
|
|
24
|
+
formatVersionMatrixPlan: () => formatVersionMatrixPlan,
|
|
25
|
+
formatVersionMatrixRunHeader: () => formatVersionMatrixRunHeader,
|
|
26
|
+
hasChannelSpec: () => hasChannelSpec,
|
|
27
|
+
parseVersionSpecList: () => parseVersionSpecList,
|
|
28
|
+
resolveRequestedSpecs: () => resolveRequestedSpecs,
|
|
29
|
+
resolveVersionSpecs: () => resolveVersionSpecs,
|
|
30
|
+
runVersionMatrixEntries: () => runVersionMatrixEntries
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(version_matrix_exports);
|
|
33
|
+
var import_obsidian_version = require("./obsidian-version.cjs");
|
|
34
|
+
const DEFAULT_OBSIDIAN_VERSION_SPECS = [import_obsidian_version.PUBLIC_LATEST, import_obsidian_version.CATALYST_LATEST];
|
|
35
|
+
function buildVersionMatrix(resolvedSpecs) {
|
|
36
|
+
const specsByVersion = /* @__PURE__ */ new Map();
|
|
37
|
+
for (const { spec, version } of resolvedSpecs) {
|
|
38
|
+
const specs = specsByVersion.get(version);
|
|
39
|
+
if (!specs) {
|
|
40
|
+
specsByVersion.set(version, [spec]);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (!specs.includes(spec)) {
|
|
44
|
+
specs.push(spec);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return [...specsByVersion].map(([version, specs]) => ({ specs, version }));
|
|
48
|
+
}
|
|
49
|
+
function formatVersionMatrixEntry(entry) {
|
|
50
|
+
const { specs, version } = entry;
|
|
51
|
+
const aliasSpecs = specs.filter((spec) => spec !== version);
|
|
52
|
+
if (aliasSpecs.length === 0) {
|
|
53
|
+
return version;
|
|
54
|
+
}
|
|
55
|
+
return `${version} (${aliasSpecs.join(", ")})`;
|
|
56
|
+
}
|
|
57
|
+
function formatVersionMatrixPlan(params) {
|
|
58
|
+
const { entries, resolvedSpecs } = params;
|
|
59
|
+
const lines = resolvedSpecs.filter(({ spec, version }) => spec !== version).map(({ spec, version }) => `${spec} -> ${version}`);
|
|
60
|
+
const specifierCount = resolvedSpecs.length;
|
|
61
|
+
const versionCount = entries.length;
|
|
62
|
+
const formattedEntries = entries.map((entry) => formatVersionMatrixEntry(entry)).join(", ");
|
|
63
|
+
lines.push(
|
|
64
|
+
`${String(specifierCount)} requested ${pluralize(specifierCount, "specifier")} ${resolveVerb(specifierCount)} to ${String(versionCount)} distinct ${pluralize(versionCount, "version")}: ${formattedEntries}. Running the suites ${formatRunCount(versionCount)}.`
|
|
65
|
+
);
|
|
66
|
+
return lines;
|
|
67
|
+
}
|
|
68
|
+
function formatVersionMatrixRunHeader(params) {
|
|
69
|
+
const { entry, index, total } = params;
|
|
70
|
+
return `Run ${String(index + 1)} of ${String(total)}: ${formatVersionMatrixEntry(entry)}`;
|
|
71
|
+
}
|
|
72
|
+
function hasChannelSpec(specs) {
|
|
73
|
+
return specs.some((spec) => spec === import_obsidian_version.PUBLIC_LATEST || spec === import_obsidian_version.CATALYST_LATEST);
|
|
74
|
+
}
|
|
75
|
+
function parseVersionSpecList(raw) {
|
|
76
|
+
return raw.split(",").map((spec) => spec.trim()).filter((spec) => spec !== "");
|
|
77
|
+
}
|
|
78
|
+
function resolveRequestedSpecs(versions) {
|
|
79
|
+
const specs = typeof versions === "string" ? parseVersionSpecList(versions) : [...versions ?? []];
|
|
80
|
+
if (specs.length === 0) {
|
|
81
|
+
return { isDefault: true, specs: [...DEFAULT_OBSIDIAN_VERSION_SPECS] };
|
|
82
|
+
}
|
|
83
|
+
return { isDefault: false, specs };
|
|
84
|
+
}
|
|
85
|
+
function resolveVersionSpecs(params) {
|
|
86
|
+
const { manifest, shouldTolerateUnresolvableSpecs, specs } = params;
|
|
87
|
+
const droppedSpecs = [];
|
|
88
|
+
const resolvedSpecs = [];
|
|
89
|
+
for (const spec of specs) {
|
|
90
|
+
try {
|
|
91
|
+
resolvedSpecs.push({ spec, version: resolveSpec(spec, manifest) });
|
|
92
|
+
} catch (error) {
|
|
93
|
+
if (!shouldTolerateUnresolvableSpecs) {
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
droppedSpecs.push({ reason: toReason(error), spec });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (resolvedSpecs.length === 0) {
|
|
100
|
+
throw new Error(
|
|
101
|
+
`No Obsidian version could be resolved from: ${specs.join(", ")}. ${droppedSpecs.map(({ reason, spec }) => `${spec}: ${reason}`).join("; ")}`
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
return { droppedSpecs, resolvedSpecs };
|
|
105
|
+
}
|
|
106
|
+
async function runVersionMatrixEntries(params) {
|
|
107
|
+
const { entries, onEntryStart, run } = params;
|
|
108
|
+
if (entries.length === 0) {
|
|
109
|
+
throw new Error("Refusing to run an empty Obsidian version matrix: no version would be verified.");
|
|
110
|
+
}
|
|
111
|
+
const errors = [];
|
|
112
|
+
const failedEntries = [];
|
|
113
|
+
const passedEntries = [];
|
|
114
|
+
for (const [index, entry] of entries.entries()) {
|
|
115
|
+
onEntryStart({ entry, index, total: entries.length });
|
|
116
|
+
try {
|
|
117
|
+
await run(entry);
|
|
118
|
+
passedEntries.push(entry);
|
|
119
|
+
} catch (error) {
|
|
120
|
+
errors.push(error);
|
|
121
|
+
failedEntries.push(entry);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (failedEntries.length === 0) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const passedClause = passedEntries.length === 0 ? "" : ` Passed: ${passedEntries.map((entry) => formatVersionMatrixEntry(entry)).join(", ")}.`;
|
|
128
|
+
throw new AggregateError(
|
|
129
|
+
errors,
|
|
130
|
+
`Obsidian version matrix failed on ${String(failedEntries.length)} of ${String(entries.length)} ${pluralize(entries.length, "version")}: ${failedEntries.map((entry) => formatVersionMatrixEntry(entry)).join(", ")}.${passedClause}`
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
function formatRunCount(count) {
|
|
134
|
+
const TWICE = 2;
|
|
135
|
+
if (count === 1) {
|
|
136
|
+
return "once";
|
|
137
|
+
}
|
|
138
|
+
if (count === TWICE) {
|
|
139
|
+
return "twice";
|
|
140
|
+
}
|
|
141
|
+
return `${String(count)} times`;
|
|
142
|
+
}
|
|
143
|
+
function pluralize(count, noun) {
|
|
144
|
+
return count === 1 ? noun : `${noun}s`;
|
|
145
|
+
}
|
|
146
|
+
function resolveSpec(spec, manifest) {
|
|
147
|
+
const parsed = (0, import_obsidian_version.parseVersionSpec)(spec);
|
|
148
|
+
if (parsed.kind === "explicit") {
|
|
149
|
+
return parsed.version;
|
|
150
|
+
}
|
|
151
|
+
if (!manifest) {
|
|
152
|
+
throw new Error(`Cannot resolve "${spec}" without the desktop releases manifest.`);
|
|
153
|
+
}
|
|
154
|
+
return (0, import_obsidian_version.resolveVersionFromManifest)(manifest, parsed.channel);
|
|
155
|
+
}
|
|
156
|
+
function resolveVerb(count) {
|
|
157
|
+
return count === 1 ? "resolves" : "resolve";
|
|
158
|
+
}
|
|
159
|
+
function toReason(error) {
|
|
160
|
+
return error instanceof Error ? error.message : String(error);
|
|
161
|
+
}
|
|
162
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
163
|
+
0 && (module.exports = {
|
|
164
|
+
DEFAULT_OBSIDIAN_VERSION_SPECS,
|
|
165
|
+
buildVersionMatrix,
|
|
166
|
+
formatVersionMatrixEntry,
|
|
167
|
+
formatVersionMatrixPlan,
|
|
168
|
+
formatVersionMatrixRunHeader,
|
|
169
|
+
hasChannelSpec,
|
|
170
|
+
parseVersionSpecList,
|
|
171
|
+
resolveRequestedSpecs,
|
|
172
|
+
resolveVersionSpecs,
|
|
173
|
+
runVersionMatrixEntries
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZlcnNpb24tbWF0cml4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBkZWNpc2lvbiBsYXllciBmb3IgcnVubmluZyBhIHN1aXRlIGFnYWluc3QgKipldmVyeSoqIHN1cHBvcnRlZCBPYnNpZGlhblxuICogdmVyc2lvbi5cbiAqXG4gKiBTdXBwb3J0IGlzIHRoZSByYW5nZSBgW2xhdGVzdCBwdWJsaWMsIGxhdGVzdCBjYXRhbHlzdF1gIGFuZCBib3RoIGVuZHMgbXVzdCBiZVxuICogdmVyaWZpZWQgKEc5OSkuIFRoZSB0d28gZW5kcyBhcmUgbW92aW5nIHRhcmdldHMsIGFuZCB0aGV5IHBlcmlvZGljYWxseVxuICogKipjb2luY2lkZSoqIFx1MjAxNCB3aGVuIHB1YmxpYyBjYXRjaGVzIHVwIHRvIGNhdGFseXN0LCBib3RoIHNwZWNpZmllcnMgcHJvdmlzaW9uXG4gKiB0aGUgc2FtZSBidWlsZCwgc28gcnVubmluZyB0aGUgc3VpdGVzIHR3aWNlIHJlLXJ1bnMgdGhlIHNhbWUgYnVpbGQgYW5kIGJ1eXNcbiAqIG5vdGhpbmcuIFdvcnNlLCBhIGNvbnN1bWVyIHRoYXQgcmFuIGJvdGggc3RpbGwgcmVwb3J0cyBcImdyZWVuIG9uIHB1YmxpYyBBTkRcbiAqIGNhdGFseXN0XCIsIGEgdHdvLWVuZCBjbGFpbSBpdCBuZXZlciB2ZXJpZmllZC5cbiAqXG4gKiBUaGUgZGVjaXNpb24gdGhlcmVmb3JlIGxpdmVzIGhlcmUgcmF0aGVyIHRoYW4gaW4gZXZlcnkgY29uc3VtaW5nIHJlcG86IGEgbGlzdFxuICogb2YgdmVyc2lvbiBzcGVjaWZpZXJzIGlzIHJlc29sdmVkIHRvIGNvbmNyZXRlIHZlcnNpb25zLCAqKmRlLWR1cGxpY2F0ZWQgb24gdGhlXG4gKiByZXNvbHZlZCB2ZXJzaW9uKiogKG5ldmVyIG9uIHRoZSBzcGVjaWZpZXIgc3RyaW5nLCBzbyBhbiBleHBsaWNpdCBgMS4xMy40YCBhbmRcbiAqIGBjYXRhbHlzdC1sYXRlc3RgIGNvbGxhcHNlIHdoZW4gY2F0YWx5c3QgKmlzKiAxLjEzLjQpLCBhbmQgdGhlIHN1aXRlcyBydW4gb25jZVxuICogcGVyIGRpc3RpbmN0IHZlcnNpb24uXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIHB1cmUgYW5kIHVuaXQtdGVzdGVkOyB0aGUgbWFuaWZlc3QgZmV0Y2ggYW5kIHRoZSBsb2dnaW5nXG4gKiBsaXZlIGluIHRoZSBpbnRlZ3JhdGlvbi10aW1lIGBydW4tdmVyc2lvbi1tYXRyaXgudHNgIGdsdWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuXG5pbXBvcnQge1xuICBDQVRBTFlTVF9MQVRFU1QsXG4gIHBhcnNlVmVyc2lvblNwZWMsXG4gIFBVQkxJQ19MQVRFU1QsXG4gIHJlc29sdmVWZXJzaW9uRnJvbU1hbmlmZXN0XG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIHNwZWNpZmllcnMgYSBtYXRyaXggcnVuIGRlZmF1bHRzIHRvOiBib3RoIGVuZHMgb2YgdGhlIHN1cHBvcnRlZFxuICogcmFuZ2UgKEc5OSkuIFRoZXkgYXJlIGRlLWR1cGxpY2F0ZWQgb24gdGhlaXIgcmVzb2x2ZWQgdmVyc2lvbnMsIHNvIHdoZW4gcHVibGljXG4gKiBoYXMgY2F1Z2h0IHVwIHRvIGNhdGFseXN0IHRoaXMgeWllbGRzIGEgc2luZ2xlIHJ1bi5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbUFVCTElDX0xBVEVTVCwgQ0FUQUxZU1RfTEFURVNUXTtcblxuLyoqXG4gKiBBIHJlcXVlc3RlZCBzcGVjaWZpZXIgdGhhdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgYW5kIHdhcyBkcm9wcGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3BwZWRWZXJzaW9uU3BlYyB7XG4gIC8qKiBXaHkgdGhlIHNwZWNpZmllciBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuICovXG4gIHJlYWRvbmx5IHJlYXNvbjogc3RyaW5nO1xuXG4gIC8qKiBUaGUgc3BlY2lmaWVyIGFzIHJlcXVlc3RlZC4gKi9cbiAgcmVhZG9ubHkgc3BlYzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmb3JtYXRWZXJzaW9uTWF0cml4UGxhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0VmVyc2lvbk1hdHJpeFBsYW5QYXJhbXMge1xuICAvKiogVGhlIGRlLWR1cGxpY2F0ZWQgbWF0cml4IHRoYXQgd2lsbCBiZSBydW4uICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W107XG5cbiAgLyoqIFRoZSBzcGVjaWZpZXJzIHRoYXQgcmVzb2x2ZWQsIGluIHJlcXVlc3RlZCBvcmRlci4gKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRTcGVjczogcmVhZG9ubHkgUmVzb2x2ZWRWZXJzaW9uU3BlY1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmb3JtYXRWZXJzaW9uTWF0cml4UnVuSGVhZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXRWZXJzaW9uTWF0cml4UnVuSGVhZGVyUGFyYW1zIHtcbiAgLyoqIFRoZSBlbnRyeSBhYm91dCB0byBydW4uICovXG4gIHJlYWRvbmx5IGVudHJ5OiBPYnNpZGlhblZlcnNpb25NYXRyaXhFbnRyeTtcblxuICAvKiogVGhlIGVudHJ5J3MgemVyby1iYXNlZCBwb3NpdGlvbiBpbiB0aGUgbWF0cml4LiAqL1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuXG4gIC8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hdHJpeC4gKi9cbiAgcmVhZG9ubHkgdG90YWw6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPbmUgZGlzdGluY3QgT2JzaWRpYW4gdmVyc2lvbiB0aGUgc3VpdGVzIHdpbGwgcnVuIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkge1xuICAvKipcbiAgICogRXZlcnkgcmVxdWVzdGVkIHNwZWNpZmllciB0aGF0IHJlc29sdmVkIHRvIHtAbGluayB2ZXJzaW9ufSwgaW4gcmVxdWVzdGVkXG4gICAqIG9yZGVyLiBNb3JlIHRoYW4gb25lIG1lYW5zIHRoZSBzcGVjaWZpZXJzIGNvaW5jaWRlZCBhbmQgd2VyZSBjb2xsYXBzZWQuXG4gICAqL1xuICByZWFkb25seSBzcGVjczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIFRoZSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJlcXVlc3RlZCBzcGVjaWZpZXIgcGFpcmVkIHdpdGggdGhlIGNvbmNyZXRlIHZlcnNpb24gaXQgcmVzb2x2ZWQgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRWZXJzaW9uU3BlYyB7XG4gIC8qKiBUaGUgc3BlY2lmaWVyIGFzIHJlcXVlc3RlZCAoYW4gYHgueS56YCB2ZXJzaW9uIG9yIGEgY2hhbm5lbCBhbGlhcykuICovXG4gIHJlYWRvbmx5IHNwZWM6IHN0cmluZztcblxuICAvKiogVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbiBpdCByZXNvbHZlZCB0by4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIHtAbGluayByZXNvbHZlUmVxdWVzdGVkU3BlY3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVSZXF1ZXN0ZWRTcGVjc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzcGVjaWZpZXJzIGNhbWUgZnJvbSB7QGxpbmsgREVGQVVMVF9PQlNJRElBTl9WRVJTSU9OX1NQRUNTfVxuICAgKiByYXRoZXIgdGhhbiBiZWluZyBleHBsaWNpdGx5IHJlcXVlc3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzRGVmYXVsdDogYm9vbGVhbjtcblxuICAvKiogVGhlIHNwZWNpZmllcnMgdG8gcmVzb2x2ZSwgaW4gb3JkZXIuICovXG4gIHJlYWRvbmx5IHNwZWNzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZVZlcnNpb25TcGVjc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVZlcnNpb25TcGVjc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZGVza3RvcCByZWxlYXNlcyBtYW5pZmVzdCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBubyByZXF1ZXN0ZWQgc3BlY2lmaWVyIGlzXG4gICAqIGEgY2hhbm5lbCBhbGlhcyAoc28gbm8gZmV0Y2ggd2FzIG5lZWRlZCkuXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdDogRGVza3RvcFJlbGVhc2VzTWFuaWZlc3QgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBzcGVjaWZpZXIgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgaXMgZHJvcHBlZCB3aXRoIGEgcmVjb3JkZWRcbiAgICogcmVhc29uIGluc3RlYWQgb2YgdGhyb3dpbmcuIFNldCBmb3IgdGhlICoqZGVmYXVsdCoqIHNwZWNpZmllciBsaXN0IG9ubHk6IGFcbiAgICogbWFuaWZlc3QgdGhhdCBzaGlwcyBubyBjYXRhbHlzdCBlbnRyeSBtdXN0IG5vdCBicmVhayBldmVyeSBjb25zdW1lcidzIGdhdGUsXG4gICAqIHdoZXJlYXMgYW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgc3BlY2lmaWVyIHRoYXQgY2Fubm90IHJlc29sdmUgaXMgYSByZWFsXG4gICAqIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVG9sZXJhdGVVbnJlc29sdmFibGVTcGVjczogYm9vbGVhbjtcblxuICAvKiogVGhlIHJlcXVlc3RlZCBzcGVjaWZpZXJzLCBpbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIHtAbGluayByZXNvbHZlVmVyc2lvblNwZWNzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlVmVyc2lvblNwZWNzUmVzdWx0IHtcbiAgLyoqIFNwZWNpZmllcnMgZHJvcHBlZCBiZWNhdXNlIHRoZXkgY291bGQgbm90IGJlIHJlc29sdmVkICh0b2xlcmFudCBtb2RlIG9ubHkpLiAqL1xuICByZWFkb25seSBkcm9wcGVkU3BlY3M6IHJlYWRvbmx5IERyb3BwZWRWZXJzaW9uU3BlY1tdO1xuXG4gIC8qKiBUaGUgc3BlY2lmaWVycyB0aGF0IHJlc29sdmVkLCBpbiByZXF1ZXN0ZWQgb3JkZXIuICovXG4gIHJlYWRvbmx5IHJlc29sdmVkU3BlY3M6IHJlYWRvbmx5IFJlc29sdmVkVmVyc2lvblNwZWNbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcnVuVmVyc2lvbk1hdHJpeEVudHJpZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blZlcnNpb25NYXRyaXhFbnRyaWVzUGFyYW1zIHtcbiAgLyoqIFRoZSBkZS1kdXBsaWNhdGVkIG1hdHJpeCB0byBydW4uICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W107XG5cbiAgLyoqIENhbGxlZCBqdXN0IGJlZm9yZSBlYWNoIGVudHJ5IHJ1bnMsIGZvciBwcm9ncmVzcyByZXBvcnRpbmcuICovXG4gIHJlYWRvbmx5IG9uRW50cnlTdGFydDogKHBhcmFtczogRm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlclBhcmFtcykgPT4gdm9pZDtcblxuICAvKiogUnVucyB0aGUgc3VpdGVzIGFnYWluc3QgYSBzaW5nbGUgZW50cnksIHRocm93aW5nIG9uIGZhaWx1cmUuICovXG4gIHJlYWRvbmx5IHJ1bjogKGVudHJ5OiBPYnNpZGlhblZlcnNpb25NYXRyaXhFbnRyeSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8qKlxuICogQ29sbGFwc2VzIHJlc29sdmVkIHNwZWNpZmllcnMgaW50byBvbmUgZW50cnkgcGVyICoqZGlzdGluY3QgcmVzb2x2ZWQgdmVyc2lvbioqLlxuICpcbiAqIERlLWR1cGxpY2F0aW9uIGlzIGtleWVkIG9uIHRoZSByZXNvbHZlZCB2ZXJzaW9uLCBub3QgdGhlIHNwZWNpZmllciBzdHJpbmcsIHNvXG4gKiBzcGVjaWZpZXJzIHRoYXQgbmFtZSB0aGUgc2FtZSBidWlsZCBjb2xsYXBzZSBob3dldmVyIHRoZXkgd2VyZSB3cml0dGVuLlxuICogRmlyc3Qtc2VlbiBvcmRlciBpcyBwcmVzZXJ2ZWQsIGFuZCBldmVyeSBzcGVjaWZpZXIgdGhhdCBsYW5kZWQgb24gYSB2ZXJzaW9uIGlzXG4gKiByZWNvcmRlZCBvbiBpdHMgZW50cnkuXG4gKlxuICogQHBhcmFtIHJlc29sdmVkU3BlY3MgLSBUaGUgcmVzb2x2ZWQgc3BlY2lmaWVycywgaW4gcmVxdWVzdGVkIG9yZGVyLlxuICogQHJldHVybnMgT25lIGVudHJ5IHBlciBkaXN0aW5jdCB2ZXJzaW9uLCBpbiBmaXJzdC1zZWVuIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRWZXJzaW9uTWF0cml4KHJlc29sdmVkU3BlY3M6IHJlYWRvbmx5IFJlc29sdmVkVmVyc2lvblNwZWNbXSk6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W10ge1xuICBjb25zdCBzcGVjc0J5VmVyc2lvbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcblxuICBmb3IgKGNvbnN0IHsgc3BlYywgdmVyc2lvbiB9IG9mIHJlc29sdmVkU3BlY3MpIHtcbiAgICBjb25zdCBzcGVjcyA9IHNwZWNzQnlWZXJzaW9uLmdldCh2ZXJzaW9uKTtcbiAgICBpZiAoIXNwZWNzKSB7XG4gICAgICBzcGVjc0J5VmVyc2lvbi5zZXQodmVyc2lvbiwgW3NwZWNdKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIXNwZWNzLmluY2x1ZGVzKHNwZWMpKSB7XG4gICAgICBzcGVjcy5wdXNoKHNwZWMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4uc3BlY3NCeVZlcnNpb25dLm1hcCgoW3ZlcnNpb24sIHNwZWNzXSkgPT4gKHsgc3BlY3MsIHZlcnNpb24gfSkpO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYW4gZW50cnkgZm9yIGxvZ3MgYW5kIGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIFNwZWNpZmllcnMgdGhhdCBtZXJlbHkgcmVwZWF0IHRoZSB2ZXJzaW9uIGFkZCBub3RoaW5nLCBzbyBhbiBleHBsaWNpdC1vbmx5XG4gKiBlbnRyeSBmb3JtYXRzIGFzIHRoZSBiYXJlIHZlcnNpb24gcmF0aGVyIHRoYW4gYDEuMTMuNCAoMS4xMy40KWAuXG4gKlxuICogQHBhcmFtIGVudHJ5IC0gVGhlIGVudHJ5IHRvIGZvcm1hdC5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIGxpa2UgYDEuMTMuNCAocHVibGljLWxhdGVzdCwgY2F0YWx5c3QtbGF0ZXN0KWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWZXJzaW9uTWF0cml4RW50cnkoZW50cnk6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5KTogc3RyaW5nIHtcbiAgY29uc3QgeyBzcGVjcywgdmVyc2lvbiB9ID0gZW50cnk7XG4gIGNvbnN0IGFsaWFzU3BlY3MgPSBzcGVjcy5maWx0ZXIoKHNwZWMpID0+IHNwZWMgIT09IHZlcnNpb24pO1xuICBpZiAoYWxpYXNTcGVjcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdmVyc2lvbjtcbiAgfVxuICByZXR1cm4gYCR7dmVyc2lvbn0gKCR7YWxpYXNTcGVjcy5qb2luKCcsICcpfSlgO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbGluZXMgYW5ub3VuY2luZyB3aGF0IHRoZSBtYXRyaXggcmVzb2x2ZWQgdG8gYW5kIGhvdyBtYW55IHJ1bnMgaXRcbiAqIHdpbGwgdGFrZS5cbiAqXG4gKiBUaGUgY29sbGFwc2UgbXVzdCBiZSAqKnN0YXRlZCoqLCBuZXZlciBpbmZlcnJlZDogYSByZWFkZXIgd2hvIHNlZXMgb25lIHJ1blxuICogd2hlcmUgdGhleSBleHBlY3RlZCB0d28gaGFzIHRvIGJlIHRvbGQgdGhlIHNlY29uZCBlbmQgd2FzIGFscmVhZHkgY292ZXJlZCxcbiAqIG5vdCBsZWZ0IHdvbmRlcmluZyB3aGV0aGVyIGl0IHdhcyBza2lwcGVkIGJ5IGFjY2lkZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbWF0cml4IGFuZCB0aGUgc3BlY2lmaWVycyBpdCB3YXMgYnVpbHQgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBsaW5lcyB0byBsb2csIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VmVyc2lvbk1hdHJpeFBsYW4ocGFyYW1zOiBGb3JtYXRWZXJzaW9uTWF0cml4UGxhblBhcmFtcyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgeyBlbnRyaWVzLCByZXNvbHZlZFNwZWNzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbGluZXMgPSByZXNvbHZlZFNwZWNzXG4gICAgLmZpbHRlcigoeyBzcGVjLCB2ZXJzaW9uIH0pID0+IHNwZWMgIT09IHZlcnNpb24pXG4gICAgLm1hcCgoeyBzcGVjLCB2ZXJzaW9uIH0pID0+IGAke3NwZWN9IC0+ICR7dmVyc2lvbn1gKTtcblxuICBjb25zdCBzcGVjaWZpZXJDb3VudCA9IHJlc29sdmVkU3BlY3MubGVuZ3RoO1xuICBjb25zdCB2ZXJzaW9uQ291bnQgPSBlbnRyaWVzLmxlbmd0aDtcbiAgY29uc3QgZm9ybWF0dGVkRW50cmllcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gZm9ybWF0VmVyc2lvbk1hdHJpeEVudHJ5KGVudHJ5KSkuam9pbignLCAnKTtcblxuICBsaW5lcy5wdXNoKFxuICAgIGAke1N0cmluZyhzcGVjaWZpZXJDb3VudCl9IHJlcXVlc3RlZCAke3BsdXJhbGl6ZShzcGVjaWZpZXJDb3VudCwgJ3NwZWNpZmllcicpfSBgXG4gICAgICArIGAke3Jlc29sdmVWZXJiKHNwZWNpZmllckNvdW50KX0gdG8gJHtTdHJpbmcodmVyc2lvbkNvdW50KX0gZGlzdGluY3QgJHtwbHVyYWxpemUodmVyc2lvbkNvdW50LCAndmVyc2lvbicpfTogYFxuICAgICAgKyBgJHtmb3JtYXR0ZWRFbnRyaWVzfS4gUnVubmluZyB0aGUgc3VpdGVzICR7Zm9ybWF0UnVuQ291bnQodmVyc2lvbkNvdW50KX0uYFxuICApO1xuXG4gIHJldHVybiBsaW5lcztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHByb2dyZXNzIGxpbmUgYW5ub3VuY2luZyBhIHNpbmdsZSBlbnRyeSdzIHJ1bi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVudHJ5IGFuZCBpdHMgcG9zaXRpb24gaW4gdGhlIG1hdHJpeC5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIGxpa2UgYFJ1biAxIG9mIDI6IDEuMTIuNyAocHVibGljLWxhdGVzdClgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlcihwYXJhbXM6IEZvcm1hdFZlcnNpb25NYXRyaXhSdW5IZWFkZXJQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGVudHJ5LCBpbmRleCwgdG90YWwgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGBSdW4gJHtTdHJpbmcoaW5kZXggKyAxKX0gb2YgJHtTdHJpbmcodG90YWwpfTogJHtmb3JtYXRWZXJzaW9uTWF0cml4RW50cnkoZW50cnkpfWA7XG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGFueSBzcGVjaWZpZXIgaXMgYSBjaGFubmVsIGFsaWFzLCBpLmUuIHdoZXRoZXIgdGhlIHJlbGVhc2VzXG4gKiBtYW5pZmVzdCBoYXMgdG8gYmUgZmV0Y2hlZCBhdCBhbGwuXG4gKlxuICogQHBhcmFtIHNwZWNzIC0gVGhlIHJlcXVlc3RlZCBzcGVjaWZpZXJzLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gYXQgbGVhc3Qgb25lIHNwZWNpZmllciByZXNvbHZlcyBhZ2FpbnN0IHRoZSBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0NoYW5uZWxTcGVjKHNwZWNzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3BlY3Muc29tZSgoc3BlYykgPT4gc3BlYyA9PT0gUFVCTElDX0xBVEVTVCB8fCBzcGVjID09PSBDQVRBTFlTVF9MQVRFU1QpO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGNvbW1hLXNlcGFyYXRlZCBzcGVjaWZpZXIgbGlzdCwgc28gYSBjb25zdW1lciBjYW4gaGFuZCBhbiBlbnYgdmFyXG4gKiAoYE9CU0lESUFOX1ZFUlNJT049MS4xMi43LGNhdGFseXN0LWxhdGVzdGApIHN0cmFpZ2h0IHRocm91Z2guXG4gKlxuICogQHBhcmFtIHJhdyAtIFRoZSByYXcgY29tbWEtc2VwYXJhdGVkIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSB0cmltbWVkLCBub24tZW1wdHkgc3BlY2lmaWVycywgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZlcnNpb25TcGVjTGlzdChyYXc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHJhdy5zcGxpdCgnLCcpLm1hcCgoc3BlYykgPT4gc3BlYy50cmltKCkpLmZpbHRlcigoc3BlYykgPT4gc3BlYyAhPT0gJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIHJlcXVlc3RlZCB2ZXJzaW9uIHNwZWNpZmllcnMsIGZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdFxuICogYm90aC1lbmRzIGxpc3Qgd2hlbiBub25lIHdlcmUgZ2l2ZW4uXG4gKlxuICogQW4gZW1wdHkgc3RyaW5nIGlzIHRyZWF0ZWQgYXMgYWJzZW50LCBzbyBhIGNvbnN1bWVyIGNhbiBwYXNzIGFuIHVuc2V0XG4gKiBgcHJvY2Vzcy5lbnZbJ09CU0lESUFOX1ZFUlNJT04nXWAgd2l0aG91dCBndWFyZGluZyBpdC5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbnMgLSBBbiBhcnJheSBvZiBzcGVjaWZpZXJzLCBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcsIG9yIGB1bmRlZmluZWRgLlxuICogQHJldHVybnMgVGhlIHNwZWNpZmllcnMgdG8gcmVzb2x2ZSwgYW5kIHdoZXRoZXIgdGhleSBjYW1lIGZyb20gdGhlIGRlZmF1bHQgbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZXF1ZXN0ZWRTcGVjcyh2ZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBSZXNvbHZlUmVxdWVzdGVkU3BlY3NSZXN1bHQge1xuICBjb25zdCBzcGVjcyA9IHR5cGVvZiB2ZXJzaW9ucyA9PT0gJ3N0cmluZycgPyBwYXJzZVZlcnNpb25TcGVjTGlzdCh2ZXJzaW9ucykgOiBbLi4udmVyc2lvbnMgPz8gW11dO1xuICBpZiAoc3BlY3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgaXNEZWZhdWx0OiB0cnVlLCBzcGVjczogWy4uLkRFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDU10gfTtcbiAgfVxuICByZXR1cm4geyBpc0RlZmF1bHQ6IGZhbHNlLCBzcGVjcyB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGVhY2ggcmVxdWVzdGVkIHNwZWNpZmllciB0byBhIGNvbmNyZXRlIHZlcnNpb24gYWdhaW5zdCBhXG4gKiBzaW5nbGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzcGVjaWZpZXJzLCB0aGUgbWFuaWZlc3QsIGFuZCB0aGUgdG9sZXJhbmNlIG1vZGUuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgc3BlY2lmaWVycyBhbmQgYW55IHRoYXQgd2VyZSBkcm9wcGVkLlxuICogQHRocm93cyBFcnJvciBpZiBhIHNwZWNpZmllciBjYW5ub3QgYmUgcmVzb2x2ZWQgYW5kIHRvbGVyYW5jZSBpcyBvZmYsIG9yIGlmXG4gKiAgIHRvbGVyYW5jZSBpcyBvbiBidXQgbm90aGluZyByZXNvbHZlZCBhdCBhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVmVyc2lvblNwZWNzKHBhcmFtczogUmVzb2x2ZVZlcnNpb25TcGVjc1BhcmFtcyk6IFJlc29sdmVWZXJzaW9uU3BlY3NSZXN1bHQge1xuICBjb25zdCB7IG1hbmlmZXN0LCBzaG91bGRUb2xlcmF0ZVVucmVzb2x2YWJsZVNwZWNzLCBzcGVjcyB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGRyb3BwZWRTcGVjczogRHJvcHBlZFZlcnNpb25TcGVjW10gPSBbXTtcbiAgY29uc3QgcmVzb2x2ZWRTcGVjczogUmVzb2x2ZWRWZXJzaW9uU3BlY1tdID0gW107XG5cbiAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkU3BlY3MucHVzaCh7IHNwZWMsIHZlcnNpb246IHJlc29sdmVTcGVjKHNwZWMsIG1hbmlmZXN0KSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFzaG91bGRUb2xlcmF0ZVVucmVzb2x2YWJsZVNwZWNzKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgZHJvcHBlZFNwZWNzLnB1c2goeyByZWFzb246IHRvUmVhc29uKGVycm9yKSwgc3BlYyB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVzb2x2ZWRTcGVjcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTm8gT2JzaWRpYW4gdmVyc2lvbiBjb3VsZCBiZSByZXNvbHZlZCBmcm9tOiAke3NwZWNzLmpvaW4oJywgJyl9LiAke2Ryb3BwZWRTcGVjcy5tYXAoKHsgcmVhc29uLCBzcGVjIH0pID0+IGAke3NwZWN9OiAke3JlYXNvbn1gKS5qb2luKCc7ICcpfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHsgZHJvcHBlZFNwZWNzLCByZXNvbHZlZFNwZWNzIH07XG59XG5cbi8qKlxuICogUnVucyB0aGUgc3VpdGVzIG9uY2UgcGVyIG1hdHJpeCBlbnRyeSwgKiphbHdheXMgcnVubmluZyBldmVyeSBlbnRyeSoqIGJlZm9yZVxuICogcmVwb3J0aW5nLlxuICpcbiAqIEEgZmFpbGluZyBlbmQgbXVzdCBub3QgaGlkZSB0aGUgc3RhdGUgb2YgdGhlIG90aGVyOiBzdG9wcGluZyBhdCB0aGUgZmlyc3RcbiAqIGZhaWx1cmUgd291bGQgbGVhdmUgXCJjYXRhbHlzdCBicm9rZVwiIGFuZCBcImJvdGggZW5kcyBicm9rZVwiIGluZGlzdGluZ3Vpc2hhYmxlXG4gKiB3aXRob3V0IGEgc2Vjb25kIHJ1bi4gRXZlcnkgZW50cnkgdGhlcmVmb3JlIHJ1bnMsIGFuZCB0aGUgc3VtbWFyeSBuYW1lcyB3aGljaFxuICogY29uY3JldGUgdmVyc2lvbnMgZmFpbGVkIGFuZCB3aGljaCBwYXNzZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBtYXRyaXgsIHRoZSBwZXItZW50cnkgcnVubmVyLCBhbmQgdGhlIHByb2dyZXNzIHJlcG9ydGVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGV2ZXJ5IGVudHJ5IGhhcyBydW4gc3VjY2Vzc2Z1bGx5LlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgbWF0cml4IGlzIGVtcHR5LCBvciBhbiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IG5hbWluZyBldmVyeVxuICogICB2ZXJzaW9uIHRoYXQgZmFpbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVmVyc2lvbk1hdHJpeEVudHJpZXMocGFyYW1zOiBSdW5WZXJzaW9uTWF0cml4RW50cmllc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGVudHJpZXMsIG9uRW50cnlTdGFydCwgcnVuIH0gPSBwYXJhbXM7XG5cbiAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWZ1c2luZyB0byBydW4gYW4gZW1wdHkgT2JzaWRpYW4gdmVyc2lvbiBtYXRyaXg6IG5vIHZlcnNpb24gd291bGQgYmUgdmVyaWZpZWQuJyk7XG4gIH1cblxuICBjb25zdCBlcnJvcnM6IHVua25vd25bXSA9IFtdO1xuICBjb25zdCBmYWlsZWRFbnRyaWVzOiBPYnNpZGlhblZlcnNpb25NYXRyaXhFbnRyeVtdID0gW107XG4gIGNvbnN0IHBhc3NlZEVudHJpZXM6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgb25FbnRyeVN0YXJ0KHsgZW50cnksIGluZGV4LCB0b3RhbDogZW50cmllcy5sZW5ndGggfSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bihlbnRyeSk7XG4gICAgICBwYXNzZWRFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgICBmYWlsZWRFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmYWlsZWRFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhc3NlZENsYXVzZSA9IHBhc3NlZEVudHJpZXMubGVuZ3RoID09PSAwXG4gICAgPyAnJ1xuICAgIDogYCBQYXNzZWQ6ICR7cGFzc2VkRW50cmllcy5tYXAoKGVudHJ5KSA9PiBmb3JtYXRWZXJzaW9uTWF0cml4RW50cnkoZW50cnkpKS5qb2luKCcsICcpfS5gO1xuXG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihcbiAgICBlcnJvcnMsXG4gICAgYE9ic2lkaWFuIHZlcnNpb24gbWF0cml4IGZhaWxlZCBvbiAke1N0cmluZyhmYWlsZWRFbnRyaWVzLmxlbmd0aCl9IG9mICR7U3RyaW5nKGVudHJpZXMubGVuZ3RoKX0gYFxuICAgICAgKyBgJHtwbHVyYWxpemUoZW50cmllcy5sZW5ndGgsICd2ZXJzaW9uJyl9OiBgXG4gICAgICArIGAke2ZhaWxlZEVudHJpZXMubWFwKChlbnRyeSkgPT4gZm9ybWF0VmVyc2lvbk1hdHJpeEVudHJ5KGVudHJ5KSkuam9pbignLCAnKX0uJHtwYXNzZWRDbGF1c2V9YFxuICApO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBydW4gY291bnQgYXMgcHJvc2UsIHNvIHRoZSBzaW5nbGUtcnVuIGNhc2UgcmVhZHMgYXMgYSBkZWxpYmVyYXRlXG4gKiBkZWNpc2lvbiByYXRoZXIgdGhhbiBhIHN1c3BpY2lvdXMgYDFgLlxuICpcbiAqIEBwYXJhbSBjb3VudCAtIFRoZSBudW1iZXIgb2YgcnVucy5cbiAqIEByZXR1cm5zIGBvbmNlYCwgYHR3aWNlYCwgb3IgYE4gdGltZXNgLlxuICovXG5mdW5jdGlvbiBmb3JtYXRSdW5Db3VudChjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgVFdJQ0UgPSAyO1xuICBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXR1cm4gJ29uY2UnO1xuICB9XG4gIGlmIChjb3VudCA9PT0gVFdJQ0UpIHtcbiAgICByZXR1cm4gJ3R3aWNlJztcbiAgfVxuICByZXR1cm4gYCR7U3RyaW5nKGNvdW50KX0gdGltZXNgO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6ZXMgYSBub3VuIGJ5IGNvdW50LlxuICpcbiAqIEBwYXJhbSBjb3VudCAtIFRoZSBjb3VudC5cbiAqIEBwYXJhbSBub3VuIC0gVGhlIHNpbmd1bGFyIG5vdW4uXG4gKiBAcmV0dXJucyBUaGUgbm91biwgc3VmZml4ZWQgd2l0aCBgc2AgdW5sZXNzIHRoZSBjb3VudCBpcyBleGFjdGx5IG9uZS5cbiAqL1xuZnVuY3Rpb24gcGx1cmFsaXplKGNvdW50OiBudW1iZXIsIG5vdW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb3VudCA9PT0gMSA/IG5vdW4gOiBgJHtub3VufXNgO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgc2luZ2xlIHNwZWNpZmllciBhZ2FpbnN0IGEgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHNwZWMgLSBUaGUgc3BlY2lmaWVyLlxuICogQHBhcmFtIG1hbmlmZXN0IC0gVGhlIG1hbmlmZXN0LCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vbmUgd2FzIGZldGNoZWQuXG4gKiBAcmV0dXJucyBUaGUgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgc3BlY2lmaWVyIGlzIGludmFsaWQsIG9yIG5hbWVzIGEgY2hhbm5lbCB3aXRoIG5vIG1hbmlmZXN0XG4gKiAgIGVudHJ5LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU3BlYyhzcGVjOiBzdHJpbmcsIG1hbmlmZXN0OiBEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlVmVyc2lvblNwZWMoc3BlYyk7XG4gIGlmIChwYXJzZWQua2luZCA9PT0gJ2V4cGxpY2l0Jykge1xuICAgIHJldHVybiBwYXJzZWQudmVyc2lvbjtcbiAgfVxuICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBcIiR7c3BlY31cIiB3aXRob3V0IHRoZSBkZXNrdG9wIHJlbGVhc2VzIG1hbmlmZXN0LmApO1xuICB9XG4gIHJldHVybiByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdChtYW5pZmVzdCwgcGFyc2VkLmNoYW5uZWwpO1xufVxuXG4vKipcbiAqIENob29zZXMgdGhlIHN1YmplY3QtdmVyYiBhZ3JlZW1lbnQgZm9yIHRoZSBzcGVjaWZpZXIgY291bnQuXG4gKlxuICogQHBhcmFtIGNvdW50IC0gVGhlIG51bWJlciBvZiBzcGVjaWZpZXJzLlxuICogQHJldHVybnMgYHJlc29sdmVzYCBvciBgcmVzb2x2ZWAuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWZXJiKGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gY291bnQgPT09IDEgPyAncmVzb2x2ZXMnIDogJ3Jlc29sdmUnO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgaHVtYW4tcmVhZGFibGUgcmVhc29uIGZyb20gYSB0aHJvd24gdmFsdWUuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIHRocm93biB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSByZWFzb24gdGV4dC5cbiAqL1xuZnVuY3Rpb24gdG9SZWFzb24oZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICAvKiB2OCBpZ25vcmUgbmV4dCAtLSBEZWZlbnNpdmU6IGV2ZXJ5IHRocm93IHNpdGUgcmVhY2hhYmxlIGZyb20gaGVyZSAocGFyc2VWZXJzaW9uU3BlYywgcmVzb2x2ZVZlcnNpb25Gcm9tTWFuaWZlc3QsIHRoZSBtaXNzaW5nLW1hbmlmZXN0IGd1YXJkKSB0aHJvd3MgYW4gRXJyb3IuICovXG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLDhCQUtPO0FBT0EsTUFBTSxpQ0FBb0QsQ0FBQyx1Q0FBZSx1Q0FBZTtBQXdJekYsU0FBUyxtQkFBbUIsZUFBNkU7QUFDOUcsUUFBTSxpQkFBaUIsb0JBQUksSUFBc0I7QUFFakQsYUFBVyxFQUFFLE1BQU0sUUFBUSxLQUFLLGVBQWU7QUFDN0MsVUFBTSxRQUFRLGVBQWUsSUFBSSxPQUFPO0FBQ3hDLFFBQUksQ0FBQyxPQUFPO0FBQ1YscUJBQWUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO0FBQ2xDO0FBQUEsSUFDRjtBQUNBLFFBQUksQ0FBQyxNQUFNLFNBQVMsSUFBSSxHQUFHO0FBQ3pCLFlBQU0sS0FBSyxJQUFJO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBRUEsU0FBTyxD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
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Pure decision layer for running a suite against **every** supported Obsidian
|
|
5
|
+
* version.
|
|
6
|
+
*
|
|
7
|
+
* Support is the range `[latest public, latest catalyst]` and both ends must be
|
|
8
|
+
* verified (G99). The two ends are moving targets, and they periodically
|
|
9
|
+
* **coincide** — when public catches up to catalyst, both specifiers provision
|
|
10
|
+
* the same build, so running the suites twice re-runs the same build and buys
|
|
11
|
+
* nothing. Worse, a consumer that ran both still reports "green on public AND
|
|
12
|
+
* catalyst", a two-end claim it never verified.
|
|
13
|
+
*
|
|
14
|
+
* The decision therefore lives here rather than in every consuming repo: a list
|
|
15
|
+
* of version specifiers is resolved to concrete versions, **de-duplicated on the
|
|
16
|
+
* resolved version** (never on the specifier string, so an explicit `1.13.4` and
|
|
17
|
+
* `catalyst-latest` collapse when catalyst *is* 1.13.4), and the suites run once
|
|
18
|
+
* per distinct version.
|
|
19
|
+
*
|
|
20
|
+
* Everything here is pure and unit-tested; the manifest fetch and the logging
|
|
21
|
+
* live in the integration-time `run-version-matrix.ts` glue.
|
|
22
|
+
*/
|
|
23
|
+
import type { DesktopReleasesManifest } from './obsidian-version.cjs';
|
|
24
|
+
/**
|
|
25
|
+
* The version specifiers a matrix run defaults to: both ends of the supported
|
|
26
|
+
* range (G99). They are de-duplicated on their resolved versions, so when public
|
|
27
|
+
* has caught up to catalyst this yields a single run.
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_OBSIDIAN_VERSION_SPECS: readonly string[];
|
|
30
|
+
/**
|
|
31
|
+
* A requested specifier that could not be resolved and was dropped.
|
|
32
|
+
*/
|
|
33
|
+
export interface DroppedVersionSpec {
|
|
34
|
+
/** Why the specifier could not be resolved. */
|
|
35
|
+
readonly reason: string;
|
|
36
|
+
/** The specifier as requested. */
|
|
37
|
+
readonly spec: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parameters for {@link formatVersionMatrixPlan}.
|
|
41
|
+
*/
|
|
42
|
+
export interface FormatVersionMatrixPlanParams {
|
|
43
|
+
/** The de-duplicated matrix that will be run. */
|
|
44
|
+
readonly entries: readonly ObsidianVersionMatrixEntry[];
|
|
45
|
+
/** The specifiers that resolved, in requested order. */
|
|
46
|
+
readonly resolvedSpecs: readonly ResolvedVersionSpec[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parameters for {@link formatVersionMatrixRunHeader}.
|
|
50
|
+
*/
|
|
51
|
+
export interface FormatVersionMatrixRunHeaderParams {
|
|
52
|
+
/** The entry about to run. */
|
|
53
|
+
readonly entry: ObsidianVersionMatrixEntry;
|
|
54
|
+
/** The entry's zero-based position in the matrix. */
|
|
55
|
+
readonly index: number;
|
|
56
|
+
/** The total number of entries in the matrix. */
|
|
57
|
+
readonly total: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* One distinct Obsidian version the suites will run against.
|
|
61
|
+
*/
|
|
62
|
+
export interface ObsidianVersionMatrixEntry {
|
|
63
|
+
/**
|
|
64
|
+
* Every requested specifier that resolved to {@link version}, in requested
|
|
65
|
+
* order. More than one means the specifiers coincided and were collapsed.
|
|
66
|
+
*/
|
|
67
|
+
readonly specs: readonly string[];
|
|
68
|
+
/** The concrete `x.y.z` version. */
|
|
69
|
+
readonly version: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A requested specifier paired with the concrete version it resolved to.
|
|
73
|
+
*/
|
|
74
|
+
export interface ResolvedVersionSpec {
|
|
75
|
+
/** The specifier as requested (an `x.y.z` version or a channel alias). */
|
|
76
|
+
readonly spec: string;
|
|
77
|
+
/** The concrete `x.y.z` version it resolved to. */
|
|
78
|
+
readonly version: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The outcome of {@link resolveRequestedSpecs}.
|
|
82
|
+
*/
|
|
83
|
+
export interface ResolveRequestedSpecsResult {
|
|
84
|
+
/**
|
|
85
|
+
* Whether the specifiers came from {@link DEFAULT_OBSIDIAN_VERSION_SPECS}
|
|
86
|
+
* rather than being explicitly requested.
|
|
87
|
+
*/
|
|
88
|
+
readonly isDefault: boolean;
|
|
89
|
+
/** The specifiers to resolve, in order. */
|
|
90
|
+
readonly specs: readonly string[];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Parameters for {@link resolveVersionSpecs}.
|
|
94
|
+
*/
|
|
95
|
+
export interface ResolveVersionSpecsParams {
|
|
96
|
+
/**
|
|
97
|
+
* The desktop releases manifest, or `undefined` when no requested specifier is
|
|
98
|
+
* a channel alias (so no fetch was needed).
|
|
99
|
+
*/
|
|
100
|
+
readonly manifest: DesktopReleasesManifest | undefined;
|
|
101
|
+
/**
|
|
102
|
+
* Whether a specifier that cannot be resolved is dropped with a recorded
|
|
103
|
+
* reason instead of throwing. Set for the **default** specifier list only: a
|
|
104
|
+
* manifest that ships no catalyst entry must not break every consumer's gate,
|
|
105
|
+
* whereas an explicitly requested specifier that cannot resolve is a real
|
|
106
|
+
* error.
|
|
107
|
+
*/
|
|
108
|
+
readonly shouldTolerateUnresolvableSpecs: boolean;
|
|
109
|
+
/** The requested specifiers, in order. */
|
|
110
|
+
readonly specs: readonly string[];
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The outcome of {@link resolveVersionSpecs}.
|
|
114
|
+
*/
|
|
115
|
+
export interface ResolveVersionSpecsResult {
|
|
116
|
+
/** Specifiers dropped because they could not be resolved (tolerant mode only). */
|
|
117
|
+
readonly droppedSpecs: readonly DroppedVersionSpec[];
|
|
118
|
+
/** The specifiers that resolved, in requested order. */
|
|
119
|
+
readonly resolvedSpecs: readonly ResolvedVersionSpec[];
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Parameters for {@link runVersionMatrixEntries}.
|
|
123
|
+
*/
|
|
124
|
+
export interface RunVersionMatrixEntriesParams {
|
|
125
|
+
/** The de-duplicated matrix to run. */
|
|
126
|
+
readonly entries: readonly ObsidianVersionMatrixEntry[];
|
|
127
|
+
/** Called just before each entry runs, for progress reporting. */
|
|
128
|
+
readonly onEntryStart: (params: FormatVersionMatrixRunHeaderParams) => void;
|
|
129
|
+
/** Runs the suites against a single entry, throwing on failure. */
|
|
130
|
+
readonly run: (entry: ObsidianVersionMatrixEntry) => Promise<void> | void;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Collapses resolved specifiers into one entry per **distinct resolved version**.
|
|
134
|
+
*
|
|
135
|
+
* De-duplication is keyed on the resolved version, not the specifier string, so
|
|
136
|
+
* specifiers that name the same build collapse however they were written.
|
|
137
|
+
* First-seen order is preserved, and every specifier that landed on a version is
|
|
138
|
+
* recorded on its entry.
|
|
139
|
+
*
|
|
140
|
+
* @param resolvedSpecs - The resolved specifiers, in requested order.
|
|
141
|
+
* @returns One entry per distinct version, in first-seen order.
|
|
142
|
+
*/
|
|
143
|
+
export declare function buildVersionMatrix(resolvedSpecs: readonly ResolvedVersionSpec[]): ObsidianVersionMatrixEntry[];
|
|
144
|
+
/**
|
|
145
|
+
* Formats an entry for logs and error messages.
|
|
146
|
+
*
|
|
147
|
+
* Specifiers that merely repeat the version add nothing, so an explicit-only
|
|
148
|
+
* entry formats as the bare version rather than `1.13.4 (1.13.4)`.
|
|
149
|
+
*
|
|
150
|
+
* @param entry - The entry to format.
|
|
151
|
+
* @returns A string like `1.13.4 (public-latest, catalyst-latest)`.
|
|
152
|
+
*/
|
|
153
|
+
export declare function formatVersionMatrixEntry(entry: ObsidianVersionMatrixEntry): string;
|
|
154
|
+
/**
|
|
155
|
+
* Builds the lines announcing what the matrix resolved to and how many runs it
|
|
156
|
+
* will take.
|
|
157
|
+
*
|
|
158
|
+
* The collapse must be **stated**, never inferred: a reader who sees one run
|
|
159
|
+
* where they expected two has to be told the second end was already covered,
|
|
160
|
+
* not left wondering whether it was skipped by accident.
|
|
161
|
+
*
|
|
162
|
+
* @param params - The matrix and the specifiers it was built from.
|
|
163
|
+
* @returns The lines to log, in order.
|
|
164
|
+
*/
|
|
165
|
+
export declare function formatVersionMatrixPlan(params: FormatVersionMatrixPlanParams): string[];
|
|
166
|
+
/**
|
|
167
|
+
* Builds the progress line announcing a single entry's run.
|
|
168
|
+
*
|
|
169
|
+
* @param params - The entry and its position in the matrix.
|
|
170
|
+
* @returns A string like `Run 1 of 2: 1.12.7 (public-latest)`.
|
|
171
|
+
*/
|
|
172
|
+
export declare function formatVersionMatrixRunHeader(params: FormatVersionMatrixRunHeaderParams): string;
|
|
173
|
+
/**
|
|
174
|
+
* Reports whether any specifier is a channel alias, i.e. whether the releases
|
|
175
|
+
* manifest has to be fetched at all.
|
|
176
|
+
*
|
|
177
|
+
* @param specs - The requested specifiers.
|
|
178
|
+
* @returns `true` when at least one specifier resolves against the manifest.
|
|
179
|
+
*/
|
|
180
|
+
export declare function hasChannelSpec(specs: readonly string[]): boolean;
|
|
181
|
+
/**
|
|
182
|
+
* Splits a comma-separated specifier list, so a consumer can hand an env var
|
|
183
|
+
* (`OBSIDIAN_VERSION=1.12.7,catalyst-latest`) straight through.
|
|
184
|
+
*
|
|
185
|
+
* @param raw - The raw comma-separated string.
|
|
186
|
+
* @returns The trimmed, non-empty specifiers, in order.
|
|
187
|
+
*/
|
|
188
|
+
export declare function parseVersionSpecList(raw: string): string[];
|
|
189
|
+
/**
|
|
190
|
+
* Normalizes the requested version specifiers, falling back to the default
|
|
191
|
+
* both-ends list when none were given.
|
|
192
|
+
*
|
|
193
|
+
* An empty string is treated as absent, so a consumer can pass an unset
|
|
194
|
+
* `process.env['OBSIDIAN_VERSION']` without guarding it.
|
|
195
|
+
*
|
|
196
|
+
* @param versions - An array of specifiers, a comma-separated string, or `undefined`.
|
|
197
|
+
* @returns The specifiers to resolve, and whether they came from the default list.
|
|
198
|
+
*/
|
|
199
|
+
export declare function resolveRequestedSpecs(versions: readonly string[] | string | undefined): ResolveRequestedSpecsResult;
|
|
200
|
+
/**
|
|
201
|
+
* Resolves each requested specifier to a concrete version against a
|
|
202
|
+
* single manifest.
|
|
203
|
+
*
|
|
204
|
+
* @param params - The specifiers, the manifest, and the tolerance mode.
|
|
205
|
+
* @returns The resolved specifiers and any that were dropped.
|
|
206
|
+
* @throws Error if a specifier cannot be resolved and tolerance is off, or if
|
|
207
|
+
* tolerance is on but nothing resolved at all.
|
|
208
|
+
*/
|
|
209
|
+
export declare function resolveVersionSpecs(params: ResolveVersionSpecsParams): ResolveVersionSpecsResult;
|
|
210
|
+
/**
|
|
211
|
+
* Runs the suites once per matrix entry, **always running every entry** before
|
|
212
|
+
* reporting.
|
|
213
|
+
*
|
|
214
|
+
* A failing end must not hide the state of the other: stopping at the first
|
|
215
|
+
* failure would leave "catalyst broke" and "both ends broke" indistinguishable
|
|
216
|
+
* without a second run. Every entry therefore runs, and the summary names which
|
|
217
|
+
* concrete versions failed and which passed.
|
|
218
|
+
*
|
|
219
|
+
* @param params - The matrix, the per-entry runner, and the progress reporter.
|
|
220
|
+
* @returns A {@link Promise} that resolves once every entry has run successfully.
|
|
221
|
+
* @throws Error if the matrix is empty, or an {@link AggregateError} naming every
|
|
222
|
+
* version that failed.
|
|
223
|
+
*/
|
|
224
|
+
export declare function runVersionMatrixEntries(params: RunVersionMatrixEntriesParams): Promise<void>;
|