@dbx-tools/shared-core 0.6.58 → 0.6.60

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 CHANGED
@@ -236,7 +236,7 @@ read as seconds and the rest as milliseconds. An unknown unit fails the whole
236
236
  duration parse instead of being skipped, so `1 fortnight` is `undefined` rather
237
237
  than `1`. Neither function throws - like `toBoolean` they return `undefined`, so
238
238
  the caller decides whether a bad value is fatal, a warning, or a fallback
239
- (`@dbx-tools/cli-tunnel`'s `--session-cutoff` warns and carries on).
239
+ (`@dbx-tools/tunnel`'s `TUNNEL_AUTH_SESSION_CUTOFF` warns and carries on).
240
240
 
241
241
  ## Iterables
242
242
 
package/lib/src/string.js CHANGED
@@ -1,3 +1,6 @@
1
+ // GENERATED by projen synth (rs-packages) - DO NOT EDIT.
2
+ // Regenerated from rs-packages/shared/core/src/string.ts.
3
+ // Hand edits are overwritten on the next watch; this file is read-only.
1
4
  /**
2
5
  * Browser-safe string toolkit: tokenization, identifier / slug
3
6
  * generation (with hash-suffix collision resistance), HTML escaping,
@@ -510,4 +513,4 @@ export function toLabel(value, options) {
510
513
  export function capitalize(value) {
511
514
  return value ? value.charAt(0).toUpperCase() + value.slice(1) : value;
512
515
  }
513
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQTBDL0MsMEVBQTBFO0FBQzFFLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0UsaUVBQWlFO0FBQ2pFLE1BQU0sMEJBQTBCLEdBQUcsaURBQWlELENBQUM7QUFDckYsTUFBTSxnQ0FBZ0MsR0FBRyxlQUFlLENBQUM7QUFDekQsTUFBTSxrQkFBa0IsR0FBNEQ7SUFDbEYsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNoQyxJQUFJLEtBQUssS0FBSyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsNkVBQTZFO0lBQzdFLCtEQUErRDtJQUMvRCxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xELE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGLENBQUM7QUFDRixNQUFNLFVBQVUsR0FBRyxvREFBb0QsQ0FBQztBQUN4RSxNQUFNLFlBQVksR0FBRywwRUFBMEUsQ0FBQztBQUVoRyxNQUFNLGlCQUFpQixHQUE0QjtJQUNqRCxRQUFRLEVBQUUsS0FBSztJQUNmLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLFNBQVMsRUFBRSxJQUFJO0NBQ2hCLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUE4QjtJQUNyRCxHQUFHLGlCQUFpQjtJQUNwQixTQUFTLEVBQUUsSUFBSTtJQUNmLFNBQVMsRUFBRSxRQUFRO0lBQ25CLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsa0JBQWtCLEVBQUUsQ0FBQztJQUNyQixTQUFTLEVBQUUsR0FBRztDQUNmLENBQUM7QUFFRixNQUFNLFNBQVMsQ0FBQyxDQUFDLG1CQUFtQixDQUNsQyxPQUF3QixFQUN4QixHQUFHLE1BQWlCO0lBRXBCLE1BQU0sSUFBSSxHQUE0QixFQUFFLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUMzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDO0lBRTlGLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLElBQUksSUFBSTtZQUFFLFNBQVM7UUFDNUIsSUFBSSxXQUFXLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsV0FBVztZQUFFLFNBQVM7UUFDM0IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QyxJQUFJLEtBQUs7Z0JBQUUsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUMsSUFBSSxLQUFLO2dCQUFFLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVztZQUFFLFNBQVM7UUFDM0IsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEQsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLFNBQVM7Z0JBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRCxJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUFFLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsU0FBUztZQUNyQixLQUFLLE1BQU0sUUFBUSxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsS0FBSztvQkFBRSxNQUFNO1lBQ3BCLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUFFLFNBQVM7WUFDekMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBaUI7SUFDNUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQTBCLEVBQUUsR0FBRyxNQUFpQjtJQUN0RixNQUFNLElBQUksR0FBOEI7UUFDdEMsR0FBRyxtQkFBbUI7UUFDdEIsR0FBRyxPQUFPO1FBQ1YsU0FBUyxFQUFFLElBQUk7S0FDaEIsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFFdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLGFBQWEsR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUU1RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssT0FBTztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUNqRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNO2dCQUFFLE1BQU07WUFFNUMsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEUsSUFBSSxhQUFhLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM5RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hGLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLGFBQWEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBRyxNQUFpQjtJQUMvQyxPQUFPLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQW1CLEVBQUUsR0FBRyxNQUFpQjtJQUN6RSxPQUFPLHVCQUF1QixDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBRyxNQUFpQjtJQUN6QyxPQUFPLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWM7SUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0MsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsQyxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLHNEQUFzRDtBQUN0RCxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztBQUV2Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLEdBQWtELEVBQ2xELFlBQXVDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO0lBRTlELE1BQU0sT0FBTyxHQUNYLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RixNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7SUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQUUsU0FBUztRQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWM7SUFDeEMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWM7SUFDMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxPQUFPO2dCQUFFLE9BQU8sT0FBTyxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLE9BQU8sS0FBSztTQUNULE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1NBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1NBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1NBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1NBQ3ZCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLEtBQWEsRUFDYixVQUtJLEVBQUU7SUFFTixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztJQUMzQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUNsRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQztJQUN0RCxNQUFNLElBQUksR0FBRyx1QkFBdUIsQ0FDbEMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsRUFDakUsS0FBSyxDQUNOLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDMUYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUF3QixFQUFFLEtBQWM7SUFDNUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSztRQUFFLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xELElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztJQUNsRCxPQUFPLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQW9CRCxNQUFNLFNBQVMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQVUsQ0FBQztBQUduRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBaUI7SUFDN0MsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztTQUN6QixPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztTQUN4QixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFpQixFQUFFLEdBQVc7SUFDakQsSUFBSSxJQUFJLElBQUksSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUErQixDQUFDLENBQUM7SUFDdkQsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sVUFBVSxDQUFFLElBQWlELENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxJQUFtQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxJQUFZO0lBQ2pDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDO0lBQ25CLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFTO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLEdBQUcsR0FBRztZQUFFLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUNaLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzFCLE9BQU8sS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ25ELE9BQU8sR0FBRyxHQUFHLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNuRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBNkI7SUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUNyQixJQUFLLFNBQStCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRSxPQUFPLEdBQWUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBWSxFQUFFLEdBQVc7SUFDM0MsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3RCLE9BQU8sSUFBSTtTQUNSLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDWCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQTZCLEVBQUUsR0FBVztJQUNoRSxNQUFNLFFBQVEsR0FBMEMsRUFBRSxDQUFDO0lBQzNELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSTtZQUFFLFNBQVM7UUFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFFLENBQUMsSUFBSSxDQUFDO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVGLEdBQUcsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBRSxDQUFDLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMscUJBQXFCLENBQUMsSUFBaUIsRUFBRSxJQUFpQjtJQUNqRSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUM1QyxJQUFJLFVBQVUsS0FBSyxVQUFVO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsS0FBSyxDQUFDLElBQWlCO0lBQzlCLElBQUksSUFBSSxJQUFJLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMvQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEMsT0FBTyxRQUFRLENBQUMsSUFBK0IsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUM1RCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBNkIsRUFBRSxHQUFXLEVBQUUsSUFBYztJQUM1RSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUUsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxNQUFNLFlBQVksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBaUMsRUFBRSxHQUFXO0lBQy9ELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25ELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFBRSxTQUFTO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFZO0lBQ25ELE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYSxFQUFFLE9BQXlCO0lBQzlELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEcsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2VyLXNhZmUgc3RyaW5nIHRvb2xraXQ6IHRva2VuaXphdGlvbiwgaWRlbnRpZmllciAvIHNsdWdcbiAqIGdlbmVyYXRpb24gKHdpdGggaGFzaC1zdWZmaXggY29sbGlzaW9uIHJlc2lzdGFuY2UpLCBIVE1MIGVzY2FwaW5nLFxuICogaGVhZGVyLXZhbHVlIHRyaW1taW5nLCBhbmQgYSBuZXN0ZWQgZGVzY3JpcHRpb24tdHJlZSByZW5kZXJlciBmb3JcbiAqIGxvbmctZm9ybSBMTE0gcHJvbXB0IC8gdG9vbC1kZXNjcmlwdGlvbiB0ZXh0LiBEZXBlbmRzIG9ubHkgb24gdGhlXG4gKiBsb2NhbCB7QGxpbmsgZm52SGFzaFdpdGhPcHRpb25zfSBmb3IgZGV0ZXJtaW5pc3RpYyBoYXNoIHN1ZmZpeGVzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgZm52SGFzaFdpdGhPcHRpb25zIH0gZnJvbSBcIi4vaGFzaC50c1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgY29udHJvbGxpbmcge0BsaW5rIHRva2VuaXplV2l0aE9wdGlvbnN9LiBBbGwgZGVmYXVsdCBvZmYgZXhjZXB0XG4gKiBgY2FtZWxDYXNlYC5cbiAqXG4gKiAtIGBkaXN0aW5jdGAgLSBkcm9wIGR1cGxpY2F0ZSB0b2tlbnMgKGZpcnN0IG9jY3VycmVuY2Ugd2lucykuXG4gKiAtIGBsb3dlckNhc2VgIC0gbG93ZXJjYXNlIGV2ZXJ5IHRva2VuLlxuICogLSBgY2FwaXRhbGl6ZWAgLSB1cHBlci1jYXNlIGVhY2ggdG9rZW4ncyBmaXJzdCBsZXR0ZXIgKHRoZW5cbiAqICAge0BsaW5rIFRPS0VOSVpFX09WRVJSSURFU30gZml4IHVwIGBhaWAgLT4gYEFJYCwgYGZzYCAtPiBgRlNgLCBhbmRcbiAqICAgYHYyYCAtPiBgVjJgKS5cbiAqIC0gYG9taXRVcmlTY2hlbWVgIC0gc3RyaXAgYSBsZWFkaW5nIGBzY2hlbWU6Ly9gIGJlZm9yZSB0b2tlbml6aW5nLlxuICogLSBgb21pdEVtYWlsRG9tYWluYCAtIGtlZXAgb25seSB0aGUgbG9jYWwgcGFydCBvZiBhbiBlbWFpbC5cbiAqIC0gYGNhbWVsQ2FzZWAgLSBzcGxpdCBvbiBjYW1lbENhc2UgYm91bmRhcmllcyAvIGRpZ2l0IHJ1bnMgLyBhY3Jvbnltc1xuICogICAoZGVmYXVsdCBgdHJ1ZWApOyB3aGVuIGBmYWxzZWAsIHNwbGl0IG9ubHkgb24gbm9uLWFscGhhbnVtZXJpY3MuXG4gKi9cbmV4cG9ydCB0eXBlIFRva2VuaXplT3B0aW9ucyA9IHtcbiAgZGlzdGluY3Q/OiBib29sZWFuO1xuICBsb3dlckNhc2U/OiBib29sZWFuO1xuICBjYXBpdGFsaXplPzogYm9vbGVhbjtcbiAgb21pdFVyaVNjaGVtZT86IGJvb2xlYW47XG4gIG9taXRFbWFpbERvbWFpbj86IGJvb2xlYW47XG4gIGNhbWVsQ2FzZT86IGJvb2xlYW47XG59O1xuXG4vLyBLZXlzL2lkZW50aWZpZXJzL3NsdWdzIGFyZSBhbHdheXMgbG93ZXJjYXNlZDsgYGxvd2VyQ2FzZWAgaXMgbm90IGFcbi8vIGNhbGxlci1jb25maWd1cmFibGUgb3B0aW9uLlxuZXhwb3J0IHR5cGUgS2V5T3B0aW9ucyA9IE9taXQ8VG9rZW5pemVPcHRpb25zLCBcImxvd2VyQ2FzZVwiIHwgXCJjYXBpdGFsaXplXCI+ICYge1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIHRydW5jYXRlU3RyYXRlZ3k/OiBcImhhc2hcIiB8IFwidHJpbVwiIHwgXCJlbXB0eVwiO1xuICB0cnVuY2F0ZUhhc2hMZW5ndGg/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJZGVudGlmaWVyT3B0aW9ucyA9IEtleU9wdGlvbnMgJiB7XG4gIGRlbGltaXRlcj86IHN0cmluZztcbn07XG5cbnR5cGUgUmVzb2x2ZWRUb2tlbml6ZU9wdGlvbnMgPSBSZXF1aXJlZDxUb2tlbml6ZU9wdGlvbnM+O1xudHlwZSBSZXNvbHZlZElkZW50aWZpZXJPcHRpb25zID0gUmVxdWlyZWQ8XG4gIElkZW50aWZpZXJPcHRpb25zICYgUGljazxUb2tlbml6ZU9wdGlvbnMsIFwibG93ZXJDYXNlXCIgfCBcImNhcGl0YWxpemVcIj5cbj47XG5cbi8vIEEgbGVhZGluZyBgdmAvYFZgIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGRpZ2l0cyAoYSB2ZXJzaW9uIG1hcmtlciBsaWtlXG4vLyBgdjJgKSBpcyBrZXB0IGFzIE9ORSB0b2tlbiBpbnN0ZWFkIG9mIHNwbGl0dGluZyBpbnRvIGB2YCArIGAyYDsgaXQgbGVhZHMgdGhlXG4vLyBhbHRlcm5hdGlvbiBzbyBpdCB3aW5zIG92ZXIgdGhlIGdlbmVyaWMgbGV0dGVyIC8gZGlnaXQgcnVucy4gRXZlcnl0aGluZyBlbHNlXG4vLyBpcyB0aGUgdXN1YWwgY2FtZWxDYXNlIHdvcmQgLyBudW1iZXIgLyBhbGwtY2Fwcy1hY3JvbnltIHNwbGl0LlxuY29uc3QgVE9LRU5JWkVfQ0FNRUxfQ0FTRV9SRUdFWFAgPSAvW3ZWXVswLTldK3xbQS1aXT9bYS16XSt8WzAtOV0rfFtBLVpdKyg/IVthLXpdKS9nO1xuY29uc3QgVE9LRU5JWkVfTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFAgPSAvW2EtekEtWjAtOV0rL2c7XG5jb25zdCBUT0tFTklaRV9PVkVSUklERVM6ICgodG9rZW46IHN0cmluZywgb3B0aW9uczogVG9rZW5pemVPcHRpb25zKSA9PiBzdHJpbmcpW10gPSBbXG4gICh0b2tlbiwgb3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucy5jYXBpdGFsaXplKSByZXR1cm4gdG9rZW47XG4gICAgY29uc3QgbG93ZXIgPSB0b2tlbi50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlciA9PT0gXCJhaVwiKSByZXR1cm4gXCJBSVwiO1xuICAgIGlmIChsb3dlciA9PT0gXCJmc1wiKSByZXR1cm4gXCJGU1wiO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfSxcbiAgLy8gVmVyc2lvbiBtYXJrZXIgYHYyYCAtPiBgVjJgIHdoZW4gY2FwaXRhbGl6aW5nICh0aGUgbGVhZGluZyBgdmAgdXBwZXJjYXNlcyxcbiAgLy8gdGhlIGRpZ2l0cyBzdGF5KSwgc28gaXQgcmVhZHMgYXMgb25lIHVuaXQgcmF0aGVyIHRoYW4gXCJWIDJcIi5cbiAgKHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuY2FwaXRhbGl6ZSAmJiAvXnZbMC05XSskLy50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuIGBWJHt0b2tlbi5zbGljZSgxKX1gO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG4gIH0sXG5dO1xuY29uc3QgVVJJX1JFR0VYUCA9IC9eKFthLXpBLVpdW2EtekEtWjAtOSsuLV0qKT86XFwvXFwvKFteXFxzLz8jXVteXFxzXSopPyQvO1xuY29uc3QgRU1BSUxfUkVHRVhQID0gL14oW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSspQChbYS16QS1aMC05LV0rKD86XFwuW2EtekEtWjAtOS1dKykrKSQvO1xuXG5jb25zdCBUT0tFTklaRV9ERUZBVUxUUzogUmVzb2x2ZWRUb2tlbml6ZU9wdGlvbnMgPSB7XG4gIGRpc3RpbmN0OiBmYWxzZSxcbiAgbG93ZXJDYXNlOiBmYWxzZSxcbiAgY2FwaXRhbGl6ZTogZmFsc2UsXG4gIG9taXRVcmlTY2hlbWU6IGZhbHNlLFxuICBvbWl0RW1haWxEb21haW46IGZhbHNlLFxuICBjYW1lbENhc2U6IHRydWUsXG59O1xuXG5jb25zdCBJREVOVElGSUVSX0RFRkFVTFRTOiBSZXNvbHZlZElkZW50aWZpZXJPcHRpb25zID0ge1xuICAuLi5UT0tFTklaRV9ERUZBVUxUUyxcbiAgbG93ZXJDYXNlOiB0cnVlLFxuICBtYXhMZW5ndGg6IEluZmluaXR5LFxuICB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIixcbiAgdHJ1bmNhdGVIYXNoTGVuZ3RoOiA2LFxuICBkZWxpbWl0ZXI6IFwiLVwiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uKiB0b2tlbml6ZVdpdGhPcHRpb25zKFxuICBvcHRpb25zOiBUb2tlbml6ZU9wdGlvbnMsXG4gIC4uLnZhbHVlczogdW5rbm93bltdXG4pOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gIGNvbnN0IG9wdHM6IFJlc29sdmVkVG9rZW5pemVPcHRpb25zID0geyAuLi5UT0tFTklaRV9ERUZBVUxUUywgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBzZWVuID0gb3B0cy5kaXN0aW5jdCA/IG5ldyBTZXQ8c3RyaW5nPigpIDogdW5kZWZpbmVkO1xuICBjb25zdCByZWdleHAgPSBvcHRzLmNhbWVsQ2FzZSA/IFRPS0VOSVpFX0NBTUVMX0NBU0VfUkVHRVhQIDogVE9LRU5JWkVfTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFA7XG5cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7XG4gICAgbGV0IHN0cmluZ1ZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpO1xuICAgIGlmICghc3RyaW5nVmFsdWUpIGNvbnRpbnVlO1xuICAgIGlmIChvcHRzLm9taXRVcmlTY2hlbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc3RyaW5nVmFsdWUubWF0Y2goVVJJX1JFR0VYUCk7XG4gICAgICBpZiAobWF0Y2gpIHN0cmluZ1ZhbHVlID0gbWF0Y2hbMl0gPz8gXCJcIjtcbiAgICB9XG4gICAgaWYgKG9wdHMub21pdEVtYWlsRG9tYWluKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHN0cmluZ1ZhbHVlLm1hdGNoKEVNQUlMX1JFR0VYUCk7XG4gICAgICBpZiAobWF0Y2gpIHN0cmluZ1ZhbHVlID0gbWF0Y2hbMV0gPz8gXCJcIjtcbiAgICB9XG4gICAgaWYgKCFzdHJpbmdWYWx1ZSkgY29udGludWU7XG4gICAgZm9yIChjb25zdCB0b2tlbk1hdGNoIG9mIHN0cmluZ1ZhbHVlLm1hdGNoQWxsKHJlZ2V4cCkpIHtcbiAgICAgIGxldCB0b2tlbiA9IHRva2VuTWF0Y2hbMF0hO1xuICAgICAgaWYgKG9wdHMubG93ZXJDYXNlKSB0b2tlbiA9IHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAob3B0cy5jYXBpdGFsaXplKSB0b2tlbiA9IGNhcGl0YWxpemUodG9rZW4pO1xuICAgICAgaWYgKCF0b2tlbikgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IG92ZXJyaWRlIG9mIFRPS0VOSVpFX09WRVJSSURFUykge1xuICAgICAgICB0b2tlbiA9IG92ZXJyaWRlKHRva2VuLCBvcHRzKTtcbiAgICAgICAgaWYgKCF0b2tlbikgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoIXRva2VuIHx8IHNlZW4/Lmhhcyh0b2tlbikpIGNvbnRpbnVlO1xuICAgICAgc2Vlbj8uYWRkKHRva2VuKTtcbiAgICAgIHlpZWxkIHRva2VuO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHRva2VuaXplKC4uLnZhbHVlczogdW5rbm93bltdKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICB5aWVsZCogdG9rZW5pemVXaXRoT3B0aW9ucyh7fSwgLi4udmFsdWVzKTtcbn1cblxuLyoqXG4gKiBKb2luIHRva2VuaXplZCB2YWx1ZXMgd2l0aCBgZGVsaW1pdGVyYC4gV2hlbiB0aGUgbmV4dCB0b2tlbiB3b3VsZCBwdXNoIHRoZVxuICogcmVzdWx0IG92ZXIgYG1heExlbmd0aGA6IGB0cmltYCBzdG9wcyBhZGRpbmc7IGBlbXB0eWAgcmV0dXJucyBgXCJcImA7IGBoYXNoYFxuICogYXBwZW5kcyBhIGRpZ2VzdCBvZiBhY2NlcHRlZCB0b2tlbnMgcGx1cyB0aGUgb3ZlcmZsb3cgdG9rZW4gaWYgdGhlIHJlc3VsdFxuICogc3RpbGwgZml0cywgb3RoZXJ3aXNlIGBcIlwiYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSWRlbnRpZmllcldpdGhPcHRpb25zKG9wdGlvbnM6IElkZW50aWZpZXJPcHRpb25zLCAuLi52YWx1ZXM6IHVua25vd25bXSk6IHN0cmluZyB7XG4gIGNvbnN0IG9wdHM6IFJlc29sdmVkSWRlbnRpZmllck9wdGlvbnMgPSB7XG4gICAgLi4uSURFTlRJRklFUl9ERUZBVUxUUyxcbiAgICAuLi5vcHRpb25zLFxuICAgIGxvd2VyQ2FzZTogdHJ1ZSxcbiAgfTtcbiAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbml6ZVdpdGhPcHRpb25zKG9wdHMsIC4uLnZhbHVlcykpIHtcbiAgICBjb25zdCBzZXBMZW5ndGggPSB0b2tlbnMubGVuZ3RoID4gMCA/IG9wdHMuZGVsaW1pdGVyLmxlbmd0aCA6IDA7XG4gICAgY29uc3QgbmV4dExlbmd0aCA9IGN1cnJlbnRMZW5ndGggKyBzZXBMZW5ndGggKyB0b2tlbi5sZW5ndGg7XG5cbiAgICBpZiAobmV4dExlbmd0aCA+IG9wdHMubWF4TGVuZ3RoKSB7XG4gICAgICBpZiAob3B0cy50cnVuY2F0ZVN0cmF0ZWd5ID09PSBcImVtcHR5XCIpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKG9wdHMudHJ1bmNhdGVTdHJhdGVneSA9PT0gXCJ0cmltXCIpIGJyZWFrO1xuXG4gICAgICBjb25zdCBoYXNoID0gZGlnZXN0VG9rZW5zKG9wdHMudHJ1bmNhdGVIYXNoTGVuZ3RoLCB0b2tlbnMsIHRva2VuKTtcbiAgICAgIGlmIChjdXJyZW50TGVuZ3RoICsgc2VwTGVuZ3RoICsgaGFzaC5sZW5ndGggPD0gb3B0cy5tYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRva2Vucy5sZW5ndGggPiAwID8gdG9rZW5zLmpvaW4ob3B0cy5kZWxpbWl0ZXIpICsgb3B0cy5kZWxpbWl0ZXIgKyBoYXNoIDogaGFzaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBjdXJyZW50TGVuZ3RoID0gbmV4dExlbmd0aDtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnMuam9pbihvcHRzLmRlbGltaXRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0lkZW50aWZpZXIoLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoe30sIC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogU2x1Z2lmaWVkIGlkZW50aWZpZXI6IHNhbWUgcnVsZXMgYXMge0BsaW5rIHRvSWRlbnRpZmllcldpdGhPcHRpb25zfSB3aXRoIHRoZVxuICogZGVsaW1pdGVyIGZvcmNlZCB0byBgLWAuIEFjY2VwdHMge0BsaW5rIEtleU9wdGlvbnN9IHNvIGNhbGxlcnMgY2Fubm90XG4gKiBvdmVycmlkZSB0aGUgZGVsaW1pdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TbHVnV2l0aE9wdGlvbnMob3B0aW9uczogS2V5T3B0aW9ucywgLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoeyAuLi5vcHRpb25zLCBkZWxpbWl0ZXI6IFwiLVwiIH0sIC4uLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NsdWcoLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbHVnV2l0aE9wdGlvbnMoe30sIC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogVHJpbSBgdmFsdWVgIGFuZCByZXR1cm4gYG51bGxgIGZvciBub24tc3RyaW5ncywgYHVuZGVmaW5lZGAsIG9yXG4gKiBzdHJpbmdzIHRoYXQgYXJlIGVtcHR5IGFmdGVyIHRyaW1taW5nLiBMZXRzIGNhbGwgc2l0ZXMgY29sbGFwc2UgdGhlXG4gKiBjb21tb25cbiAqXG4gKiBgYGB0c1xuICogdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi50cmltKCkgPyB2LnRyaW0oKSA6IG51bGxcbiAqIGBgYFxuICpcbiAqIGRhbmNlIGludG8gYSBzaW5nbGUgaGVscGVyLiBVc2VmdWwgZm9yIEhUVFAgaGVhZGVyIC8gcXVlcnkgLyBmb3JtXG4gKiBleHRyYWN0b3JzIHdoZXJlIGRvd25zdHJlYW0gY29kZSB3YW50cyBgc3RyaW5nIHwgbnVsbGAgdG8gZHJpdmUgYVxuICogY2hlYXAgYD8/YCAvIGBpZiAoeClgIGNhc2NhZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVG9OdWxsKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZCA/IHRyaW1tZWQgOiBudWxsO1xufVxuXG4vLyBDb25maWcgbGlzdHMgYXJyaXZlIGVpdGhlciBhbHJlYWR5IHNwbGl0IChhbiBhcnJheSkgb3IgYXMgb25lIGVudi12YXIgc3RyaW5nXG4vLyB3aXRoIGVudHJpZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcyBhbmQvb3Igd2hpdGVzcGFjZS5cbmNvbnN0IExJU1RfU0VQQVJBVE9SX1JFR0VYUCA9IC9bXFxzLF0rLztcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBjb25maWcgbGlzdCB0aGF0IG1heSBhcnJpdmUgYXMgYW4gYXJyYXkgb3IgYXMgYSBzaW5nbGVcbiAqIGNvbW1hL3doaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZzogc3BsaXQsIGFwcGx5IGB0cmFuc2Zvcm1gLCBkcm9wIGVtcHRpZXMsXG4gKiBhbmQgZGUtZHVwbGljYXRlIChmaXJzdCBvY2N1cnJlbmNlIHdpbnMpLlxuICpcbiAqIFRoaXMgaXMgdGhlIHNoYXBlIGV2ZXJ5IGFsbG93LWxpc3QgLyBmYWxsYmFjay1vcmRlciBzZXR0aW5nIGluIHRoaXMgcmVwb1xuICogdGFrZXMsIGJlY2F1c2UgdGhlIHNhbWUgdmFsdWUgY2FuIGNvbWUgZnJvbSB0eXBlZCBjb25maWcgKGBzdHJpbmdbXWApIG9yIGZyb21cbiAqIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIChgXCJhLCBiIGNcImApLiBQYXNzIGB0cmFuc2Zvcm1gIHRvIG5vcm1hbGl6ZSBlbnRyaWVzXG4gKiBhcyB0aGV5IGFyZSByZWFkOyBpdCBkZWZhdWx0cyB0byB0cmltbWluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VMaXN0KFwiZG9jcy5leGFtcGxlLmNvbSwgKi5kYXRhYnJpY2tzLmNvbVwiKTtcbiAqIHBhcnNlTGlzdChwcm9jZXNzLmVudi5NT0RFTF9GQUxMQkFDS1MpO1xuICogcGFyc2VMaXN0KHJhdywgbm9ybWFsaXplVXJsUGF0dGVybik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpc3QoXG4gIHJhdzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsLFxuICB0cmFuc2Zvcm06IChlbnRyeTogc3RyaW5nKSA9PiBzdHJpbmcgPSAoZW50cnkpID0+IGVudHJ5LnRyaW0oKSxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZW50cmllcyA9XG4gICAgdHlwZW9mIHJhdyA9PT0gXCJzdHJpbmdcIiA/IHJhdy5zcGxpdChMSVNUX1NFUEFSQVRPUl9SRUdFWFApIDogQXJyYXkuaXNBcnJheShyYXcpID8gcmF3IDogW107XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdHJhbnNmb3JtKGVudHJ5KTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQgfHwgc2Vlbi5oYXMobm9ybWFsaXplZCkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgIG91dC5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICoge0BsaW5rIHRyaW1Ub051bGx9IHdpdGggYW4gZW1wdHktc3RyaW5nIG1pc3MgaW5zdGVhZCBvZiBgbnVsbGAsIGZvciBjYWxsZXJzXG4gKiB0aGF0IGJ1aWxkIGEgc3RyaW5nIHVuY29uZGl0aW9uYWxseSBhbmQgdHJlYXQgXCJhYnNlbnRcIiBhcyBcIlwiLlxuICpcbiAqIFJlYWRpbmcgbG9vc2VseS10eXBlZCBKU09OIGlzIHRoZSBtb3RpdmF0aW5nIGNhc2U6IGEgZmllbGQgdGhhdCBzaG91bGQgYmUgYVxuICogc3RyaW5nIG1heSBiZSBtaXNzaW5nIG9yIHRoZSB3cm9uZyB0eXBlLCBhbmQgdGhlIGNhbGxlciB3YW50cyBgXCJcImAgcmF0aGVyXG4gKiB0aGFuIGEgbnVsbCBjaGVjayBhdCBldmVyeSBhY2Nlc3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRpdGxlID0gdHJpbVRvRW1wdHkocmVjb3JkLnRpdGxlKTsgLy8gYWx3YXlzIGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVG9FbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiB0cmltVG9OdWxsKHZhbHVlKSA/PyBcIlwiO1xufVxuXG4vKipcbiAqIFRyaW0gdGhlIGZpcnN0IHVzYWJsZSBzdHJpbmcgb3V0IG9mIGB2YWx1ZWAuIFJldHVybnMgYG51bGxgIHdoZW5cbiAqIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAsIGBudWxsYCwgYW4gZW1wdHkgc3RyaW5nLCBvciBhbiBhcnJheSB3aG9zZVxuICogZmlyc3Qgc3RyaW5nIG1lbWJlciBpcyBlbXB0eS4gTWlycm9ycyBob3cgRXhwcmVzcyAvIE5vZGUgaGVhZGVyXG4gKiBhY2Nlc3NvcnMgZXhwb3NlIHNpbmdsZSB2cy4gcmVwZWF0ZWQgaGVhZGVycyAtIHRoZSBmaXJzdFxuICogbm9uLWVtcHR5IGVudHJ5IHdpbnMsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBpZ25vcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3ROb25FbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSB0cmltVG9OdWxsKGl0ZW0pO1xuICAgICAgaWYgKHRyaW1tZWQpIHJldHVybiB0cmltbWVkO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdHJpbVRvTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRoZSBmaXZlIGNoYXJhY3RlcnMgc2lnbmlmaWNhbnQgaW4gSFRNTCB0ZXh0IGFuZFxuICogZG91YmxlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVzIChgJmAsIGA8YCwgYD5gLCBgXCJgLCBgJ2ApIHNvIGFuXG4gKiB1bnRydXN0ZWQgc3RyaW5nIGNhbiBiZSBpbnRlcnBvbGF0ZWQgaW50byBtYXJrdXAgd2l0aG91dCBicmVha2luZ1xuICogb3V0IG9mIGl0cyBjb250ZXh0LiBgJmAgaXMgcmVwbGFjZWQgZmlyc3Qgc28gYW1wZXJzYW5kcyBpbnRyb2R1Y2VkXG4gKiBieSB0aGUgbGF0ZXIgcmVwbGFjZW1lbnRzIGFyZW4ndCBkb3VibGUtZXNjYXBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcbiAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcbiAgICAucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpO1xufVxuXG4vKipcbiAqIFNsdWdpZnkgYHZhbHVlYCAodXNpbmcgdGhlIHN0YW5kYXJkIHtAbGluayB0b0lkZW50aWZpZXJXaXRoT3B0aW9uc31cbiAqIHRva2VuaXplciArIGRlbGltaXRlciBydWxlcykgYW5kICoqYWx3YXlzKiogc3VmZml4IGEgc2hvcnRcbiAqIGRldGVybWluaXN0aWMgaGFzaC4gVXNlIHdoZW4geW91IG5lZWQgYSBzdGFibGUsIHNsdWdpZmllZCBpZCB0aGF0XG4gKiBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhY3Jvc3MgZGVzY3JpcHRpb25zIHNoYXJpbmcgdGhlIHNhbWVcbiAqIGxlYWRpbmcgdG9rZW5zICh0b29sIGlkcywgY2FjaGUga2V5cywgZXRjLikuXG4gKlxuICogQmVoYXZpb3VyIGRpZmZlcnMgZnJvbSBgdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoeyBtYXhMZW5ndGgsXG4gKiB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIiB9KWA6IHRoYXQgaGVscGVyIG9ubHkgYXBwZW5kcyBhIGhhc2ggd2hlblxuICogdGhlIHNsdWcgKm92ZXJmbG93cyogYG1heExlbmd0aGAuIFRoaXMgaGVscGVyIGFwcGVuZHMgYSBoYXNoXG4gKiB1bmNvbmRpdGlvbmFsbHkgc28gdGhlIHJlc3VsdCBpcyBjb2xsaXNpb24tcmVzaXN0YW50IGV2ZW4gZm9yXG4gKiBzaG9ydCBpbnB1dHMuIFRoZSBoYXNoIGlzIGNvbXB1dGVkIG92ZXIgdGhlIHJhdyBgdmFsdWVgIHNvIHR3b1xuICogZGVzY3JpcHRpb25zIHByb2R1Y2luZyB0aGUgc2FtZSBzbHVnIHN0aWxsIGdldCBkaWZmZXJlbnQgaWRzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFNvdXJjZSBzdHJpbmcgKHR5cGljYWxseSBhIHRvb2wvYWdlbnQgZGVzY3JpcHRpb24pLlxuICogQHBhcmFtIG9wdGlvbnMuZGVsaW1pdGVyIC0gVG9rZW4gc2VwYXJhdG9yIChkZWZhdWx0IGBcIl9cImApLlxuICogQHBhcmFtIG9wdGlvbnMuc2x1Z01heExlbmd0aCAtIENhcCBvbiB0aGUgc2x1ZyBwb3J0aW9uICh0aGUgcGFydFxuICogICBiZWZvcmUgdGhlIGhhc2gpLiBEZWZhdWx0IDMyLlxuICogQHBhcmFtIG9wdGlvbnMuaGFzaExlbmd0aCAtIExlbmd0aCBvZiB0aGUgc3VmZml4IHByb2R1Y2VkIGJ5XG4gKiAgIHtAbGluayBmbnZIYXNoV2l0aE9wdGlvbnN9IChDcm9ja2ZvcmQtc3R5bGUgYmFzZS0zMiBhbHBoYWJldCwgbWF4IDdcbiAqICAgY2hhcnMpLiBEZWZhdWx0IDYuXG4gKiBAcGFyYW0gb3B0aW9ucy5mYWxsYmFja1ByZWZpeCAtIFByZWZpeCB1c2VkIHdoZW4gdGhlIHNsdWcgaXMgZW1wdHlcbiAqICAgKGUuZy4gcHVuY3R1YXRpb24tb25seSBpbnB1dCkuIERlZmF1bHQgYFwiaWRcImAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VuaXF1ZVNsdWcoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICBkZWxpbWl0ZXI/OiBzdHJpbmc7XG4gICAgc2x1Z01heExlbmd0aD86IG51bWJlcjtcbiAgICBoYXNoTGVuZ3RoPzogbnVtYmVyO1xuICAgIGZhbGxiYWNrUHJlZml4Pzogc3RyaW5nO1xuICB9ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciA/PyBcIl9cIjtcbiAgY29uc3Qgc2x1Z01heExlbmd0aCA9IG9wdGlvbnMuc2x1Z01heExlbmd0aCA/PyAzMjtcbiAgY29uc3QgaGFzaExlbmd0aCA9IG9wdGlvbnMuaGFzaExlbmd0aCA/PyA2O1xuICBjb25zdCBmYWxsYmFja1ByZWZpeCA9IG9wdGlvbnMuZmFsbGJhY2tQcmVmaXggPz8gXCJpZFwiO1xuICBjb25zdCBzbHVnID0gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoXG4gICAgeyBkZWxpbWl0ZXIsIG1heExlbmd0aDogc2x1Z01heExlbmd0aCwgdHJ1bmNhdGVTdHJhdGVneTogXCJ0cmltXCIgfSxcbiAgICB2YWx1ZSxcbiAgKTtcbiAgY29uc3Qgc3VmZml4ID0gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoOiBoYXNoTGVuZ3RoIH0sIHZhbHVlKTtcbiAgcmV0dXJuIHNsdWcgPyBgJHtzbHVnfSR7ZGVsaW1pdGVyfSR7c3VmZml4fWAgOiBgJHtmYWxsYmFja1ByZWZpeH0ke2RlbGltaXRlcn0ke3N1ZmZpeH1gO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RUb2tlbnMobGVuZ3RoOiBudW1iZXIsIHBhcnRzOiByZWFkb25seSBzdHJpbmdbXSwgZXh0cmE/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY29tYmluZWQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIGNvbWJpbmVkICs9IHBhcnQgKyBcIlxcMFwiO1xuICBpZiAoZXh0cmEgIT09IHVuZGVmaW5lZCkgY29tYmluZWQgKz0gZXh0cmEgKyBcIlxcMFwiO1xuICByZXR1cm4gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoIH0sIGNvbWJpbmVkKTtcbn1cblxuLyoqXG4gKiBBIG5vZGUgaW4gdGhlIGRlc2NyaXB0aW9uIHRyZWUgY29uc3VtZWQgYnkge0BsaW5rIHRvRGVzY3JpcHRpb259LlxuICpcbiAqIC0gYHN0cmluZ2AgLSBhIHRleHQgcGFyYWdyYXBoLlxuICogLSBgRGVzY3JpcHRpb25bXWAgLSBhIHNlcXVlbmNlIG9mIHN0YWNrZWQgYmxvY2tzIGF0IHRoZSBzYW1lIGxldmVsXG4gKiAgIChubyBsaXN0IG1hcmtlcnMpLiBQbGFpbiB0ZXh0IGFkamFjZW50IHRvIGEgbGlzdCAoZWl0aGVyIGRpcmVjdGlvbilcbiAqICAgZmx1c2hlcyB0b2dldGhlciBzbyB0aGUgcHJvc2UgcmVhZHMgYXMgYSBsZWFkLWluIG9yIHRyYWlsaW5nXG4gKiAgIHN1bW1hcnkuIFR3byB0ZXh0IHBhcmFncmFwaHMsIHR3byBhZGphY2VudCBsaXN0cywgYW5kIGFueXRoaW5nXG4gKiAgIHRvdWNoaW5nIGEgbWFwIGdldCBhIGJsYW5rLWxpbmUgYnJlYWsuXG4gKiAtIGB7IGJ1bGxldHM6IFsuLi5dIH1gIC8gYHsgbnVtYmVyZWQ6IFsuLi5dIH1gIC0gZXhwbGljaXQgbGlzdC4gQVxuICogICBsaXN0IG9mIG9uZSBiYXJlIHN0cmluZyBkcm9wcyBpdHMgbWFya2VyIChgLWAgLyBgMS5gKTsgYSBsaXN0IG9mXG4gKiAgIG9uZSBpdGVtIHdpdGggbmVzdGVkIGNoaWxkcmVuIGtlZXBzIGl0cyBtYXJrZXIgYXMgdGhlIHZpc3VhbCBhbmNob3JcbiAqICAgZm9yIHRoZSBpbmRlbnRlZCBjaGlsZHJlbi5cbiAqIC0gYW55IG90aGVyIG9iamVjdCAtIGhlYWRlcnMgbWFwOiBlYWNoIGtleSBiZWNvbWVzIGEgYEhlYWRlcjpgIGxpbmVcbiAqICAgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGFuZCB0aGUgcmVuZGVyZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0aW9uID0gc3RyaW5nIHwgcmVhZG9ubHkgRGVzY3JpcHRpb25bXSB8IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogRGVzY3JpcHRpb24gfTtcblxuY29uc3QgTElTVF9LRVlTID0gW1wiYnVsbGV0c1wiLCBcIm51bWJlcmVkXCJdIGFzIGNvbnN0O1xudHlwZSBMaXN0S2luZCA9ICh0eXBlb2YgTElTVF9LRVlTKVtudW1iZXJdO1xuXG4vKipcbiAqIEZvcm1hdCBhIG5lc3RlZCBkZXNjcmlwdGlvbiB0cmVlIGFzIGEgTWFya2Rvd24taXNoIHN0cmluZyBzdWl0YWJsZVxuICogZm9yIGFuIExMTSBzeXN0ZW0gcHJvbXB0LCBab2QgYC5kZXNjcmliZSgpYCBibG9jaywgTWFzdHJhIHRvb2xcbiAqIGRlc2NyaXB0aW9uLCBvciBhbnkgb3RoZXIgbG9uZy1mb3JtIHRleHQgZGVzdGluYXRpb24uXG4gKlxuICogRXZlcnkgc3RyaW5nIHNlY3Rpb24gaXMgZGVkZW50ZWQgKGNvbW1vbiBsZWFkaW5nIHdoaXRlc3BhY2Ugc3RyaXBwZWQpLFxuICogcmlnaHQtdHJpbW1lZCBsaW5lIGJ5IGxpbmUsIGFuZCBmcmVlZCBvZiBsZWFkaW5nIC8gdHJhaWxpbmcgYmxhbmtcbiAqIGxpbmVzLCBzbyBjYWxsZXJzIGNhbiB3cml0ZSBtdWx0aS1saW5lIHRlbXBsYXRlIGxpdGVyYWxzIGluZGVudGVkXG4gKiBuYXR1cmFsbHkgaW4gc291cmNlIHdpdGhvdXQgbGVha2luZyB0aGF0IGluZGVudGF0aW9uIGludG8gdGhlXG4gKiBjb25zdW1lci1mYWNpbmcgb3V0cHV0LiBQbGFpbi1zdHJpbmcgaW5wdXRzIGZsb3cgdGhyb3VnaCB1bmNoYW5nZWRcbiAqIGFwYXJ0IGZyb20gdGhlIHNhbWUgbm9ybWFsaXphdGlvbiBwYXNzLCBzbyBhIHNpbmdsZSBtdWx0aS1saW5lXG4gKiB0ZW1wbGF0ZSBsaXRlcmFsIHdvcmtzIGRpcmVjdGx5OlxuICpcbiAqIGBgYHRzXG4gKiB0b0Rlc2NyaXB0aW9uKGBcbiAqICAgQXNrIHRoZSBHZW5pZSBzcGFjZSBcIiR7YWxpYXN9XCIgYSBxdWVzdGlvbi5cbiAqICAgUGFzcyB0aGUgYW5zd2VyIHRocm91Z2ggYXMtaXMuXG4gKiBgKTtcbiAqIC8vIEFzayB0aGUgR2VuaWUgc3BhY2UgXCJkZWZhdWx0XCIgYSBxdWVzdGlvbi5cbiAqIC8vIFBhc3MgdGhlIGFuc3dlciB0aHJvdWdoIGFzLWlzLlxuICpcbiAqIHRvRGVzY3JpcHRpb24oW1xuICogICBgXG4gKiAgICAgQXNrIHRoZSBHZW5pZSBzcGFjZSBhIHF1ZXN0aW9uLlxuICogICAgIFBocmFzZSBpdCBmcm9tIHRoZSB1c2VyJ3MgcGVyc3BlY3RpdmUuXG4gKiAgIGAsXG4gKiAgIHsgYnVsbGV0czogW1xuICogICAgIFtcIlBhc3MgdGhlIGFuc3dlciB0aHJvdWdoIGFzLWlzXCIsIHsgbnVtYmVyZWQ6IFtcIml0ZW1cIiwgXCJpdGVtXCJdIH1dLFxuICogICBdfSxcbiAqICAgeyBJbnN0cnVjdGlvbnM6IFwiUmVwbHkgd2l0aCB0aGUgU1FMIG9ubHkuXCIgfSxcbiAqIF0pO1xuICogLy8gQXNrIHRoZSBHZW5pZSBzcGFjZSBhIHF1ZXN0aW9uLlxuICogLy8gUGhyYXNlIGl0IGZyb20gdGhlIHVzZXIncyBwZXJzcGVjdGl2ZS5cbiAqIC8vIC0gUGFzcyB0aGUgYW5zd2VyIHRocm91Z2ggYXMtaXNcbiAqIC8vICAgMS4gaXRlbVxuICogLy8gICAyLiBpdGVtXG4gKiAvL1xuICogLy8gSW5zdHJ1Y3Rpb25zOlxuICogLy9cbiAqIC8vIFJlcGx5IHdpdGggdGhlIFNRTCBvbmx5LlxuICogYGBgXG4gKlxuICogU2VlIHtAbGluayBEZXNjcmlwdGlvbn0gZm9yIHRoZSBub2RlIGdyYW1tYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0aW9uKG5vZGU6IERlc2NyaXB0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbmRlckJsb2NrKG5vZGUsIFwiXCIpXG4gICAgLnJlcGxhY2UoL1sgXFx0XSskL2dtLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9cXG4rJC8sIFwiXCIpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJCbG9jayhub2RlOiBEZXNjcmlwdGlvbiwgcGFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcHJlcGVuZFBhZChkZWRlbnRTZWN0aW9uKG5vZGUpLCBwYWQpO1xuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgcmV0dXJuIHJlbmRlclNlcXVlbmNlKG5vZGUsIHBhZCk7XG4gIGNvbnN0IGtpbmQgPSBsaXN0S2luZChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgaWYgKGtpbmQpIHtcbiAgICByZXR1cm4gcmVuZGVyTGlzdCgobm9kZSBhcyBSZWNvcmQ8TGlzdEtpbmQsIHJlYWRvbmx5IERlc2NyaXB0aW9uW10+KVtraW5kXSwgcGFkLCBraW5kKTtcbiAgfVxuICByZXR1cm4gcmVuZGVyTWFwKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgRGVzY3JpcHRpb24+LCBwYWQpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHN0cmluZyBzZWN0aW9uOiByaWdodC1zdHJpcCBldmVyeSBsaW5lLCBkcm9wIHRoZVxuICogY29tbW9uIGxlYWRpbmctd2hpdGVzcGFjZSBwcmVmaXggc2hhcmVkIGJ5IGFsbCBub24tYmxhbmsgbGluZXMsXG4gKiBhbmQgdHJpbSBsZWFkaW5nIC8gdHJhaWxpbmcgYmxhbmsgbGluZXMuIE1hdGNoZXMgUHl0aG9uJ3NcbiAqIGB0ZXh0d3JhcC5kZWRlbnRgIHNlbWFudGljcyBzbyBlbWJlZGRlZCBpbmRlbnRlZCB0ZW1wbGF0ZVxuICogbGl0ZXJhbHMgcm91bmQtdHJpcCBjbGVhbmx5LlxuICovXG5mdW5jdGlvbiBkZWRlbnRTZWN0aW9uKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKS5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZSgvWyBcXHRdKyQvLCBcIlwiKSk7XG4gIGxldCBtaW4gPSBJbmZpbml0eTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYgKCFsaW5lKSBjb250aW51ZTtcbiAgICBjb25zdCBtYXRjaCA9IC9eWyBcXHRdKi8uZXhlYyhsaW5lKTtcbiAgICBjb25zdCB3aWR0aCA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICBpZiAod2lkdGggPCBtaW4pIG1pbiA9IHdpZHRoO1xuICB9XG4gIGNvbnN0IHN0cmlwcGVkID1cbiAgICBtaW4gPT09IEluZmluaXR5IHx8IG1pbiA9PT0gMCA/IGxpbmVzIDogbGluZXMubWFwKChsaW5lKSA9PiAobGluZSA/IGxpbmUuc2xpY2UobWluKSA6IFwiXCIpKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IHN0cmlwcGVkLmxlbmd0aDtcbiAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmICFzdHJpcHBlZFtzdGFydF0pIHN0YXJ0ICs9IDE7XG4gIHdoaWxlIChlbmQgPiBzdGFydCAmJiAhc3RyaXBwZWRbZW5kIC0gMV0pIGVuZCAtPSAxO1xuICByZXR1cm4gc3RyaXBwZWQuc2xpY2Uoc3RhcnQsIGVuZCkuam9pbihcIlxcblwiKTtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgaXMgdHJlYXRlZCBhcyBhIHR5cGVkIGxpc3Qgb25seSB3aGVuIGl0IGhhcyBleGFjdGx5IG9uZVxuICogb3duIGtleSwgdGhhdCBrZXkgaXMgYGJ1bGxldHNgIG9yIGBudW1iZXJlZGAsIGFuZCB0aGUgdmFsdWUgaXMgYW5cbiAqIGFycmF5LiBFdmVyeXRoaW5nIGVsc2UgaXMgYSBoZWFkZXJzIG1hcCAtIHNvIGNhbGxlcnMgd2FudGluZyBhXG4gKiBzaW5nbGUgaGVhZGVyIGxpdGVyYWxseSBuYW1lZCBgYnVsbGV0c2Agb3IgYG51bWJlcmVkYCBjYW4gdXNlIGFcbiAqIG11bHRpLWtleSBtYXAgb3IgcmVuYW1lLlxuICovXG5mdW5jdGlvbiBsaXN0S2luZChub2RlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IExpc3RLaW5kIHwgbnVsbCB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcbiAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5ID0ga2V5c1swXSE7XG4gIGlmICgoTElTVF9LRVlTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhrZXkpICYmIEFycmF5LmlzQXJyYXkobm9kZVtrZXldKSkge1xuICAgIHJldHVybiBrZXkgYXMgTGlzdEtpbmQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmRQYWQodGV4dDogc3RyaW5nLCBwYWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIGlmICghcGFkKSByZXR1cm4gdGV4dDtcbiAgcmV0dXJuIHRleHRcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiAobGluZSA/IHBhZCArIGxpbmUgOiBcIlwiKSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU2VxdWVuY2UoaXRlbXM6IHJlYWRvbmx5IERlc2NyaXB0aW9uW10sIHBhZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVuZGVyZWQ6IHsgdGV4dDogc3RyaW5nOyBub2RlOiBEZXNjcmlwdGlvbiB9W10gPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdGV4dCA9IHJlbmRlckJsb2NrKGl0ZW0sIHBhZCk7XG4gICAgaWYgKCF0ZXh0KSBjb250aW51ZTtcbiAgICByZW5kZXJlZC5wdXNoKHsgdGV4dCwgbm9kZTogaXRlbSB9KTtcbiAgfVxuICBpZiAocmVuZGVyZWQubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgbGV0IG91dCA9IHJlbmRlcmVkWzBdIS50ZXh0O1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHJlbmRlcmVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qgc2VwID0gbmVlZHNCbGFua0xpbmVCZXR3ZWVuKHJlbmRlcmVkW2kgLSAxXSEubm9kZSwgcmVuZGVyZWRbaV0hLm5vZGUpID8gXCJcXG5cXG5cIiA6IFwiXFxuXCI7XG4gICAgb3V0ICs9IHNlcCArIHJlbmRlcmVkW2ldIS50ZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogTWFwcyBhbHdheXMgY3JlYXRlIHRoZWlyIG93biBzZWN0aW9uIGJvdW5kYXJ5IChhIGBIZWFkZXI6YCBsaW5lIHBsdXNcbiAqIGEgYmxhbmsgbGluZSBiZWZvcmUgdGhlIGJvZHkpLCBzbyBhbnl0aGluZyB0b3VjaGluZyBhIG1hcCBnZXRzIGFcbiAqIGJsYW5rLWxpbmUgYnJlYWsuIFBsYWluIHRleHQgYWRqYWNlbnQgdG8gYSB0eXBlZCBsaXN0IGZsdXNoZXNcbiAqIHRvZ2V0aGVyIGluIGVpdGhlciBkaXJlY3Rpb246IHRleHQtYmVmb3JlLWxpc3QgcmVhZHMgYXMgYSBsZWFkLWluLFxuICogdGV4dC1hZnRlci1saXN0IGFzIGEgdHJhaWxpbmcgc3VtbWFyeS4gVHdvIHRleHQgcGFyYWdyYXBocyBhbmQgdHdvXG4gKiBhZGphY2VudCBsaXN0cyBib3RoIGdldCBhIGJsYW5rLWxpbmUgYnJlYWsgZm9yIGxlZ2liaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIG5lZWRzQmxhbmtMaW5lQmV0d2VlbihwcmV2OiBEZXNjcmlwdGlvbiwgY3VycjogRGVzY3JpcHRpb24pOiBib29sZWFuIHtcbiAgaWYgKGlzTWFwKHByZXYpIHx8IGlzTWFwKGN1cnIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcHJldklzVGV4dCA9IHR5cGVvZiBwcmV2ID09PSBcInN0cmluZ1wiO1xuICBjb25zdCBjdXJySXNUZXh0ID0gdHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCI7XG4gIGlmIChwcmV2SXNUZXh0ICE9PSBjdXJySXNUZXh0KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEEgbm9kZSBpcyBhIGhlYWRlcnMgbWFwIHdoZW4gaXQgaXMgYSBub24tYXJyYXksIG5vbi1saXN0IG9iamVjdC5cbiAqIGBidWxsZXRzYCAvIGBudW1iZXJlZGAgc2luZ2xlLWtleSBvYmplY3RzIGFyZSB0aGUgb25seSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3RzIHRoYXQgYXJlbid0IG1hcHMuXG4gKi9cbmZ1bmN0aW9uIGlzTWFwKG5vZGU6IERlc2NyaXB0aW9uKTogYm9vbGVhbiB7XG4gIGlmIChub2RlID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBsaXN0S2luZChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTGlzdChpdGVtczogcmVhZG9ubHkgRGVzY3JpcHRpb25bXSwgcGFkOiBzdHJpbmcsIGtpbmQ6IExpc3RLaW5kKTogc3RyaW5nIHtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGl0ZW1zWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHByZXBlbmRQYWQoaXRlbXNbMF0sIHBhZCk7XG4gIH1cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0hO1xuICAgIGNvbnN0IG1hcmtlciA9IGtpbmQgPT09IFwiYnVsbGV0c1wiID8gXCItIFwiIDogYCR7aSArIDF9LiBgO1xuICAgIGNvbnN0IGJvZHkgPSByZW5kZXJCbG9jayhpdGVtLCBcIlwiKTtcbiAgICBjb25zdCBib2R5TGluZXMgPSBib2R5LnNwbGl0KFwiXFxuXCIpO1xuICAgIGxpbmVzLnB1c2goYCR7cGFkfSR7bWFya2VyfSR7Ym9keUxpbmVzWzBdID8/IFwiXCJ9YCk7XG4gICAgY29uc3QgY29udGludWF0aW9uID0gcGFkICsgXCIgXCIucmVwZWF0KG1hcmtlci5sZW5ndGgpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBib2R5TGluZXMuc2xpY2UoMSkpIHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSA/IGAke2NvbnRpbnVhdGlvbn0ke2xpbmV9YCA6IFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTWFwKG5vZGU6IFJlY29yZDxzdHJpbmcsIERlc2NyaXB0aW9uPiwgcGFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBbaGVhZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICBjb25zdCBib2R5ID0gcmVuZGVyQmxvY2sodmFsdWUsIHBhZCk7XG4gICAgaWYgKCFib2R5ICYmICFoZWFkZXIudHJpbSgpKSBjb250aW51ZTtcbiAgICBjb25zdCBoZWFkZXJMaW5lID0gaGVhZGVyLnRyaW0oKSA/IGAke3BhZH0ke2hlYWRlcn06YCA6IFwiXCI7XG4gICAgcGFydHMucHVzaChib2R5ID8gYCR7aGVhZGVyTGluZX1cXG5cXG4ke2JvZHl9YCA6IGhlYWRlckxpbmUpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIGNvdW50IHdpdGggaXRzIG5vdW4sIHBsdXJhbGl6aW5nIChuYWl2ZSBgK3NgKSB1bmxlc3MgdGhlIGNvdW50IGlzIDE6XG4gKiBgcGx1cmFsaXplKDEsIFwiYmFycmVsXCIpYCAtPiBgXCIxIGJhcnJlbFwiYCwgYHBsdXJhbGl6ZSgzLCBcImJhcnJlbFwiKWAgLT5cbiAqIGBcIjMgYmFycmVsc1wiYC4gQ29sbGFwc2VzIHRoZSBgJHtufSBub3VuJHtuID09PSAxID8gXCJcIiA6IFwic1wifWAgaWRpb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVyYWxpemUoY291bnQ6IG51bWJlciwgbm91bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2NvdW50fSAke25vdW59JHtjb3VudCA9PT0gMSA/IFwiXCIgOiBcInNcIn1gO1xufVxuXG4vKipcbiAqIFRpdGxlLWNhc2UgYSBzbmFrZSAvIGtlYmFiIC8gY2FtZWwgaWRlbnRpZmllciBpbnRvIGEgaHVtYW4tcmVhZGFibGUgbGFiZWw6XG4gKiB0b2tlbml6ZSAobG93ZXJjYXNlZCwgY2FwaXRhbGl6ZWQpLCB0aGVuIGpvaW4gd2l0aCBzcGFjZXMuIEZhbGxzIGJhY2sgdG9cbiAqIHRoZSByYXcgYHZhbHVlYCB3aGVuIGl0IHlpZWxkcyBubyB0b2tlbnMgKGUuZy4gcHVuY3R1YXRpb24tb25seSBpbnB1dCkuXG4gKiBgYmdlX2xhcmdlX2VuYCAtPiBgXCJCZ2UgTGFyZ2UgRW5cImAsIGBwcm9tcHRJZGAgLT4gYFwiUHJvbXB0IElkXCJgLlxuICpcbiAqIFRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgXCJodW1hbml6ZSBhIGNvbHVtbiAvIGZpZWxkIG5hbWVcIiBpZGlvbSAtXG4gKiByZXVzZWQgYnkgdGhlIGNoYXQgZGF0YS1ncmlkIGhlYWRlcnMgYW5kIHRoZSBleHBvcnQgcmVuZGVyZXIuIEV4dHJhXG4gKiB7QGxpbmsgVG9rZW5pemVPcHRpb25zfSAoZS5nLiBgY2FtZWxDYXNlOiBmYWxzZWApIG1lcmdlIG92ZXIgdGhlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9MYWJlbCh2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogVG9rZW5pemVPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zID0gWy4uLnRva2VuaXplV2l0aE9wdGlvbnMoeyBsb3dlckNhc2U6IHRydWUsIGNhcGl0YWxpemU6IHRydWUsIC4uLm9wdGlvbnMgfSwgdmFsdWUpXTtcbiAgcmV0dXJuIHRva2Vucy5sZW5ndGggPiAwID8gdG9rZW5zLmpvaW4oXCIgXCIpIDogdmFsdWU7XG59XG5cbi8qKlxuICogVXBwZXItY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGB2YWx1ZWAsIGxlYXZpbmcgdGhlIHJlc3QgdW50b3VjaGVkLlxuICogYFwid29ya2luZ1wiYCAtPiBgXCJXb3JraW5nXCJgLiBDb2xsYXBzZXMgdGhlXG4gKiBgcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSlgIGlkaW9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlID8gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKSA6IHZhbHVlO1xufVxuIl19
516
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsMERBQTBEO0FBQzFELHdFQUF3RTtBQUV4RTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQTBDL0MsMEVBQTBFO0FBQzFFLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0UsaUVBQWlFO0FBQ2pFLE1BQU0sMEJBQTBCLEdBQUcsaURBQWlELENBQUM7QUFDckYsTUFBTSxnQ0FBZ0MsR0FBRyxlQUFlLENBQUM7QUFDekQsTUFBTSxrQkFBa0IsR0FBNEQ7SUFDbEYsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNoQyxJQUFJLEtBQUssS0FBSyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsNkVBQTZFO0lBQzdFLCtEQUErRDtJQUMvRCxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xELE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGLENBQUM7QUFDRixNQUFNLFVBQVUsR0FBRyxvREFBb0QsQ0FBQztBQUN4RSxNQUFNLFlBQVksR0FBRywwRUFB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QUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiBzeW50aCAocnMtcGFja2FnZXMpIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHJzLXBhY2thZ2VzL3NoYXJlZC9jb3JlL3NyYy9zdHJpbmcudHMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuLyoqXG4gKiBCcm93c2VyLXNhZmUgc3RyaW5nIHRvb2xraXQ6IHRva2VuaXphdGlvbiwgaWRlbnRpZmllciAvIHNsdWdcbiAqIGdlbmVyYXRpb24gKHdpdGggaGFzaC1zdWZmaXggY29sbGlzaW9uIHJlc2lzdGFuY2UpLCBIVE1MIGVzY2FwaW5nLFxuICogaGVhZGVyLXZhbHVlIHRyaW1taW5nLCBhbmQgYSBuZXN0ZWQgZGVzY3JpcHRpb24tdHJlZSByZW5kZXJlciBmb3JcbiAqIGxvbmctZm9ybSBMTE0gcHJvbXB0IC8gdG9vbC1kZXNjcmlwdGlvbiB0ZXh0LiBEZXBlbmRzIG9ubHkgb24gdGhlXG4gKiBsb2NhbCB7QGxpbmsgZm52SGFzaFdpdGhPcHRpb25zfSBmb3IgZGV0ZXJtaW5pc3RpYyBoYXNoIHN1ZmZpeGVzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgZm52SGFzaFdpdGhPcHRpb25zIH0gZnJvbSBcIi4vaGFzaC50c1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgY29udHJvbGxpbmcge0BsaW5rIHRva2VuaXplV2l0aE9wdGlvbnN9LiBBbGwgZGVmYXVsdCBvZmYgZXhjZXB0XG4gKiBgY2FtZWxDYXNlYC5cbiAqXG4gKiAtIGBkaXN0aW5jdGAgLSBkcm9wIGR1cGxpY2F0ZSB0b2tlbnMgKGZpcnN0IG9jY3VycmVuY2Ugd2lucykuXG4gKiAtIGBsb3dlckNhc2VgIC0gbG93ZXJjYXNlIGV2ZXJ5IHRva2VuLlxuICogLSBgY2FwaXRhbGl6ZWAgLSB1cHBlci1jYXNlIGVhY2ggdG9rZW4ncyBmaXJzdCBsZXR0ZXIgKHRoZW5cbiAqICAge0BsaW5rIFRPS0VOSVpFX09WRVJSSURFU30gZml4IHVwIGBhaWAgLT4gYEFJYCwgYGZzYCAtPiBgRlNgLCBhbmRcbiAqICAgYHYyYCAtPiBgVjJgKS5cbiAqIC0gYG9taXRVcmlTY2hlbWVgIC0gc3RyaXAgYSBsZWFkaW5nIGBzY2hlbWU6Ly9gIGJlZm9yZSB0b2tlbml6aW5nLlxuICogLSBgb21pdEVtYWlsRG9tYWluYCAtIGtlZXAgb25seSB0aGUgbG9jYWwgcGFydCBvZiBhbiBlbWFpbC5cbiAqIC0gYGNhbWVsQ2FzZWAgLSBzcGxpdCBvbiBjYW1lbENhc2UgYm91bmRhcmllcyAvIGRpZ2l0IHJ1bnMgLyBhY3Jvbnltc1xuICogICAoZGVmYXVsdCBgdHJ1ZWApOyB3aGVuIGBmYWxzZWAsIHNwbGl0IG9ubHkgb24gbm9uLWFscGhhbnVtZXJpY3MuXG4gKi9cbmV4cG9ydCB0eXBlIFRva2VuaXplT3B0aW9ucyA9IHtcbiAgZGlzdGluY3Q/OiBib29sZWFuO1xuICBsb3dlckNhc2U/OiBib29sZWFuO1xuICBjYXBpdGFsaXplPzogYm9vbGVhbjtcbiAgb21pdFVyaVNjaGVtZT86IGJvb2xlYW47XG4gIG9taXRFbWFpbERvbWFpbj86IGJvb2xlYW47XG4gIGNhbWVsQ2FzZT86IGJvb2xlYW47XG59O1xuXG4vLyBLZXlzL2lkZW50aWZpZXJzL3NsdWdzIGFyZSBhbHdheXMgbG93ZXJjYXNlZDsgYGxvd2VyQ2FzZWAgaXMgbm90IGFcbi8vIGNhbGxlci1jb25maWd1cmFibGUgb3B0aW9uLlxuZXhwb3J0IHR5cGUgS2V5T3B0aW9ucyA9IE9taXQ8VG9rZW5pemVPcHRpb25zLCBcImxvd2VyQ2FzZVwiIHwgXCJjYXBpdGFsaXplXCI+ICYge1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIHRydW5jYXRlU3RyYXRlZ3k/OiBcImhhc2hcIiB8IFwidHJpbVwiIHwgXCJlbXB0eVwiO1xuICB0cnVuY2F0ZUhhc2hMZW5ndGg/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJZGVudGlmaWVyT3B0aW9ucyA9IEtleU9wdGlvbnMgJiB7XG4gIGRlbGltaXRlcj86IHN0cmluZztcbn07XG5cbnR5cGUgUmVzb2x2ZWRUb2tlbml6ZU9wdGlvbnMgPSBSZXF1aXJlZDxUb2tlbml6ZU9wdGlvbnM+O1xudHlwZSBSZXNvbHZlZElkZW50aWZpZXJPcHRpb25zID0gUmVxdWlyZWQ8XG4gIElkZW50aWZpZXJPcHRpb25zICYgUGljazxUb2tlbml6ZU9wdGlvbnMsIFwibG93ZXJDYXNlXCIgfCBcImNhcGl0YWxpemVcIj5cbj47XG5cbi8vIEEgbGVhZGluZyBgdmAvYFZgIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGRpZ2l0cyAoYSB2ZXJzaW9uIG1hcmtlciBsaWtlXG4vLyBgdjJgKSBpcyBrZXB0IGFzIE9ORSB0b2tlbiBpbnN0ZWFkIG9mIHNwbGl0dGluZyBpbnRvIGB2YCArIGAyYDsgaXQgbGVhZHMgdGhlXG4vLyBhbHRlcm5hdGlvbiBzbyBpdCB3aW5zIG92ZXIgdGhlIGdlbmVyaWMgbGV0dGVyIC8gZGlnaXQgcnVucy4gRXZlcnl0aGluZyBlbHNlXG4vLyBpcyB0aGUgdXN1YWwgY2FtZWxDYXNlIHdvcmQgLyBudW1iZXIgLyBhbGwtY2Fwcy1hY3JvbnltIHNwbGl0LlxuY29uc3QgVE9LRU5JWkVfQ0FNRUxfQ0FTRV9SRUdFWFAgPSAvW3ZWXVswLTldK3xbQS1aXT9bYS16XSt8WzAtOV0rfFtBLVpdKyg/IVthLXpdKS9nO1xuY29uc3QgVE9LRU5JWkVfTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFAgPSAvW2EtekEtWjAtOV0rL2c7XG5jb25zdCBUT0tFTklaRV9PVkVSUklERVM6ICgodG9rZW46IHN0cmluZywgb3B0aW9uczogVG9rZW5pemVPcHRpb25zKSA9PiBzdHJpbmcpW10gPSBbXG4gICh0b2tlbiwgb3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucy5jYXBpdGFsaXplKSByZXR1cm4gdG9rZW47XG4gICAgY29uc3QgbG93ZXIgPSB0b2tlbi50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlciA9PT0gXCJhaVwiKSByZXR1cm4gXCJBSVwiO1xuICAgIGlmIChsb3dlciA9PT0gXCJmc1wiKSByZXR1cm4gXCJGU1wiO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfSxcbiAgLy8gVmVyc2lvbiBtYXJrZXIgYHYyYCAtPiBgVjJgIHdoZW4gY2FwaXRhbGl6aW5nICh0aGUgbGVhZGluZyBgdmAgdXBwZXJjYXNlcyxcbiAgLy8gdGhlIGRpZ2l0cyBzdGF5KSwgc28gaXQgcmVhZHMgYXMgb25lIHVuaXQgcmF0aGVyIHRoYW4gXCJWIDJcIi5cbiAgKHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuY2FwaXRhbGl6ZSAmJiAvXnZbMC05XSskLy50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuIGBWJHt0b2tlbi5zbGljZSgxKX1gO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG4gIH0sXG5dO1xuY29uc3QgVVJJX1JFR0VYUCA9IC9eKFthLXpBLVpdW2EtekEtWjAtOSsuLV0qKT86XFwvXFwvKFteXFxzLz8jXVteXFxzXSopPyQvO1xuY29uc3QgRU1BSUxfUkVHRVhQID0gL14oW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSspQChbYS16QS1aMC05LV0rKD86XFwuW2EtekEtWjAtOS1dKykrKSQvO1xuXG5jb25zdCBUT0tFTklaRV9ERUZBVUxUUzogUmVzb2x2ZWRUb2tlbml6ZU9wdGlvbnMgPSB7XG4gIGRpc3RpbmN0OiBmYWxzZSxcbiAgbG93ZXJDYXNlOiBmYWxzZSxcbiAgY2FwaXRhbGl6ZTogZmFsc2UsXG4gIG9taXRVcmlTY2hlbWU6IGZhbHNlLFxuICBvbWl0RW1haWxEb21haW46IGZhbHNlLFxuICBjYW1lbENhc2U6IHRydWUsXG59O1xuXG5jb25zdCBJREVOVElGSUVSX0RFRkFVTFRTOiBSZXNvbHZlZElkZW50aWZpZXJPcHRpb25zID0ge1xuICAuLi5UT0tFTklaRV9ERUZBVUxUUyxcbiAgbG93ZXJDYXNlOiB0cnVlLFxuICBtYXhMZW5ndGg6IEluZmluaXR5LFxuICB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIixcbiAgdHJ1bmNhdGVIYXNoTGVuZ3RoOiA2LFxuICBkZWxpbWl0ZXI6IFwiLVwiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uKiB0b2tlbml6ZVdpdGhPcHRpb25zKFxuICBvcHRpb25zOiBUb2tlbml6ZU9wdGlvbnMsXG4gIC4uLnZhbHVlczogdW5rbm93bltdXG4pOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gIGNvbnN0IG9wdHM6IFJlc29sdmVkVG9rZW5pemVPcHRpb25zID0geyAuLi5UT0tFTklaRV9ERUZBVUxUUywgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBzZWVuID0gb3B0cy5kaXN0aW5jdCA/IG5ldyBTZXQ8c3RyaW5nPigpIDogdW5kZWZpbmVkO1xuICBjb25zdCByZWdleHAgPSBvcHRzLmNhbWVsQ2FzZSA/IFRPS0VOSVpFX0NBTUVMX0NBU0VfUkVHRVhQIDogVE9LRU5JWkVfTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFA7XG5cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7XG4gICAgbGV0IHN0cmluZ1ZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpO1xuICAgIGlmICghc3RyaW5nVmFsdWUpIGNvbnRpbnVlO1xuICAgIGlmIChvcHRzLm9taXRVcmlTY2hlbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc3RyaW5nVmFsdWUubWF0Y2goVVJJX1JFR0VYUCk7XG4gICAgICBpZiAobWF0Y2gpIHN0cmluZ1ZhbHVlID0gbWF0Y2hbMl0gPz8gXCJcIjtcbiAgICB9XG4gICAgaWYgKG9wdHMub21pdEVtYWlsRG9tYWluKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHN0cmluZ1ZhbHVlLm1hdGNoKEVNQUlMX1JFR0VYUCk7XG4gICAgICBpZiAobWF0Y2gpIHN0cmluZ1ZhbHVlID0gbWF0Y2hbMV0gPz8gXCJcIjtcbiAgICB9XG4gICAgaWYgKCFzdHJpbmdWYWx1ZSkgY29udGludWU7XG4gICAgZm9yIChjb25zdCB0b2tlbk1hdGNoIG9mIHN0cmluZ1ZhbHVlLm1hdGNoQWxsKHJlZ2V4cCkpIHtcbiAgICAgIGxldCB0b2tlbiA9IHRva2VuTWF0Y2hbMF0hO1xuICAgICAgaWYgKG9wdHMubG93ZXJDYXNlKSB0b2tlbiA9IHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAob3B0cy5jYXBpdGFsaXplKSB0b2tlbiA9IGNhcGl0YWxpemUodG9rZW4pO1xuICAgICAgaWYgKCF0b2tlbikgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IG92ZXJyaWRlIG9mIFRPS0VOSVpFX09WRVJSSURFUykge1xuICAgICAgICB0b2tlbiA9IG92ZXJyaWRlKHRva2VuLCBvcHRzKTtcbiAgICAgICAgaWYgKCF0b2tlbikgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoIXRva2VuIHx8IHNlZW4/Lmhhcyh0b2tlbikpIGNvbnRpbnVlO1xuICAgICAgc2Vlbj8uYWRkKHRva2VuKTtcbiAgICAgIHlpZWxkIHRva2VuO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHRva2VuaXplKC4uLnZhbHVlczogdW5rbm93bltdKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICB5aWVsZCogdG9rZW5pemVXaXRoT3B0aW9ucyh7fSwgLi4udmFsdWVzKTtcbn1cblxuLyoqXG4gKiBKb2luIHRva2VuaXplZCB2YWx1ZXMgd2l0aCBgZGVsaW1pdGVyYC4gV2hlbiB0aGUgbmV4dCB0b2tlbiB3b3VsZCBwdXNoIHRoZVxuICogcmVzdWx0IG92ZXIgYG1heExlbmd0aGA6IGB0cmltYCBzdG9wcyBhZGRpbmc7IGBlbXB0eWAgcmV0dXJucyBgXCJcImA7IGBoYXNoYFxuICogYXBwZW5kcyBhIGRpZ2VzdCBvZiBhY2NlcHRlZCB0b2tlbnMgcGx1cyB0aGUgb3ZlcmZsb3cgdG9rZW4gaWYgdGhlIHJlc3VsdFxuICogc3RpbGwgZml0cywgb3RoZXJ3aXNlIGBcIlwiYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSWRlbnRpZmllcldpdGhPcHRpb25zKG9wdGlvbnM6IElkZW50aWZpZXJPcHRpb25zLCAuLi52YWx1ZXM6IHVua25vd25bXSk6IHN0cmluZyB7XG4gIGNvbnN0IG9wdHM6IFJlc29sdmVkSWRlbnRpZmllck9wdGlvbnMgPSB7XG4gICAgLi4uSURFTlRJRklFUl9ERUZBVUxUUyxcbiAgICAuLi5vcHRpb25zLFxuICAgIGxvd2VyQ2FzZTogdHJ1ZSxcbiAgfTtcbiAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbml6ZVdpdGhPcHRpb25zKG9wdHMsIC4uLnZhbHVlcykpIHtcbiAgICBjb25zdCBzZXBMZW5ndGggPSB0b2tlbnMubGVuZ3RoID4gMCA/IG9wdHMuZGVsaW1pdGVyLmxlbmd0aCA6IDA7XG4gICAgY29uc3QgbmV4dExlbmd0aCA9IGN1cnJlbnRMZW5ndGggKyBzZXBMZW5ndGggKyB0b2tlbi5sZW5ndGg7XG5cbiAgICBpZiAobmV4dExlbmd0aCA+IG9wdHMubWF4TGVuZ3RoKSB7XG4gICAgICBpZiAob3B0cy50cnVuY2F0ZVN0cmF0ZWd5ID09PSBcImVtcHR5XCIpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKG9wdHMudHJ1bmNhdGVTdHJhdGVneSA9PT0gXCJ0cmltXCIpIGJyZWFrO1xuXG4gICAgICBjb25zdCBoYXNoID0gZGlnZXN0VG9rZW5zKG9wdHMudHJ1bmNhdGVIYXNoTGVuZ3RoLCB0b2tlbnMsIHRva2VuKTtcbiAgICAgIGlmIChjdXJyZW50TGVuZ3RoICsgc2VwTGVuZ3RoICsgaGFzaC5sZW5ndGggPD0gb3B0cy5tYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRva2Vucy5sZW5ndGggPiAwID8gdG9rZW5zLmpvaW4ob3B0cy5kZWxpbWl0ZXIpICsgb3B0cy5kZWxpbWl0ZXIgKyBoYXNoIDogaGFzaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBjdXJyZW50TGVuZ3RoID0gbmV4dExlbmd0aDtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnMuam9pbihvcHRzLmRlbGltaXRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0lkZW50aWZpZXIoLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoe30sIC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogU2x1Z2lmaWVkIGlkZW50aWZpZXI6IHNhbWUgcnVsZXMgYXMge0BsaW5rIHRvSWRlbnRpZmllcldpdGhPcHRpb25zfSB3aXRoIHRoZVxuICogZGVsaW1pdGVyIGZvcmNlZCB0byBgLWAuIEFjY2VwdHMge0BsaW5rIEtleU9wdGlvbnN9IHNvIGNhbGxlcnMgY2Fubm90XG4gKiBvdmVycmlkZSB0aGUgZGVsaW1pdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TbHVnV2l0aE9wdGlvbnMob3B0aW9uczogS2V5T3B0aW9ucywgLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoeyAuLi5vcHRpb25zLCBkZWxpbWl0ZXI6IFwiLVwiIH0sIC4uLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NsdWcoLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbHVnV2l0aE9wdGlvbnMoe30sIC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogVHJpbSBgdmFsdWVgIGFuZCByZXR1cm4gYG51bGxgIGZvciBub24tc3RyaW5ncywgYHVuZGVmaW5lZGAsIG9yXG4gKiBzdHJpbmdzIHRoYXQgYXJlIGVtcHR5IGFmdGVyIHRyaW1taW5nLiBMZXRzIGNhbGwgc2l0ZXMgY29sbGFwc2UgdGhlXG4gKiBjb21tb25cbiAqXG4gKiBgYGB0c1xuICogdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi50cmltKCkgPyB2LnRyaW0oKSA6IG51bGxcbiAqIGBgYFxuICpcbiAqIGRhbmNlIGludG8gYSBzaW5nbGUgaGVscGVyLiBVc2VmdWwgZm9yIEhUVFAgaGVhZGVyIC8gcXVlcnkgLyBmb3JtXG4gKiBleHRyYWN0b3JzIHdoZXJlIGRvd25zdHJlYW0gY29kZSB3YW50cyBgc3RyaW5nIHwgbnVsbGAgdG8gZHJpdmUgYVxuICogY2hlYXAgYD8/YCAvIGBpZiAoeClgIGNhc2NhZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVG9OdWxsKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZCA/IHRyaW1tZWQgOiBudWxsO1xufVxuXG4vLyBDb25maWcgbGlzdHMgYXJyaXZlIGVpdGhlciBhbHJlYWR5IHNwbGl0IChhbiBhcnJheSkgb3IgYXMgb25lIGVudi12YXIgc3RyaW5nXG4vLyB3aXRoIGVudHJpZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcyBhbmQvb3Igd2hpdGVzcGFjZS5cbmNvbnN0IExJU1RfU0VQQVJBVE9SX1JFR0VYUCA9IC9bXFxzLF0rLztcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBjb25maWcgbGlzdCB0aGF0IG1heSBhcnJpdmUgYXMgYW4gYXJyYXkgb3IgYXMgYSBzaW5nbGVcbiAqIGNvbW1hL3doaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZzogc3BsaXQsIGFwcGx5IGB0cmFuc2Zvcm1gLCBkcm9wIGVtcHRpZXMsXG4gKiBhbmQgZGUtZHVwbGljYXRlIChmaXJzdCBvY2N1cnJlbmNlIHdpbnMpLlxuICpcbiAqIFRoaXMgaXMgdGhlIHNoYXBlIGV2ZXJ5IGFsbG93LWxpc3QgLyBmYWxsYmFjay1vcmRlciBzZXR0aW5nIGluIHRoaXMgcmVwb1xuICogdGFrZXMsIGJlY2F1c2UgdGhlIHNhbWUgdmFsdWUgY2FuIGNvbWUgZnJvbSB0eXBlZCBjb25maWcgKGBzdHJpbmdbXWApIG9yIGZyb21cbiAqIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIChgXCJhLCBiIGNcImApLiBQYXNzIGB0cmFuc2Zvcm1gIHRvIG5vcm1hbGl6ZSBlbnRyaWVzXG4gKiBhcyB0aGV5IGFyZSByZWFkOyBpdCBkZWZhdWx0cyB0byB0cmltbWluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VMaXN0KFwiZG9jcy5leGFtcGxlLmNvbSwgKi5kYXRhYnJpY2tzLmNvbVwiKTtcbiAqIHBhcnNlTGlzdChwcm9jZXNzLmVudi5NT0RFTF9GQUxMQkFDS1MpO1xuICogcGFyc2VMaXN0KHJhdywgbm9ybWFsaXplVXJsUGF0dGVybik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpc3QoXG4gIHJhdzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsLFxuICB0cmFuc2Zvcm06IChlbnRyeTogc3RyaW5nKSA9PiBzdHJpbmcgPSAoZW50cnkpID0+IGVudHJ5LnRyaW0oKSxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZW50cmllcyA9XG4gICAgdHlwZW9mIHJhdyA9PT0gXCJzdHJpbmdcIiA/IHJhdy5zcGxpdChMSVNUX1NFUEFSQVRPUl9SRUdFWFApIDogQXJyYXkuaXNBcnJheShyYXcpID8gcmF3IDogW107XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdHJhbnNmb3JtKGVudHJ5KTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQgfHwgc2Vlbi5oYXMobm9ybWFsaXplZCkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgIG91dC5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICoge0BsaW5rIHRyaW1Ub051bGx9IHdpdGggYW4gZW1wdHktc3RyaW5nIG1pc3MgaW5zdGVhZCBvZiBgbnVsbGAsIGZvciBjYWxsZXJzXG4gKiB0aGF0IGJ1aWxkIGEgc3RyaW5nIHVuY29uZGl0aW9uYWxseSBhbmQgdHJlYXQgXCJhYnNlbnRcIiBhcyBcIlwiLlxuICpcbiAqIFJlYWRpbmcgbG9vc2VseS10eXBlZCBKU09OIGlzIHRoZSBtb3RpdmF0aW5nIGNhc2U6IGEgZmllbGQgdGhhdCBzaG91bGQgYmUgYVxuICogc3RyaW5nIG1heSBiZSBtaXNzaW5nIG9yIHRoZSB3cm9uZyB0eXBlLCBhbmQgdGhlIGNhbGxlciB3YW50cyBgXCJcImAgcmF0aGVyXG4gKiB0aGFuIGEgbnVsbCBjaGVjayBhdCBldmVyeSBhY2Nlc3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRpdGxlID0gdHJpbVRvRW1wdHkocmVjb3JkLnRpdGxlKTsgLy8gYWx3YXlzIGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVG9FbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiB0cmltVG9OdWxsKHZhbHVlKSA/PyBcIlwiO1xufVxuXG4vKipcbiAqIFRyaW0gdGhlIGZpcnN0IHVzYWJsZSBzdHJpbmcgb3V0IG9mIGB2YWx1ZWAuIFJldHVybnMgYG51bGxgIHdoZW5cbiAqIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAsIGBudWxsYCwgYW4gZW1wdHkgc3RyaW5nLCBvciBhbiBhcnJheSB3aG9zZVxuICogZmlyc3Qgc3RyaW5nIG1lbWJlciBpcyBlbXB0eS4gTWlycm9ycyBob3cgRXhwcmVzcyAvIE5vZGUgaGVhZGVyXG4gKiBhY2Nlc3NvcnMgZXhwb3NlIHNpbmdsZSB2cy4gcmVwZWF0ZWQgaGVhZGVycyAtIHRoZSBmaXJzdFxuICogbm9uLWVtcHR5IGVudHJ5IHdpbnMsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBpZ25vcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3ROb25FbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSB0cmltVG9OdWxsKGl0ZW0pO1xuICAgICAgaWYgKHRyaW1tZWQpIHJldHVybiB0cmltbWVkO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdHJpbVRvTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRoZSBmaXZlIGNoYXJhY3RlcnMgc2lnbmlmaWNhbnQgaW4gSFRNTCB0ZXh0IGFuZFxuICogZG91YmxlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVzIChgJmAsIGA8YCwgYD5gLCBgXCJgLCBgJ2ApIHNvIGFuXG4gKiB1bnRydXN0ZWQgc3RyaW5nIGNhbiBiZSBpbnRlcnBvbGF0ZWQgaW50byBtYXJrdXAgd2l0aG91dCBicmVha2luZ1xuICogb3V0IG9mIGl0cyBjb250ZXh0LiBgJmAgaXMgcmVwbGFjZWQgZmlyc3Qgc28gYW1wZXJzYW5kcyBpbnRyb2R1Y2VkXG4gKiBieSB0aGUgbGF0ZXIgcmVwbGFjZW1lbnRzIGFyZW4ndCBkb3VibGUtZXNjYXBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcbiAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcbiAgICAucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpO1xufVxuXG4vKipcbiAqIFNsdWdpZnkgYHZhbHVlYCAodXNpbmcgdGhlIHN0YW5kYXJkIHtAbGluayB0b0lkZW50aWZpZXJXaXRoT3B0aW9uc31cbiAqIHRva2VuaXplciArIGRlbGltaXRlciBydWxlcykgYW5kICoqYWx3YXlzKiogc3VmZml4IGEgc2hvcnRcbiAqIGRldGVybWluaXN0aWMgaGFzaC4gVXNlIHdoZW4geW91IG5lZWQgYSBzdGFibGUsIHNsdWdpZmllZCBpZCB0aGF0XG4gKiBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhY3Jvc3MgZGVzY3JpcHRpb25zIHNoYXJpbmcgdGhlIHNhbWVcbiAqIGxlYWRpbmcgdG9rZW5zICh0b29sIGlkcywgY2FjaGUga2V5cywgZXRjLikuXG4gKlxuICogQmVoYXZpb3VyIGRpZmZlcnMgZnJvbSBgdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoeyBtYXhMZW5ndGgsXG4gKiB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIiB9KWA6IHRoYXQgaGVscGVyIG9ubHkgYXBwZW5kcyBhIGhhc2ggd2hlblxuICogdGhlIHNsdWcgKm92ZXJmbG93cyogYG1heExlbmd0aGAuIFRoaXMgaGVscGVyIGFwcGVuZHMgYSBoYXNoXG4gKiB1bmNvbmRpdGlvbmFsbHkgc28gdGhlIHJlc3VsdCBpcyBjb2xsaXNpb24tcmVzaXN0YW50IGV2ZW4gZm9yXG4gKiBzaG9ydCBpbnB1dHMuIFRoZSBoYXNoIGlzIGNvbXB1dGVkIG92ZXIgdGhlIHJhdyBgdmFsdWVgIHNvIHR3b1xuICogZGVzY3JpcHRpb25zIHByb2R1Y2luZyB0aGUgc2FtZSBzbHVnIHN0aWxsIGdldCBkaWZmZXJlbnQgaWRzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFNvdXJjZSBzdHJpbmcgKHR5cGljYWxseSBhIHRvb2wvYWdlbnQgZGVzY3JpcHRpb24pLlxuICogQHBhcmFtIG9wdGlvbnMuZGVsaW1pdGVyIC0gVG9rZW4gc2VwYXJhdG9yIChkZWZhdWx0IGBcIl9cImApLlxuICogQHBhcmFtIG9wdGlvbnMuc2x1Z01heExlbmd0aCAtIENhcCBvbiB0aGUgc2x1ZyBwb3J0aW9uICh0aGUgcGFydFxuICogICBiZWZvcmUgdGhlIGhhc2gpLiBEZWZhdWx0IDMyLlxuICogQHBhcmFtIG9wdGlvbnMuaGFzaExlbmd0aCAtIExlbmd0aCBvZiB0aGUgc3VmZml4IHByb2R1Y2VkIGJ5XG4gKiAgIHtAbGluayBmbnZIYXNoV2l0aE9wdGlvbnN9IChDcm9ja2ZvcmQtc3R5bGUgYmFzZS0zMiBhbHBoYWJldCwgbWF4IDdcbiAqICAgY2hhcnMpLiBEZWZhdWx0IDYuXG4gKiBAcGFyYW0gb3B0aW9ucy5mYWxsYmFja1ByZWZpeCAtIFByZWZpeCB1c2VkIHdoZW4gdGhlIHNsdWcgaXMgZW1wdHlcbiAqICAgKGUuZy4gcHVuY3R1YXRpb24tb25seSBpbnB1dCkuIERlZmF1bHQgYFwiaWRcImAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VuaXF1ZVNsdWcoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICBkZWxpbWl0ZXI/OiBzdHJpbmc7XG4gICAgc2x1Z01heExlbmd0aD86IG51bWJlcjtcbiAgICBoYXNoTGVuZ3RoPzogbnVtYmVyO1xuICAgIGZhbGxiYWNrUHJlZml4Pzogc3RyaW5nO1xuICB9ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciA/PyBcIl9cIjtcbiAgY29uc3Qgc2x1Z01heExlbmd0aCA9IG9wdGlvbnMuc2x1Z01heExlbmd0aCA/PyAzMjtcbiAgY29uc3QgaGFzaExlbmd0aCA9IG9wdGlvbnMuaGFzaExlbmd0aCA/PyA2O1xuICBjb25zdCBmYWxsYmFja1ByZWZpeCA9IG9wdGlvbnMuZmFsbGJhY2tQcmVmaXggPz8gXCJpZFwiO1xuICBjb25zdCBzbHVnID0gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoXG4gICAgeyBkZWxpbWl0ZXIsIG1heExlbmd0aDogc2x1Z01heExlbmd0aCwgdHJ1bmNhdGVTdHJhdGVneTogXCJ0cmltXCIgfSxcbiAgICB2YWx1ZSxcbiAgKTtcbiAgY29uc3Qgc3VmZml4ID0gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoOiBoYXNoTGVuZ3RoIH0sIHZhbHVlKTtcbiAgcmV0dXJuIHNsdWcgPyBgJHtzbHVnfSR7ZGVsaW1pdGVyfSR7c3VmZml4fWAgOiBgJHtmYWxsYmFja1ByZWZpeH0ke2RlbGltaXRlcn0ke3N1ZmZpeH1gO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RUb2tlbnMobGVuZ3RoOiBudW1iZXIsIHBhcnRzOiByZWFkb25seSBzdHJpbmdbXSwgZXh0cmE/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY29tYmluZWQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIGNvbWJpbmVkICs9IHBhcnQgKyBcIlxcMFwiO1xuICBpZiAoZXh0cmEgIT09IHVuZGVmaW5lZCkgY29tYmluZWQgKz0gZXh0cmEgKyBcIlxcMFwiO1xuICByZXR1cm4gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoIH0sIGNvbWJpbmVkKTtcbn1cblxuLyoqXG4gKiBBIG5vZGUgaW4gdGhlIGRlc2NyaXB0aW9uIHRyZWUgY29uc3VtZWQgYnkge0BsaW5rIHRvRGVzY3JpcHRpb259LlxuICpcbiAqIC0gYHN0cmluZ2AgLSBhIHRleHQgcGFyYWdyYXBoLlxuICogLSBgRGVzY3JpcHRpb25bXWAgLSBhIHNlcXVlbmNlIG9mIHN0YWNrZWQgYmxvY2tzIGF0IHRoZSBzYW1lIGxldmVsXG4gKiAgIChubyBsaXN0IG1hcmtlcnMpLiBQbGFpbiB0ZXh0IGFkamFjZW50IHRvIGEgbGlzdCAoZWl0aGVyIGRpcmVjdGlvbilcbiAqICAgZmx1c2hlcyB0b2dldGhlciBzbyB0aGUgcHJvc2UgcmVhZHMgYXMgYSBsZWFkLWluIG9yIHRyYWlsaW5nXG4gKiAgIHN1bW1hcnkuIFR3byB0ZXh0IHBhcmFncmFwaHMsIHR3byBhZGphY2VudCBsaXN0cywgYW5kIGFueXRoaW5nXG4gKiAgIHRvdWNoaW5nIGEgbWFwIGdldCBhIGJsYW5rLWxpbmUgYnJlYWsuXG4gKiAtIGB7IGJ1bGxldHM6IFsuLi5dIH1gIC8gYHsgbnVtYmVyZWQ6IFsuLi5dIH1gIC0gZXhwbGljaXQgbGlzdC4gQVxuICogICBsaXN0IG9mIG9uZSBiYXJlIHN0cmluZyBkcm9wcyBpdHMgbWFya2VyIChgLWAgLyBgMS5gKTsgYSBsaXN0IG9mXG4gKiAgIG9uZSBpdGVtIHdpdGggbmVzdGVkIGNoaWxkcmVuIGtlZXBzIGl0cyBtYXJrZXIgYXMgdGhlIHZpc3VhbCBhbmNob3JcbiAqICAgZm9yIHRoZSBpbmRlbnRlZCBjaGlsZHJlbi5cbiAqIC0gYW55IG90aGVyIG9iamVjdCAtIGhlYWRlcnMgbWFwOiBlYWNoIGtleSBiZWNvbWVzIGEgYEhlYWRlcjpgIGxpbmVcbiAqICAgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGFuZCB0aGUgcmVuZGVyZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0aW9uID0gc3RyaW5nIHwgcmVhZG9ubHkgRGVzY3JpcHRpb25bXSB8IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogRGVzY3JpcHRpb24gfTtcblxuY29uc3QgTElTVF9LRVlTID0gW1wiYnVsbGV0c1wiLCBcIm51bWJlcmVkXCJdIGFzIGNvbnN0O1xudHlwZSBMaXN0S2luZCA9ICh0eXBlb2YgTElTVF9LRVlTKVtudW1iZXJdO1xuXG4vKipcbiAqIEZvcm1hdCBhIG5lc3RlZCBkZXNjcmlwdGlvbiB0cmVlIGFzIGEgTWFya2Rvd24taXNoIHN0cmluZyBzdWl0YWJsZVxuICogZm9yIGFuIExMTSBzeXN0ZW0gcHJvbXB0LCBab2QgYC5kZXNjcmliZSgpYCBibG9jaywgTWFzdHJhIHRvb2xcbiAqIGRlc2NyaXB0aW9uLCBvciBhbnkgb3RoZXIgbG9uZy1mb3JtIHRleHQgZGVzdGluYXRpb24uXG4gKlxuICogRXZlcnkgc3RyaW5nIHNlY3Rpb24gaXMgZGVkZW50ZWQgKGNvbW1vbiBsZWFkaW5nIHdoaXRlc3BhY2Ugc3RyaXBwZWQpLFxuICogcmlnaHQtdHJpbW1lZCBsaW5lIGJ5IGxpbmUsIGFuZCBmcmVlZCBvZiBsZWFkaW5nIC8gdHJhaWxpbmcgYmxhbmtcbiAqIGxpbmVzLCBzbyBjYWxsZXJzIGNhbiB3cml0ZSBtdWx0aS1saW5lIHRlbXBsYXRlIGxpdGVyYWxzIGluZGVudGVkXG4gKiBuYXR1cmFsbHkgaW4gc291cmNlIHdpdGhvdXQgbGVha2luZyB0aGF0IGluZGVudGF0aW9uIGludG8gdGhlXG4gKiBjb25zdW1lci1mYWNpbmcgb3V0cHV0LiBQbGFpbi1zdHJpbmcgaW5wdXRzIGZsb3cgdGhyb3VnaCB1bmNoYW5nZWRcbiAqIGFwYXJ0IGZyb20gdGhlIHNhbWUgbm9ybWFsaXphdGlvbiBwYXNzLCBzbyBhIHNpbmdsZSBtdWx0aS1saW5lXG4gKiB0ZW1wbGF0ZSBsaXRlcmFsIHdvcmtzIGRpcmVjdGx5OlxuICpcbiAqIGBgYHRzXG4gKiB0b0Rlc2NyaXB0aW9uKGBcbiAqICAgQXNrIHRoZSBHZW5pZSBzcGFjZSBcIiR7YWxpYXN9XCIgYSBxdWVzdGlvbi5cbiAqICAgUGFzcyB0aGUgYW5zd2VyIHRocm91Z2ggYXMtaXMuXG4gKiBgKTtcbiAqIC8vIEFzayB0aGUgR2VuaWUgc3BhY2UgXCJkZWZhdWx0XCIgYSBxdWVzdGlvbi5cbiAqIC8vIFBhc3MgdGhlIGFuc3dlciB0aHJvdWdoIGFzLWlzLlxuICpcbiAqIHRvRGVzY3JpcHRpb24oW1xuICogICBgXG4gKiAgICAgQXNrIHRoZSBHZW5pZSBzcGFjZSBhIHF1ZXN0aW9uLlxuICogICAgIFBocmFzZSBpdCBmcm9tIHRoZSB1c2VyJ3MgcGVyc3BlY3RpdmUuXG4gKiAgIGAsXG4gKiAgIHsgYnVsbGV0czogW1xuICogICAgIFtcIlBhc3MgdGhlIGFuc3dlciB0aHJvdWdoIGFzLWlzXCIsIHsgbnVtYmVyZWQ6IFtcIml0ZW1cIiwgXCJpdGVtXCJdIH1dLFxuICogICBdfSxcbiAqICAgeyBJbnN0cnVjdGlvbnM6IFwiUmVwbHkgd2l0aCB0aGUgU1FMIG9ubHkuXCIgfSxcbiAqIF0pO1xuICogLy8gQXNrIHRoZSBHZW5pZSBzcGFjZSBhIHF1ZXN0aW9uLlxuICogLy8gUGhyYXNlIGl0IGZyb20gdGhlIHVzZXIncyBwZXJzcGVjdGl2ZS5cbiAqIC8vIC0gUGFzcyB0aGUgYW5zd2VyIHRocm91Z2ggYXMtaXNcbiAqIC8vICAgMS4gaXRlbVxuICogLy8gICAyLiBpdGVtXG4gKiAvL1xuICogLy8gSW5zdHJ1Y3Rpb25zOlxuICogLy9cbiAqIC8vIFJlcGx5IHdpdGggdGhlIFNRTCBvbmx5LlxuICogYGBgXG4gKlxuICogU2VlIHtAbGluayBEZXNjcmlwdGlvbn0gZm9yIHRoZSBub2RlIGdyYW1tYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0aW9uKG5vZGU6IERlc2NyaXB0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbmRlckJsb2NrKG5vZGUsIFwiXCIpXG4gICAgLnJlcGxhY2UoL1sgXFx0XSskL2dtLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9cXG4rJC8sIFwiXCIpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJCbG9jayhub2RlOiBEZXNjcmlwdGlvbiwgcGFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcHJlcGVuZFBhZChkZWRlbnRTZWN0aW9uKG5vZGUpLCBwYWQpO1xuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgcmV0dXJuIHJlbmRlclNlcXVlbmNlKG5vZGUsIHBhZCk7XG4gIGNvbnN0IGtpbmQgPSBsaXN0S2luZChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgaWYgKGtpbmQpIHtcbiAgICByZXR1cm4gcmVuZGVyTGlzdCgobm9kZSBhcyBSZWNvcmQ8TGlzdEtpbmQsIHJlYWRvbmx5IERlc2NyaXB0aW9uW10+KVtraW5kXSwgcGFkLCBraW5kKTtcbiAgfVxuICByZXR1cm4gcmVuZGVyTWFwKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgRGVzY3JpcHRpb24+LCBwYWQpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHN0cmluZyBzZWN0aW9uOiByaWdodC1zdHJpcCBldmVyeSBsaW5lLCBkcm9wIHRoZVxuICogY29tbW9uIGxlYWRpbmctd2hpdGVzcGFjZSBwcmVmaXggc2hhcmVkIGJ5IGFsbCBub24tYmxhbmsgbGluZXMsXG4gKiBhbmQgdHJpbSBsZWFkaW5nIC8gdHJhaWxpbmcgYmxhbmsgbGluZXMuIE1hdGNoZXMgUHl0aG9uJ3NcbiAqIGB0ZXh0d3JhcC5kZWRlbnRgIHNlbWFudGljcyBzbyBlbWJlZGRlZCBpbmRlbnRlZCB0ZW1wbGF0ZVxuICogbGl0ZXJhbHMgcm91bmQtdHJpcCBjbGVhbmx5LlxuICovXG5mdW5jdGlvbiBkZWRlbnRTZWN0aW9uKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKS5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZSgvWyBcXHRdKyQvLCBcIlwiKSk7XG4gIGxldCBtaW4gPSBJbmZpbml0eTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYgKCFsaW5lKSBjb250aW51ZTtcbiAgICBjb25zdCBtYXRjaCA9IC9eWyBcXHRdKi8uZXhlYyhsaW5lKTtcbiAgICBjb25zdCB3aWR0aCA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICBpZiAod2lkdGggPCBtaW4pIG1pbiA9IHdpZHRoO1xuICB9XG4gIGNvbnN0IHN0cmlwcGVkID1cbiAgICBtaW4gPT09IEluZmluaXR5IHx8IG1pbiA9PT0gMCA/IGxpbmVzIDogbGluZXMubWFwKChsaW5lKSA9PiAobGluZSA/IGxpbmUuc2xpY2UobWluKSA6IFwiXCIpKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IHN0cmlwcGVkLmxlbmd0aDtcbiAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmICFzdHJpcHBlZFtzdGFydF0pIHN0YXJ0ICs9IDE7XG4gIHdoaWxlIChlbmQgPiBzdGFydCAmJiAhc3RyaXBwZWRbZW5kIC0gMV0pIGVuZCAtPSAxO1xuICByZXR1cm4gc3RyaXBwZWQuc2xpY2Uoc3RhcnQsIGVuZCkuam9pbihcIlxcblwiKTtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgaXMgdHJlYXRlZCBhcyBhIHR5cGVkIGxpc3Qgb25seSB3aGVuIGl0IGhhcyBleGFjdGx5IG9uZVxuICogb3duIGtleSwgdGhhdCBrZXkgaXMgYGJ1bGxldHNgIG9yIGBudW1iZXJlZGAsIGFuZCB0aGUgdmFsdWUgaXMgYW5cbiAqIGFycmF5LiBFdmVyeXRoaW5nIGVsc2UgaXMgYSBoZWFkZXJzIG1hcCAtIHNvIGNhbGxlcnMgd2FudGluZyBhXG4gKiBzaW5nbGUgaGVhZGVyIGxpdGVyYWxseSBuYW1lZCBgYnVsbGV0c2Agb3IgYG51bWJlcmVkYCBjYW4gdXNlIGFcbiAqIG11bHRpLWtleSBtYXAgb3IgcmVuYW1lLlxuICovXG5mdW5jdGlvbiBsaXN0S2luZChub2RlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IExpc3RLaW5kIHwgbnVsbCB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcbiAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5ID0ga2V5c1swXSE7XG4gIGlmICgoTElTVF9LRVlTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhrZXkpICYmIEFycmF5LmlzQXJyYXkobm9kZVtrZXldKSkge1xuICAgIHJldHVybiBrZXkgYXMgTGlzdEtpbmQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmRQYWQodGV4dDogc3RyaW5nLCBwYWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIGlmICghcGFkKSByZXR1cm4gdGV4dDtcbiAgcmV0dXJuIHRleHRcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiAobGluZSA/IHBhZCArIGxpbmUgOiBcIlwiKSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU2VxdWVuY2UoaXRlbXM6IHJlYWRvbmx5IERlc2NyaXB0aW9uW10sIHBhZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVuZGVyZWQ6IHsgdGV4dDogc3RyaW5nOyBub2RlOiBEZXNjcmlwdGlvbiB9W10gPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdGV4dCA9IHJlbmRlckJsb2NrKGl0ZW0sIHBhZCk7XG4gICAgaWYgKCF0ZXh0KSBjb250aW51ZTtcbiAgICByZW5kZXJlZC5wdXNoKHsgdGV4dCwgbm9kZTogaXRlbSB9KTtcbiAgfVxuICBpZiAocmVuZGVyZWQubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgbGV0IG91dCA9IHJlbmRlcmVkWzBdIS50ZXh0O1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHJlbmRlcmVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qgc2VwID0gbmVlZHNCbGFua0xpbmVCZXR3ZWVuKHJlbmRlcmVkW2kgLSAxXSEubm9kZSwgcmVuZGVyZWRbaV0hLm5vZGUpID8gXCJcXG5cXG5cIiA6IFwiXFxuXCI7XG4gICAgb3V0ICs9IHNlcCArIHJlbmRlcmVkW2ldIS50ZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogTWFwcyBhbHdheXMgY3JlYXRlIHRoZWlyIG93biBzZWN0aW9uIGJvdW5kYXJ5IChhIGBIZWFkZXI6YCBsaW5lIHBsdXNcbiAqIGEgYmxhbmsgbGluZSBiZWZvcmUgdGhlIGJvZHkpLCBzbyBhbnl0aGluZyB0b3VjaGluZyBhIG1hcCBnZXRzIGFcbiAqIGJsYW5rLWxpbmUgYnJlYWsuIFBsYWluIHRleHQgYWRqYWNlbnQgdG8gYSB0eXBlZCBsaXN0IGZsdXNoZXNcbiAqIHRvZ2V0aGVyIGluIGVpdGhlciBkaXJlY3Rpb246IHRleHQtYmVmb3JlLWxpc3QgcmVhZHMgYXMgYSBsZWFkLWluLFxuICogdGV4dC1hZnRlci1saXN0IGFzIGEgdHJhaWxpbmcgc3VtbWFyeS4gVHdvIHRleHQgcGFyYWdyYXBocyBhbmQgdHdvXG4gKiBhZGphY2VudCBsaXN0cyBib3RoIGdldCBhIGJsYW5rLWxpbmUgYnJlYWsgZm9yIGxlZ2liaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIG5lZWRzQmxhbmtMaW5lQmV0d2VlbihwcmV2OiBEZXNjcmlwdGlvbiwgY3VycjogRGVzY3JpcHRpb24pOiBib29sZWFuIHtcbiAgaWYgKGlzTWFwKHByZXYpIHx8IGlzTWFwKGN1cnIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcHJldklzVGV4dCA9IHR5cGVvZiBwcmV2ID09PSBcInN0cmluZ1wiO1xuICBjb25zdCBjdXJySXNUZXh0ID0gdHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCI7XG4gIGlmIChwcmV2SXNUZXh0ICE9PSBjdXJySXNUZXh0KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEEgbm9kZSBpcyBhIGhlYWRlcnMgbWFwIHdoZW4gaXQgaXMgYSBub24tYXJyYXksIG5vbi1saXN0IG9iamVjdC5cbiAqIGBidWxsZXRzYCAvIGBudW1iZXJlZGAgc2luZ2xlLWtleSBvYmplY3RzIGFyZSB0aGUgb25seSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3RzIHRoYXQgYXJlbid0IG1hcHMuXG4gKi9cbmZ1bmN0aW9uIGlzTWFwKG5vZGU6IERlc2NyaXB0aW9uKTogYm9vbGVhbiB7XG4gIGlmIChub2RlID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBsaXN0S2luZChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTGlzdChpdGVtczogcmVhZG9ubHkgRGVzY3JpcHRpb25bXSwgcGFkOiBzdHJpbmcsIGtpbmQ6IExpc3RLaW5kKTogc3RyaW5nIHtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGl0ZW1zWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHByZXBlbmRQYWQoaXRlbXNbMF0sIHBhZCk7XG4gIH1cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0hO1xuICAgIGNvbnN0IG1hcmtlciA9IGtpbmQgPT09IFwiYnVsbGV0c1wiID8gXCItIFwiIDogYCR7aSArIDF9LiBgO1xuICAgIGNvbnN0IGJvZHkgPSByZW5kZXJCbG9jayhpdGVtLCBcIlwiKTtcbiAgICBjb25zdCBib2R5TGluZXMgPSBib2R5LnNwbGl0KFwiXFxuXCIpO1xuICAgIGxpbmVzLnB1c2goYCR7cGFkfSR7bWFya2VyfSR7Ym9keUxpbmVzWzBdID8/IFwiXCJ9YCk7XG4gICAgY29uc3QgY29udGludWF0aW9uID0gcGFkICsgXCIgXCIucmVwZWF0KG1hcmtlci5sZW5ndGgpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBib2R5TGluZXMuc2xpY2UoMSkpIHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSA/IGAke2NvbnRpbnVhdGlvbn0ke2xpbmV9YCA6IFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTWFwKG5vZGU6IFJlY29yZDxzdHJpbmcsIERlc2NyaXB0aW9uPiwgcGFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBbaGVhZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICBjb25zdCBib2R5ID0gcmVuZGVyQmxvY2sodmFsdWUsIHBhZCk7XG4gICAgaWYgKCFib2R5ICYmICFoZWFkZXIudHJpbSgpKSBjb250aW51ZTtcbiAgICBjb25zdCBoZWFkZXJMaW5lID0gaGVhZGVyLnRyaW0oKSA/IGAke3BhZH0ke2hlYWRlcn06YCA6IFwiXCI7XG4gICAgcGFydHMucHVzaChib2R5ID8gYCR7aGVhZGVyTGluZX1cXG5cXG4ke2JvZHl9YCA6IGhlYWRlckxpbmUpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIGNvdW50IHdpdGggaXRzIG5vdW4sIHBsdXJhbGl6aW5nIChuYWl2ZSBgK3NgKSB1bmxlc3MgdGhlIGNvdW50IGlzIDE6XG4gKiBgcGx1cmFsaXplKDEsIFwiYmFycmVsXCIpYCAtPiBgXCIxIGJhcnJlbFwiYCwgYHBsdXJhbGl6ZSgzLCBcImJhcnJlbFwiKWAgLT5cbiAqIGBcIjMgYmFycmVsc1wiYC4gQ29sbGFwc2VzIHRoZSBgJHtufSBub3VuJHtuID09PSAxID8gXCJcIiA6IFwic1wifWAgaWRpb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVyYWxpemUoY291bnQ6IG51bWJlciwgbm91bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2NvdW50fSAke25vdW59JHtjb3VudCA9PT0gMSA/IFwiXCIgOiBcInNcIn1gO1xufVxuXG4vKipcbiAqIFRpdGxlLWNhc2UgYSBzbmFrZSAvIGtlYmFiIC8gY2FtZWwgaWRlbnRpZmllciBpbnRvIGEgaHVtYW4tcmVhZGFibGUgbGFiZWw6XG4gKiB0b2tlbml6ZSAobG93ZXJjYXNlZCwgY2FwaXRhbGl6ZWQpLCB0aGVuIGpvaW4gd2l0aCBzcGFjZXMuIEZhbGxzIGJhY2sgdG9cbiAqIHRoZSByYXcgYHZhbHVlYCB3aGVuIGl0IHlpZWxkcyBubyB0b2tlbnMgKGUuZy4gcHVuY3R1YXRpb24tb25seSBpbnB1dCkuXG4gKiBgYmdlX2xhcmdlX2VuYCAtPiBgXCJCZ2UgTGFyZ2UgRW5cImAsIGBwcm9tcHRJZGAgLT4gYFwiUHJvbXB0IElkXCJgLlxuICpcbiAqIFRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgXCJodW1hbml6ZSBhIGNvbHVtbiAvIGZpZWxkIG5hbWVcIiBpZGlvbSAtXG4gKiByZXVzZWQgYnkgdGhlIGNoYXQgZGF0YS1ncmlkIGhlYWRlcnMgYW5kIHRoZSBleHBvcnQgcmVuZGVyZXIuIEV4dHJhXG4gKiB7QGxpbmsgVG9rZW5pemVPcHRpb25zfSAoZS5nLiBgY2FtZWxDYXNlOiBmYWxzZWApIG1lcmdlIG92ZXIgdGhlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9MYWJlbCh2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogVG9rZW5pemVPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zID0gWy4uLnRva2VuaXplV2l0aE9wdGlvbnMoeyBsb3dlckNhc2U6IHRydWUsIGNhcGl0YWxpemU6IHRydWUsIC4uLm9wdGlvbnMgfSwgdmFsdWUpXTtcbiAgcmV0dXJuIHRva2Vucy5sZW5ndGggPiAwID8gdG9rZW5zLmpvaW4oXCIgXCIpIDogdmFsdWU7XG59XG5cbi8qKlxuICogVXBwZXItY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGB2YWx1ZWAsIGxlYXZpbmcgdGhlIHJlc3QgdW50b3VjaGVkLlxuICogYFwid29ya2luZ1wiYCAtPiBgXCJXb3JraW5nXCJgLiBDb2xsYXBzZXMgdGhlXG4gKiBgcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSlgIGlkaW9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlID8gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKSA6IHZhbHVlO1xufVxuIl19
@@ -13,7 +13,7 @@ import { type HeaderLike } from "./http.ts";
13
13
  *
14
14
  * Exported because it is a wire contract several packages branch on, not just a
15
15
  * default argument: `@dbx-tools/appkit`'s `identity` module decides whether a
16
- * request can use OBO auth at all by its presence, and `@dbx-tools/cli-tunnel`
16
+ * request can use OBO auth at all by its presence, and `@dbx-tools/tunnel`
17
17
  * must know the name to strip inbound copies of it. One spelling, one place.
18
18
  */
19
19
  export declare const ACCESS_TOKEN_HEADER = "x-forwarded-access-token";
package/lib/src/token.js CHANGED
@@ -18,7 +18,7 @@ const log = logger("shared/token");
18
18
  *
19
19
  * Exported because it is a wire contract several packages branch on, not just a
20
20
  * default argument: `@dbx-tools/appkit`'s `identity` module decides whether a
21
- * request can use OBO auth at all by its presence, and `@dbx-tools/cli-tunnel`
21
+ * request can use OBO auth at all by its presence, and `@dbx-tools/tunnel`
22
22
  * must know the name to strip inbound copies of it. One spelling, one place.
23
23
  */
24
24
  export const ACCESS_TOKEN_HEADER = "x-forwarded-access-token";
@@ -137,4 +137,4 @@ function* iterateClaims(input, distinct = true) {
137
137
  }
138
138
  yield* visit(input);
139
139
  }
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbEQsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUM7QUFDMUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVuQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLDBCQUEwQixDQUFDO0FBRTlELDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7QUFFakQsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO0FBRXJEOzs7R0FHRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsT0FBZTtJQUN2QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxD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QU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QixLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEpXVCBhY2Nlc3MtdG9rZW4gaGVscGVycyBmb3IgRGF0YWJyaWNrcyBBcHBzLlxuICpcbiAqIFBhcnNlcyBiZWFyZXIgdG9rZW5zIGFuZCBgeC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuYCBwYXlsb2FkcyB0byByZWFkXG4gKiBPQXV0aCBzY29wZXMgYW5kIG90aGVyIGNsYWltcyBmcm9tIGluY29taW5nIEhUVFAgcmVxdWVzdHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGZvckVhY2hIZWFkZXJWYWx1ZSwgdHlwZSBIZWFkZXJMaWtlIH0gZnJvbSBcIi4vaHR0cC50c1wiO1xuaW1wb3J0ICogYXMganNvbiBmcm9tIFwiLi9qc29uLnRzXCI7XG5pbXBvcnQgeyBpc0xldmVsRW5hYmxlZCwgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nLnRzXCI7XG5cbmNvbnN0IEJFQVJFUl9QUkVGSVhfUkVHRVggPSAvXmJlYXJlclxccysvaTtcbmNvbnN0IFNQTElUX1JFR0VYID0gL1xccyt8XFxzKixcXHMqLztcbmNvbnN0IGxvZyA9IGxvZ2dlcihcInNoYXJlZC90b2tlblwiKTtcblxuLyoqXG4gKiBIZWFkZXIgdGhlIERhdGFicmlja3MgQXBwcyBmcm9udCBkb29yIGZvcndhcmRzIHRoZSBjYWxsZXIncyBPQXV0aCAoT0JPKSB0b2tlblxuICogb24gLSB0aGUgZGVmYXVsdCBzb3VyY2UgZm9yIGV2ZXJ5IGhlbHBlciBoZXJlLlxuICpcbiAqIEV4cG9ydGVkIGJlY2F1c2UgaXQgaXMgYSB3aXJlIGNvbnRyYWN0IHNldmVyYWwgcGFja2FnZXMgYnJhbmNoIG9uLCBub3QganVzdCBhXG4gKiBkZWZhdWx0IGFyZ3VtZW50OiBgQGRieC10b29scy9hcHBraXRgJ3MgYGlkZW50aXR5YCBtb2R1bGUgZGVjaWRlcyB3aGV0aGVyIGFcbiAqIHJlcXVlc3QgY2FuIHVzZSBPQk8gYXV0aCBhdCBhbGwgYnkgaXRzIHByZXNlbmNlLCBhbmQgYEBkYngtdG9vbHMvY2xpLXR1bm5lbGBcbiAqIG11c3Qga25vdyB0aGUgbmFtZSB0byBzdHJpcCBpbmJvdW5kIGNvcGllcyBvZiBpdC4gT25lIHNwZWxsaW5nLCBvbmUgcGxhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBBQ0NFU1NfVE9LRU5fSEVBREVSID0gXCJ4LWZvcndhcmRlZC1hY2Nlc3MtdG9rZW5cIjtcblxuLyoqIEhlYWRlciB0aGUgZnJvbnQgZG9vciBmb3J3YXJkcyB0aGUgY2FsbGVyJ3MgdXNlciBpZCBvbi4gKi9cbmV4cG9ydCBjb25zdCBVU0VSX0lEX0hFQURFUiA9IFwieC1mb3J3YXJkZWQtdXNlclwiO1xuXG4vKiogSGVhZGVyIHRoZSBmcm9udCBkb29yIGZvcndhcmRzIHRoZSBjYWxsZXIncyBlbWFpbCBvbi4gKi9cbmV4cG9ydCBjb25zdCBVU0VSX0VNQUlMX0hFQURFUiA9IFwieC1mb3J3YXJkZWQtZW1haWxcIjtcblxuLyoqXG4gKiBEZWNvZGUgYSBKV1Qgc2VnbWVudCAoYmFzZTY0dXJsIHdpdGggc3RhbmRhcmQgYmFzZTY0IHBhZGRpbmcpLCBvclxuICogYHVuZGVmaW5lZGAgd2hlbiB0aGUgc2VnbWVudCBpcyBub3QgdmFsaWQgYmFzZTY0LlxuICovXG5mdW5jdGlvbiBkZWNvZGVKd3RTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBzZWdtZW50LnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpO1xuICBjb25zdCBwYWRkZWQgPSBub3JtYWxpemVkICsgXCI9XCIucmVwZWF0KCg0IC0gKG5vcm1hbGl6ZWQubGVuZ3RoICUgNCkpICUgNCk7XG4gIHRyeSB7XG4gICAgY29uc3QgYmluYXJ5ID0gYXRvYihwYWRkZWQpO1xuICAgIGNvbnN0IGJ5dGVzID0gVWludDhBcnJheS5mcm9tKGJpbmFyeSwgKGNoKSA9PiBjaC5jaGFyQ29kZUF0KDApKTtcbiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIERlY29kZSB0aGUgSldUIHBheWxvYWQgZnJvbSBhIGJlYXJlciB0b2tlbiBzdHJpbmcgb3IgcmVxdWVzdCBoZWFkZXJzLlxuICpcbiAqIFdoZW4gYGlucHV0YCBpcyBoZWFkZXItbGlrZSwgd2Fsa3MgZXZlcnkgdmFsdWUgZm9yIGBoZWFkZXJOYW1lYCAoZGVmYXVsdFxuICogYHgtZm9yd2FyZGVkLWFjY2Vzcy10b2tlbmApIGFuZCBtZXJnZXMgY2xhaW0ga2V5cyBsZWZ0LXRvLXJpZ2h0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW5QYXlsb2FkKFxuICBpbnB1dDogSGVhZGVyTGlrZSB8IHN0cmluZyxcbiAgaGVhZGVyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gQUNDRVNTX1RPS0VOX0hFQURFUixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgbGV0IGFjY2Vzc1Rva2VuUGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGlmICghKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICBpZiAoaGVhZGVyTmFtZSkge1xuICAgICAgZm9yRWFjaEhlYWRlclZhbHVlKGlucHV0LCBoZWFkZXJOYW1lLCAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtwYXlsb2FkS2V5LCBwYXlsb2FkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGdldEFjY2Vzc1Rva2VuUGF5bG9hZCh2YWx1ZSkpKSB7XG4gICAgICAgICAgaWYgKCFhY2Nlc3NUb2tlblBheWxvYWQgfHwgIShwYXlsb2FkS2V5IGluIGFjY2Vzc1Rva2VuUGF5bG9hZCkpIHtcbiAgICAgICAgICAgIGlmICghYWNjZXNzVG9rZW5QYXlsb2FkKSBhY2Nlc3NUb2tlblBheWxvYWQgPSB7fTtcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuUGF5bG9hZFtwYXlsb2FkS2V5XSA9IHBheWxvYWRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpbnB1dCA9IGlucHV0LnRyaW0oKTtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gQkVBUkVSX1BSRUZJWF9SRUdFWC5leGVjKGlucHV0KTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKGVuZEluZGV4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoXCIuXCIsIDQpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMiB8fCBwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gQSBtYWxmb3JtZWQgc2VnbWVudCB5aWVsZHMgdW5kZWZpbmVkOyBmYWxsIHRocm91Z2ggdG8gZW1wdHkgb2JqZWN0LlxuICAgICAgICBhY2Nlc3NUb2tlblBheWxvYWQgPSBqc29uLnBhcnNlUmVjb3JkKGRlY29kZUp3dFNlZ21lbnQocGFydHNbMV0hKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghYWNjZXNzVG9rZW5QYXlsb2FkKSBhY2Nlc3NUb2tlblBheWxvYWQgPSB7fTtcbiAgbG9nLmRlYnVnKFwiZ2V0QWNjZXNzVG9rZW5QYXlsb2FkXCIsIHsgYWNjZXNzVG9rZW5QYXlsb2FkIH0pO1xuICByZXR1cm4gYWNjZXNzVG9rZW5QYXlsb2FkO1xufVxuXG4vKipcbiAqIE9BdXRoIHNjb3BlcyBmcm9tIHRoZSBhY2Nlc3MtdG9rZW4gSldUIG9uIGBpbnB1dGAuXG4gKlxuICogRGVmYXVsdHMgdG8gdGhlIGB4LWZvcndhcmRlZC1hY2Nlc3MtdG9rZW5gIGhlYWRlciwgd2hpY2ggRGF0YWJyaWNrcyBBcHBzXG4gKiBmb3J3YXJkIGZyb20gdGhlIGJyb3dzZXIgc2Vzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuU2NvcGVzKFxuICBpbnB1dDogSGVhZGVyTGlrZSB8IHN0cmluZyxcbiAgaGVhZGVyTmFtZT86IHN0cmluZyxcbik6IEl0ZXJhYmxlPHN0cmluZz4ge1xuICBjb25zdCBwYXlsb2FkID0gZ2V0QWNjZXNzVG9rZW5QYXlsb2FkKGlucHV0LCBoZWFkZXJOYW1lKTtcbiAgbGV0IGFjY2Vzc1Rva2VuU2NvcGVzOiBJdGVyYWJsZTxzdHJpbmc+ID0gaXRlcmF0ZUNsYWltcyhwYXlsb2FkLnNjb3BlKTtcbiAgaWYgKGlzTGV2ZWxFbmFibGVkKFwiZGVidWdcIikpIHtcbiAgICBhY2Nlc3NUb2tlblNjb3BlcyA9IEFycmF5LmZyb20oYWNjZXNzVG9rZW5TY29wZXMpO1xuICAgIGxvZy5kZWJ1ZyhcImdldEFjY2Vzc1Rva2VuU2NvcGVzXCIsIHsgYWNjZXNzVG9rZW5TY29wZXMgfSk7XG4gIH1cbiAgcmV0dXJuIGFjY2Vzc1Rva2VuU2NvcGVzO1xufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIHdoZW4gYHNjb3Blc2AgY29udGFpbnMgYW55IHZhbHVlIGZyb20gYGFsbG93ZWRgLlxuICpcbiAqIEFjY2VwdHMgdGhlIHJhdyB7QGxpbmsgTUFTVFJBX1NDT1BFU19LRVl9IGFycmF5IHN0YW1wZWQgb25cbiAqIGBSZXF1ZXN0Q29udGV4dGAgYXMgd2VsbCBhcyBpdGVyYWJsZXMgZnJvbSB7QGxpbmsgZ2V0QWNjZXNzVG9rZW5TY29wZXN9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXNBY2Nlc3NUb2tlblNjb3BlKHNjb3BlczogdW5rbm93biwgYWxsb3dlZDogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgaWYgKGFsbG93ZWQubGVuZ3RoKSB7XG4gICAgZm9yIChjb25zdCBzY29wZSBvZiBpdGVyYXRlQ2xhaW1zKHNjb3BlcykpIHtcbiAgICAgIGlmIChhbGxvd2VkLmluY2x1ZGVzKHNjb3BlKSkge1xuICAgICAgICBsb2cuZGVidWcoXCJpbmNsdWRlc0FjY2Vzc1Rva2VuU2NvcGVcIiwgeyBzY29wZSwgYWxsb3dlZCB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIFNwbGl0IGEgSldUIGBzY29wZWAgY2xhaW0gc3RyaW5nIG9yIGFycmF5IGludG8gaW5kaXZpZHVhbCBzY29wZSB0b2tlbnMuICovXG5mdW5jdGlvbiogaXRlcmF0ZUNsYWltcyhpbnB1dDogdW5rbm93biwgZGlzdGluY3QgPSB0cnVlKTogSXRlcmFibGU8c3RyaW5nPiB7XG4gIGNvbnN0IHNlZW4gPSBkaXN0aW5jdCA/IG5ldyBTZXQ8c3RyaW5nPigpIDogdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uKiB2aXNpdCh2YWx1ZTogdW5rbm93bik6IEl0ZXJhYmxlPHN0cmluZz4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZvciAoY29uc3QgY2xhaW0gb2YgdmFsdWUuc3BsaXQoU1BMSVRfUkVHRVgpKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gY2xhaW0udHJpbSgpO1xuICAgICAgICBpZiAoIXRva2VuIHx8IHNlZW4/Lmhhcyh0b2tlbikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzZWVuPy5hZGQodG9rZW4pO1xuICAgICAgICB5aWVsZCB0b2tlbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgeWllbGQqIHZpc2l0KGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHlpZWxkKiB2aXNpdChpbnB1dCk7XG59XG4iXX0=
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbEQsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUM7QUFDMUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVuQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLDBCQUEwQixDQUFDO0FBRTlELDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7QUFFakQsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO0FBRXJEOzs7R0FHRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsT0FBZTtJQUN2QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxD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QU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QixLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEpXVCBhY2Nlc3MtdG9rZW4gaGVscGVycyBmb3IgRGF0YWJyaWNrcyBBcHBzLlxuICpcbiAqIFBhcnNlcyBiZWFyZXIgdG9rZW5zIGFuZCBgeC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuYCBwYXlsb2FkcyB0byByZWFkXG4gKiBPQXV0aCBzY29wZXMgYW5kIG90aGVyIGNsYWltcyBmcm9tIGluY29taW5nIEhUVFAgcmVxdWVzdHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGZvckVhY2hIZWFkZXJWYWx1ZSwgdHlwZSBIZWFkZXJMaWtlIH0gZnJvbSBcIi4vaHR0cC50c1wiO1xuaW1wb3J0ICogYXMganNvbiBmcm9tIFwiLi9qc29uLnRzXCI7XG5pbXBvcnQgeyBpc0xldmVsRW5hYmxlZCwgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nLnRzXCI7XG5cbmNvbnN0IEJFQVJFUl9QUkVGSVhfUkVHRVggPSAvXmJlYXJlclxccysvaTtcbmNvbnN0IFNQTElUX1JFR0VYID0gL1xccyt8XFxzKixcXHMqLztcbmNvbnN0IGxvZyA9IGxvZ2dlcihcInNoYXJlZC90b2tlblwiKTtcblxuLyoqXG4gKiBIZWFkZXIgdGhlIERhdGFicmlja3MgQXBwcyBmcm9udCBkb29yIGZvcndhcmRzIHRoZSBjYWxsZXIncyBPQXV0aCAoT0JPKSB0b2tlblxuICogb24gLSB0aGUgZGVmYXVsdCBzb3VyY2UgZm9yIGV2ZXJ5IGhlbHBlciBoZXJlLlxuICpcbiAqIEV4cG9ydGVkIGJlY2F1c2UgaXQgaXMgYSB3aXJlIGNvbnRyYWN0IHNldmVyYWwgcGFja2FnZXMgYnJhbmNoIG9uLCBub3QganVzdCBhXG4gKiBkZWZhdWx0IGFyZ3VtZW50OiBgQGRieC10b29scy9hcHBraXRgJ3MgYGlkZW50aXR5YCBtb2R1bGUgZGVjaWRlcyB3aGV0aGVyIGFcbiAqIHJlcXVlc3QgY2FuIHVzZSBPQk8gYXV0aCBhdCBhbGwgYnkgaXRzIHByZXNlbmNlLCBhbmQgYEBkYngtdG9vbHMvdHVubmVsYFxuICogbXVzdCBrbm93IHRoZSBuYW1lIHRvIHN0cmlwIGluYm91bmQgY29waWVzIG9mIGl0LiBPbmUgc3BlbGxpbmcsIG9uZSBwbGFjZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19UT0tFTl9IRUFERVIgPSBcIngtZm9yd2FyZGVkLWFjY2Vzcy10b2tlblwiO1xuXG4vKiogSGVhZGVyIHRoZSBmcm9udCBkb29yIGZvcndhcmRzIHRoZSBjYWxsZXIncyB1c2VyIGlkIG9uLiAqL1xuZXhwb3J0IGNvbnN0IFVTRVJfSURfSEVBREVSID0gXCJ4LWZvcndhcmRlZC11c2VyXCI7XG5cbi8qKiBIZWFkZXIgdGhlIGZyb250IGRvb3IgZm9yd2FyZHMgdGhlIGNhbGxlcidzIGVtYWlsIG9uLiAqL1xuZXhwb3J0IGNvbnN0IFVTRVJfRU1BSUxfSEVBREVSID0gXCJ4LWZvcndhcmRlZC1lbWFpbFwiO1xuXG4vKipcbiAqIERlY29kZSBhIEpXVCBzZWdtZW50IChiYXNlNjR1cmwgd2l0aCBzdGFuZGFyZCBiYXNlNjQgcGFkZGluZyksIG9yXG4gKiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzZWdtZW50IGlzIG5vdCB2YWxpZCBiYXNlNjQuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUp3dFNlZ21lbnQoc2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHNlZ21lbnQucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIik7XG4gIGNvbnN0IHBhZGRlZCA9IG5vcm1hbGl6ZWQgKyBcIj1cIi5yZXBlYXQoKDQgLSAobm9ybWFsaXplZC5sZW5ndGggJSA0KSkgJSA0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBiaW5hcnkgPSBhdG9iKHBhZGRlZCk7XG4gICAgY29uc3QgYnl0ZXMgPSBVaW50OEFycmF5LmZyb20oYmluYXJ5LCAoY2gpID0+IGNoLmNoYXJDb2RlQXQoMCkpO1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRGVjb2RlIHRoZSBKV1QgcGF5bG9hZCBmcm9tIGEgYmVhcmVyIHRva2VuIHN0cmluZyBvciByZXF1ZXN0IGhlYWRlcnMuXG4gKlxuICogV2hlbiBgaW5wdXRgIGlzIGhlYWRlci1saWtlLCB3YWxrcyBldmVyeSB2YWx1ZSBmb3IgYGhlYWRlck5hbWVgIChkZWZhdWx0XG4gKiBgeC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuYCkgYW5kIG1lcmdlcyBjbGFpbSBrZXlzIGxlZnQtdG8tcmlnaHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblBheWxvYWQoXG4gIGlucHV0OiBIZWFkZXJMaWtlIHwgc3RyaW5nLFxuICBoZWFkZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBBQ0NFU1NfVE9LRU5fSEVBREVSLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBsZXQgYWNjZXNzVG9rZW5QYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgaWYgKCEodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSkge1xuICAgIGlmIChoZWFkZXJOYW1lKSB7XG4gICAgICBmb3JFYWNoSGVhZGVyVmFsdWUoaW5wdXQsIGhlYWRlck5hbWUsICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgW3BheWxvYWRLZXksIHBheWxvYWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZ2V0QWNjZXNzVG9rZW5QYXlsb2FkKHZhbHVlKSkpIHtcbiAgICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuUGF5bG9hZCB8fCAhKHBheWxvYWRLZXkgaW4gYWNjZXNzVG9rZW5QYXlsb2FkKSkge1xuICAgICAgICAgICAgaWYgKCFhY2Nlc3NUb2tlblBheWxvYWQpIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IHt9O1xuICAgICAgICAgICAgYWNjZXNzVG9rZW5QYXlsb2FkW3BheWxvYWRLZXldID0gcGF5bG9hZFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlucHV0ID0gaW5wdXQudHJpbSgpO1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBCRUFSRVJfUFJFRklYX1JFR0VYLmV4ZWMoaW5wdXQpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoZW5kSW5kZXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFydHMgPSBpbnB1dC5zcGxpdChcIi5cIiwgNCk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAyIHx8IHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAvLyBBIG1hbGZvcm1lZCBzZWdtZW50IHlpZWxkcyB1bmRlZmluZWQ7IGZhbGwgdGhyb3VnaCB0byBlbXB0eSBvYmplY3QuXG4gICAgICAgIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IGpzb24ucGFyc2VSZWNvcmQoZGVjb2RlSnd0U2VnbWVudChwYXJ0c1sxXSEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFhY2Nlc3NUb2tlblBheWxvYWQpIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IHt9O1xuICBsb2cuZGVidWcoXCJnZXRBY2Nlc3NUb2tlblBheWxvYWRcIiwgeyBhY2Nlc3NUb2tlblBheWxvYWQgfSk7XG4gIHJldHVybiBhY2Nlc3NUb2tlblBheWxvYWQ7XG59XG5cbi8qKlxuICogT0F1dGggc2NvcGVzIGZyb20gdGhlIGFjY2Vzcy10b2tlbiBKV1Qgb24gYGlucHV0YC5cbiAqXG4gKiBEZWZhdWx0cyB0byB0aGUgYHgtZm9yd2FyZGVkLWFjY2Vzcy10b2tlbmAgaGVhZGVyLCB3aGljaCBEYXRhYnJpY2tzIEFwcHNcbiAqIGZvcndhcmQgZnJvbSB0aGUgYnJvd3NlciBzZXNzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW5TY29wZXMoXG4gIGlucHV0OiBIZWFkZXJMaWtlIHwgc3RyaW5nLFxuICBoZWFkZXJOYW1lPzogc3RyaW5nLFxuKTogSXRlcmFibGU8c3RyaW5nPiB7XG4gIGNvbnN0IHBheWxvYWQgPSBnZXRBY2Nlc3NUb2tlblBheWxvYWQoaW5wdXQsIGhlYWRlck5hbWUpO1xuICBsZXQgYWNjZXNzVG9rZW5TY29wZXM6IEl0ZXJhYmxlPHN0cmluZz4gPSBpdGVyYXRlQ2xhaW1zKHBheWxvYWQuc2NvcGUpO1xuICBpZiAoaXNMZXZlbEVuYWJsZWQoXCJkZWJ1Z1wiKSkge1xuICAgIGFjY2Vzc1Rva2VuU2NvcGVzID0gQXJyYXkuZnJvbShhY2Nlc3NUb2tlblNjb3Blcyk7XG4gICAgbG9nLmRlYnVnKFwiZ2V0QWNjZXNzVG9rZW5TY29wZXNcIiwgeyBhY2Nlc3NUb2tlblNjb3BlcyB9KTtcbiAgfVxuICByZXR1cm4gYWNjZXNzVG9rZW5TY29wZXM7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgd2hlbiBgc2NvcGVzYCBjb250YWlucyBhbnkgdmFsdWUgZnJvbSBgYWxsb3dlZGAuXG4gKlxuICogQWNjZXB0cyB0aGUgcmF3IHtAbGluayBNQVNUUkFfU0NPUEVTX0tFWX0gYXJyYXkgc3RhbXBlZCBvblxuICogYFJlcXVlc3RDb250ZXh0YCBhcyB3ZWxsIGFzIGl0ZXJhYmxlcyBmcm9tIHtAbGluayBnZXRBY2Nlc3NUb2tlblNjb3Blc30uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlc0FjY2Vzc1Rva2VuU2NvcGUoc2NvcGVzOiB1bmtub3duLCBhbGxvd2VkOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBpZiAoYWxsb3dlZC5sZW5ndGgpIHtcbiAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIGl0ZXJhdGVDbGFpbXMoc2NvcGVzKSkge1xuICAgICAgaWYgKGFsbG93ZWQuaW5jbHVkZXMoc2NvcGUpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcImluY2x1ZGVzQWNjZXNzVG9rZW5TY29wZVwiLCB7IHNjb3BlLCBhbGxvd2VkIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogU3BsaXQgYSBKV1QgYHNjb3BlYCBjbGFpbSBzdHJpbmcgb3IgYXJyYXkgaW50byBpbmRpdmlkdWFsIHNjb3BlIHRva2Vucy4gKi9cbmZ1bmN0aW9uKiBpdGVyYXRlQ2xhaW1zKGlucHV0OiB1bmtub3duLCBkaXN0aW5jdCA9IHRydWUpOiBJdGVyYWJsZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2VlbiA9IGRpc3RpbmN0ID8gbmV3IFNldDxzdHJpbmc+KCkgOiB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24qIHZpc2l0KHZhbHVlOiB1bmtub3duKTogSXRlcmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZm9yIChjb25zdCBjbGFpbSBvZiB2YWx1ZS5zcGxpdChTUExJVF9SRUdFWCkpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBjbGFpbS50cmltKCk7XG4gICAgICAgIGlmICghdG9rZW4gfHwgc2Vlbj8uaGFzKHRva2VuKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4/LmFkZCh0b2tlbik7XG4gICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICB5aWVsZCogdmlzaXQoaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgeWllbGQqIHZpc2l0KGlucHV0KTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -43,7 +43,7 @@
43
43
  "./package.json": "./package.json"
44
44
  }
45
45
  },
46
- "version": "0.6.58",
46
+ "version": "0.6.60",
47
47
  "types": "./lib/index.d.ts",
48
48
  "type": "module",
49
49
  "exports": {
package/src/string.ts CHANGED
@@ -1,3 +1,7 @@
1
+ // GENERATED by projen synth (rs-packages) - DO NOT EDIT.
2
+ // Regenerated from rs-packages/shared/core/src/string.ts.
3
+ // Hand edits are overwritten on the next watch; this file is read-only.
4
+
1
5
  /**
2
6
  * Browser-safe string toolkit: tokenization, identifier / slug
3
7
  * generation (with hash-suffix collision resistance), HTML escaping,
package/src/token.ts CHANGED
@@ -21,7 +21,7 @@ const log = logger("shared/token");
21
21
  *
22
22
  * Exported because it is a wire contract several packages branch on, not just a
23
23
  * default argument: `@dbx-tools/appkit`'s `identity` module decides whether a
24
- * request can use OBO auth at all by its presence, and `@dbx-tools/cli-tunnel`
24
+ * request can use OBO auth at all by its presence, and `@dbx-tools/tunnel`
25
25
  * must know the name to strip inbound copies of it. One spelling, one place.
26
26
  */
27
27
  export const ACCESS_TOKEN_HEADER = "x-forwarded-access-token";