@atlasauth/angular 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/esm2022/lib/appearance.mjs +1 -1
- package/dist/esm2022/lib/atlas.service.mjs +40 -3
- package/dist/esm2022/lib/atlas.ui.mjs +7 -1
- package/dist/esm2022/lib/components/attempt-flow.component.mjs +419 -11
- package/dist/esm2022/lib/components/flow-controller.mjs +132 -2
- package/dist/esm2022/lib/components/impersonation-banner.component.mjs +75 -0
- package/dist/esm2022/lib/components/organization-audit-log.component.mjs +115 -0
- package/dist/esm2022/lib/components/organization-audit-log.mjs +40 -0
- package/dist/esm2022/lib/components/organization-profile.component.mjs +602 -27
- package/dist/esm2022/lib/components/policy-host.mjs +254 -0
- package/dist/esm2022/lib/components/recovery-codes.component.mjs +122 -0
- package/dist/esm2022/lib/components/sign-in.component.mjs +47 -4
- package/dist/esm2022/lib/components/sign-up-form.component.mjs +136 -10
- package/dist/esm2022/lib/components/sign-up.component.mjs +86 -8
- package/dist/esm2022/lib/i18n.mjs +61 -1
- package/dist/esm2022/lib/provide-atlas.mjs +4 -2
- package/dist/esm2022/lib/types.mjs +1 -1
- package/dist/esm2022/lib/version.mjs +2 -2
- package/dist/esm2022/public-api.mjs +6 -1
- package/dist/fesm2022/atlasauth-angular.mjs +2129 -95
- package/dist/fesm2022/atlasauth-angular.mjs.map +1 -1
- package/dist/lib/appearance.d.ts +1 -1
- package/dist/lib/atlas.service.d.ts +23 -1
- package/dist/lib/atlas.ui.d.ts +3 -1
- package/dist/lib/components/attempt-flow.component.d.ts +61 -2
- package/dist/lib/components/flow-controller.d.ts +73 -1
- package/dist/lib/components/impersonation-banner.component.d.ts +27 -0
- package/dist/lib/components/organization-audit-log.component.d.ts +34 -0
- package/dist/lib/components/organization-audit-log.d.ts +25 -0
- package/dist/lib/components/organization-profile.component.d.ts +55 -6
- package/dist/lib/components/policy-host.d.ts +88 -0
- package/dist/lib/components/recovery-codes.component.d.ts +26 -0
- package/dist/lib/components/sign-in.component.d.ts +2 -0
- package/dist/lib/components/sign-up-form.component.d.ts +22 -4
- package/dist/lib/components/sign-up.component.d.ts +13 -0
- package/dist/lib/provide-atlas.d.ts +3 -1
- package/dist/lib/types.d.ts +6 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/public-api.d.ts +5 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @atlasauth/angular changelog
|
|
2
2
|
|
|
3
|
+
## 0.10.0 — 2026-10-24
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **Policy acceptance** in `<atlas-sign-up>` and `<atlas-sign-in>` (consent block with in-page viewer, clickwrap line, unskippable scroll dialog, the `needs_policy_acceptance` step), plus `<atlas-policy-gate>`, `<atlas-policy-accept-step>` and the `[atlasPolicies]` directive; `AtlasFlowController` exposes `policies`. New `policy.*` strings.
|
|
8
|
+
|
|
9
|
+
## 0.9.0 — 2026-10-23
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `<atlas-organization-audit-log>` (in `ATLAS_UI`) and `AtlasService.organizationAuditLog()` (a signal-backed `AtlasOrganizationAuditLog`): the active organization's audit trail for its admins, paged, with labels as inputs. Renders nothing for a member who may not read it. Appearance `elements` gain `list` and `listItem`.
|
|
14
|
+
- **Recovery codes after enrolment.** Setting up a second factor at sign-in now shows the account's one-time recovery codes before the sign-in finishes, as the hosted page does: copy them, download them as a .txt file, then "I've saved my codes" continues. Before, the sign-in completed straight away and the codes were never shown. The codes are kept in memory only, never on the attempt or in storage. New strings (`mfa.recoveryCodesTitle`, `mfa.recoveryCodesHelp`, `mfa.recoveryCodesCopy`, `mfa.recoveryCodesCopied`, `mfa.recoveryCodesDownload`, `mfa.recoveryCodesSaved`) are in the catalog and in every `@atlasauth/localizations` bundle.
|
|
15
|
+
- **MFA enrolment at sign-in works end to end.** When the app requires a second factor and the account has none, `<SignIn>` now fetches the authenticator setup and shows its QR code and the setup key, then asks for the code (one or two, as the app requires). Before, the step asked for codes without ever showing the setup.
|
|
16
|
+
- **Text-message enrolment** where the app offers texted codes and can send them: the user picks "Use text messages", enters a phone number, and confirms with the texted code. When both methods are offered the user chooses, and can switch.
|
|
17
|
+
- **"Text me a code instead"** at the second-factor step where the app offers texted codes, beside the existing "Email me a code instead".
|
|
18
|
+
- The new strings are in the catalog (`mfa.enrollChoose`, `mfa.enrollTotpOption`, `mfa.enrollSmsOption`, `mfa.enrollScan`, `mfa.enrollQrAlt`, `mfa.enrollSetupKey`, `mfa.enrollPreparing`, `mfa.phoneLabel`, `mfa.phoneHint`, `mfa.sendCode`, `mfa.codeTextedTo`, `mfa.smsCodeOption`) and in every `@atlasauth/localizations` bundle.
|
|
19
|
+
- "Email me a code instead" at the second factor showed its catalog key (`signIn.emailCodeOption`) unless a language bundle was passed; the English string is now in the default catalog.
|
|
20
|
+
- Texted codes are offered only where the server says the app can text (`account.mfa` on `/v1/appearance`). A server that does not say gets the authenticator app only.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- Built on `@atlasauth/js` 0.16.0.
|
|
25
|
+
|
|
3
26
|
## 0.8.0
|
|
4
27
|
|
|
5
28
|
### Changed
|
|
@@ -124,4 +124,4 @@ export function renderAppearance(appearance, instanceDesign, options = {}) {
|
|
|
124
124
|
warn: options.warn,
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZWFyYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXBwZWFyYW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUNMLHNCQUFzQixHQUt2QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBaUQvRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQTJCO0lBQ3BELFlBQVksRUFBRSxTQUFTO0lBQ3ZCLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFVBQVUsRUFBRSxpRUFBaUU7SUFDN0UsV0FBVyxFQUFFLEtBQUs7Q0FDbkIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLElBQUksRUFBRTtRQUNKLEdBQUcsY0FBYztRQUNqQixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsU0FBUztLQUN4QjtJQUNELFlBQVksRUFBRTtRQUNaLEdBQUcsY0FBYztRQUNqQixZQUFZLEVBQUUsU0FBUztRQUN2QixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsS0FBSztRQUNuQixVQUFVLEVBQUUsd0NBQXdDO0tBQ3JEO0NBQ3dELENBQUM7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxVQUF1QjtJQUNuRCxNQUFNLElBQUksR0FBRyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDbkYsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFFOUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2hELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDckQsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLFFBQVEsQ0FBQyxHQUF5QixDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBOEI7SUFDekQsTUFBTSxJQUFJLEdBQTJCLEVBQUUsQ0FBQztJQUN4QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDakYsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLE9BQW1CLEVBQ25CLFVBQWtDLEVBQ2xDLElBQVk7SUFFWixNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVELG1GQUFtRjtBQUVuRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUF1QjtJQUNwRCxNQUFNLEdBQUcsR0FBaUIsRUFBRSxDQUFDO0lBQzdCLElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxHQUFHLENBQUMsR0FBeUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsVUFBa0MsRUFDbEMsY0FBaUQsRUFDakQsVUFBdUQsRUFBRTtJQUV6RCxPQUFPLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUU7UUFDeEQsTUFBTSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUM7UUFDbEMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDCpzEwLjMgdGhlbWluZy5cbiAqXG4gKiBcImFwcGVhcmFuY2UgcHJvcDogZGVzaWduIHRva2VucyAoY29sb3JzLCByYWRpdXMsIGZvbnQsIHNwYWNpbmcpICsgcGVyLWVsZW1lbnRcbiAqIGNsYXNzIG92ZXJyaWRlcyAoZWxlbWVudHM6IHsgZm9ybUJ1dHRvblByaW1hcnk6IFwi4oCmXCIgfSkuIE5vIGlmcmFtZSDigJQgY29tcG9uZW50c1xuICogcmVuZGVyIGluIHRoZSBob3N0IERPTSBzbyBUYWlsd2luZC9DU1MganVzdCB3b3Jrcy5cIlxuICpcbiAqIFJlbmRlcmluZyBpbiB0aGUgaG9zdCBET00gaXMgdGhlIGRlY2lzaW9uIGV2ZXJ5dGhpbmcgZWxzZSBmb2xsb3dzIGZyb20uIEFuXG4gKiBpZnJhbWUgd291bGQgaXNvbGF0ZSBzdHlsZXMgcGVyZmVjdGx5IGFuZCBiZSB1bnVzYWJsZTogaXQgY2Fubm90IGJlIHNpemVkIHRvXG4gKiBpdHMgY29udGVudCByZWxpYWJseSwgaXQgYnJlYWtzIHBhc3N3b3JkIG1hbmFnZXJzLCBpdCBicmVha3MgYXV0b2ZpbGwsIGFuZCBhXG4gKiBUYWlsd2luZCBjbGFzcyB0aGUgY3VzdG9tZXIgd3JpdGVzIGhhcyBubyBlZmZlY3QgaW5zaWRlIGl0LiBTaGFyaW5nIHRoZSBET01cbiAqIG1lYW5zIHRoZSBjdXN0b21lcidzIENTUyByZWFjaGVzIG91ciBtYXJrdXAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGV5IHdhbnRcbiAqIGFuZCB3aGF0IG1ha2VzIGFuIG92ZXJyaWRlIHN5c3RlbSBuZWNlc3NhcnkgcmF0aGVyIHRoYW4gZGVjb3JhdGl2ZS5cbiAqXG4gKiBFbGVtZW50IGNsYXNzZXMgYXJlIEFQUEVOREVEIHRvIG91cnMsIG5ldmVyIHJlcGxhY2luZyB0aGVtLiBBIGN1c3RvbWVyIGFkZGluZ1xuICogYGNsYXNzTmFtZT1cInJvdW5kZWQteGxcImAgd2FudHMgYSByb3VuZGVyIGJ1dHRvbiwgbm90IGFuIHVuc3R5bGVkIG9uZSDigJQgYW5kXG4gKiByZXBsYWNlbWVudCBpcyBhIHN1cHBvcnQgYnVyZGVuIHdoZXJlIGV2ZXJ5IG92ZXJyaWRlIHN0YXJ0cyBieSByZWJ1aWxkaW5nIHRoZVxuICogY29tcG9uZW50J3MgYmFzZSBzdHlsZXMgZnJvbSBzY3JhdGNoLlxuICovXG5cbmltcG9ydCB7XG4gIHJlbmRlckRlc2lnbkFwcGVhcmFuY2UsXG4gIHR5cGUgQXBwZWFyYW5jZVJlbmRlcixcbiAgdHlwZSBEZXNpZ25BcHBlYXJhbmNlLFxuICB0eXBlIERlc2lnbldhcm4sXG4gIHR5cGUgSW5zdGFuY2VEZXNpZ24sXG59IGZyb20gJ0BhdGxhc2F1dGgvZGVzaWduL3J1bnRpbWUnO1xuXG5leHBvcnQgeyBpbnN0YW5jZURlc2lnbkZyb20gfSBmcm9tICdAYXRsYXNhdXRoL2Rlc2lnbi9ydW50aW1lJztcbmV4cG9ydCB0eXBlIHsgQXBwZWFyYW5jZVJlbmRlciwgQXRsYXNEZXNpZ24sIEluc3RhbmNlRGVzaWduLCBQcmVzZXRJZCB9IGZyb20gJ0BhdGxhc2F1dGgvZGVzaWduL3J1bnRpbWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlc2lnblRva2VucyB7XG4gIGNvbG9yUHJpbWFyeT86IHN0cmluZztcbiAgY29sb3JUZXh0Pzogc3RyaW5nO1xuICBjb2xvckJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIGNvbG9yRGFuZ2VyPzogc3RyaW5nO1xuICBjb2xvckJvcmRlcj86IHN0cmluZztcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICBzcGFjaW5nVW5pdD86IHN0cmluZztcbn1cblxuLyoqIEV2ZXJ5IGVsZW1lbnQgYSBjdXN0b21lciBtYXkgdGFyZ2V0LiBOYW1lZCBmb3Igd2hhdCBpdCBJUywgbm90IHdoZXJlIGl0IHNpdHMuICovXG5leHBvcnQgdHlwZSBFbGVtZW50S2V5ID1cbiAgfCAncm9vdCdcbiAgfCAnY2FyZCdcbiAgfCAnaGVhZGVyVGl0bGUnXG4gIHwgJ2hlYWRlclN1YnRpdGxlJ1xuICB8ICdmb3JtRmllbGQnXG4gIHwgJ2Zvcm1GaWVsZExhYmVsJ1xuICB8ICdmb3JtRmllbGRJbnB1dCdcbiAgfCAnZm9ybUZpZWxkRXJyb3InXG4gIHwgJ2Zvcm1CdXR0b25QcmltYXJ5J1xuICB8ICdmb3JtQnV0dG9uU2Vjb25kYXJ5J1xuICB8ICdzb2NpYWxCdXR0b24nXG4gIHwgJ2RpdmlkZXJUZXh0J1xuICB8ICdmb290ZXJBY3Rpb24nXG4gIHwgJ2F2YXRhcidcbiAgfCAnbWVudSdcbiAgfCAnbWVudUl0ZW0nXG4gIHwgJ2JhZGdlJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBlYXJhbmNlIGV4dGVuZHMgRGVzaWduQXBwZWFyYW5jZSB7XG4gIC8qKiBBIHByZWJ1aWx0IHRva2VuIHRoZW1lIHRvIHN0YXJ0IGZyb20gKHByZS1kZXNpZ24tc3lzdGVtIHRoZW1lcykuICovXG4gIGJhc2VUaGVtZT86IGtleW9mIHR5cGVvZiBUSEVNRVM7XG4gIC8qKlxuICAgKiBMZWdhY3kgZGVzaWduIHRva2Vucy4gV2l0aG91dCBhIGRlc2lnbiB0aGV5IHNldCB0aGUgYC0tYXRsYXMtKmAgdmFyaWFibGVzXG4gICAqIGV4YWN0bHkgYXMgYmVmb3JlOyB3aXRoIG9uZSB0aGV5IG1hcCBvbnRvIGl0LlxuICAgKi9cbiAgdmFyaWFibGVzPzogRGVzaWduVG9rZW5zO1xuICBlbGVtZW50cz86IFBhcnRpYWw8UmVjb3JkPEVsZW1lbnRLZXksIHN0cmluZz4+O1xuICAvLyBGcm9tIERlc2lnbkFwcGVhcmFuY2U6XG4gIC8vICAgcHJlc2V0PzogUHJlc2V0SWQgICAgICAgICAgICBhIGRlc2lnbiBwcmVzZXQgKHJlcGxhY2VzIHRoZSBkYXNoYm9hcmQgZGVzaWduIGFzIHRoZSBiYXNlKVxuICAvLyAgIGRlc2lnbj86IEF0bGFzRGVzaWduICAgICAgICAgc3RydWN0dXJlZCBvdmVycmlkZXMsIGhpZ2hlc3QgcHJlY2VkZW5jZVxuICAvLyAgIGluc3RhbmNlRGVzaWduPzogYm9vbGVhbiAgICAgYXBwbHkgdGhlIGRhc2hib2FyZCBkZXNpZ24gYXV0b21hdGljYWxseSAoZGVmYXVsdCB0cnVlKVxufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UT0tFTlM6IFJlcXVpcmVkPERlc2lnblRva2Vucz4gPSB7XG4gIGNvbG9yUHJpbWFyeTogJyM1YjViZDYnLFxuICBjb2xvclRleHQ6ICcjMWMxYzFmJyxcbiAgY29sb3JCYWNrZ3JvdW5kOiAnI2ZmZmZmZicsXG4gIGNvbG9yRGFuZ2VyOiAnI2Q2NDU0NScsXG4gIGNvbG9yQm9yZGVyOiAnI2U0ZTRlOScsXG4gIGJvcmRlclJhZGl1czogJzhweCcsXG4gIGZvbnRGYW1pbHk6ICd1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIFwiU2Vnb2UgVUlcIiwgc2Fucy1zZXJpZicsXG4gIHNwYWNpbmdVbml0OiAnNHB4Jyxcbn07XG5cbi8qKlxuICogwqcxMC4zOiBcInByZWJ1aWx0IHRoZW1lcyBzaGlwcGVkIChkZWZhdWx0LCBkYXJrLCBuZW9icnV0YWxpc3QgYXMgYSBkZW1vIG9mIHRoZVxuICogb3ZlcnJpZGUgc3lzdGVtKVwiLiBOZW9icnV0YWxpc3QgZXhpc3RzIHRvIHByb3ZlIHRoZSB0b2tlbiBzZXQgaXMgZXhwcmVzc2l2ZVxuICogZW5vdWdoIGZvciBhIHRoZW1lIHRoYXQgbG9va3Mgbm90aGluZyBsaWtlIHRoZSBkZWZhdWx0IOKAlCBhIHRoZW1pbmcgc3lzdGVtXG4gKiB0aGF0IG9ubHkgcHJvZHVjZXMgdGFzdGVmdWwgdmFyaWF0aW9ucyBvZiBpdHNlbGYgaXMgbm90IGEgdGhlbWluZyBzeXN0ZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVNRVMgPSB7XG4gIGRlZmF1bHQ6IERFRkFVTFRfVE9LRU5TLFxuICBkYXJrOiB7XG4gICAgLi4uREVGQVVMVF9UT0tFTlMsXG4gICAgY29sb3JUZXh0OiAnI2U2ZTllZicsXG4gICAgY29sb3JCYWNrZ3JvdW5kOiAnIzE0MTcxYycsXG4gICAgY29sb3JCb3JkZXI6ICcjMjQyOTMyJyxcbiAgICBjb2xvclByaW1hcnk6ICcjNmVhOGZlJyxcbiAgfSxcbiAgbmVvYnJ1dGFsaXN0OiB7XG4gICAgLi4uREVGQVVMVF9UT0tFTlMsXG4gICAgY29sb3JQcmltYXJ5OiAnI2ZmZTYwMCcsXG4gICAgY29sb3JUZXh0OiAnIzAwMDAwMCcsXG4gICAgY29sb3JCYWNrZ3JvdW5kOiAnI2ZmZmZmZicsXG4gICAgY29sb3JCb3JkZXI6ICcjMDAwMDAwJyxcbiAgICBib3JkZXJSYWRpdXM6ICcwcHgnLFxuICAgIGZvbnRGYW1pbHk6ICdcIkNvdXJpZXIgTmV3XCIsIHVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlJyxcbiAgfSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPERlc2lnblRva2Vucz4+O1xuXG4vKipcbiAqIFJlc29sdmUgdG9rZW5zOiBkZWZhdWx0cywgdGhlbiB0aGUgYmFzZSB0aGVtZSwgdGhlbiBleHBsaWNpdCB2YXJpYWJsZXMuXG4gKlxuICogTGF0ZXIgd2lucywgYW5kIGB1bmRlZmluZWRgIG5ldmVyIG92ZXJ3cml0ZXMuIEEgY3VzdG9tZXIgc2V0dGluZyBvbmUgdmFyaWFibGVcbiAqIG9uIHRoZSBkYXJrIHRoZW1lIGV4cGVjdHMgdGhlIG90aGVyIGVsZXZlbiB0byBzdGF5IGRhcmssIG5vdCBzaWxlbnRseSByZXZlcnRcbiAqIHRvIHRoZSBsaWdodCBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUb2tlbnMoYXBwZWFyYW5jZT86IEFwcGVhcmFuY2UpOiBSZXF1aXJlZDxEZXNpZ25Ub2tlbnM+IHtcbiAgY29uc3QgYmFzZSA9IGFwcGVhcmFuY2U/LmJhc2VUaGVtZSA/IFRIRU1FU1thcHBlYXJhbmNlLmJhc2VUaGVtZV0gOiBERUZBVUxUX1RPS0VOUztcbiAgY29uc3Qgb3ZlcnJpZGVzID0gYXBwZWFyYW5jZT8udmFyaWFibGVzID8/IHt9O1xuXG4gIGNvbnN0IHJlc29sdmVkID0geyAuLi5ERUZBVUxUX1RPS0VOUywgLi4uYmFzZSB9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZXMpKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHJlc29sdmVkW2tleSBhcyBrZXlvZiBEZXNpZ25Ub2tlbnNdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKiogVG9rZW5zIGFzIENTUyBjdXN0b20gcHJvcGVydGllcywgZm9yIHRoZSBob3N0IERPTSB0byBpbmhlcml0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc1ZhcmlhYmxlcyh0b2tlbnM6IFJlcXVpcmVkPERlc2lnblRva2Vucz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0b2tlbnMpKSB7XG4gICAgLy8gY2FtZWxDYXNlIOKGkiAtLWF0bGFzLWtlYmFiLWNhc2UsIHdoaWNoIGlzIHdoYXQgYSBjdXN0b21lciB3cml0ZXMgaW4gQ1NTLlxuICAgIHZhcnNbYC0tYXRsYXMtJHtrZXkucmVwbGFjZSgvW0EtWl0vZywgKGMpID0+IGAtJHtjLnRvTG93ZXJDYXNlKCl9YCl9YF0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBDb21iaW5lIG91ciBiYXNlIGNsYXNzIHdpdGggdGhlIGN1c3RvbWVyJ3Mgb3ZlcnJpZGUuXG4gKlxuICogQXBwZW5kZWQsIG5ldmVyIHJlcGxhY2VkIOKAlCBhIGN1c3RvbWVyIGFkZGluZyBgcm91bmRlZC14bGAgd2FudHMgYSByb3VuZGVyXG4gKiBidXR0b24sIG5vdCBhbiB1bnN0eWxlZCBvbmUuIFRoZWlycyBjb21lcyBsYXN0IHNvIGl0IHdpbnMgb24gZXF1YWxcbiAqIHNwZWNpZmljaXR5LCB3aGljaCBpcyB0aGUgYmVoYXZpb3VyIGFueW9uZSB3cml0aW5nIFRhaWx3aW5kIGV4cGVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc0ZvcihcbiAgZWxlbWVudDogRWxlbWVudEtleSxcbiAgYXBwZWFyYW5jZTogQXBwZWFyYW5jZSB8IHVuZGVmaW5lZCxcbiAgYmFzZTogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBhcHBlYXJhbmNlPy5lbGVtZW50cz8uW2VsZW1lbnRdO1xuICByZXR1cm4gb3ZlcnJpZGUgPyBgJHtiYXNlfSAke292ZXJyaWRlfWAgOiBiYXNlO1xufVxuXG4vLyAtLS0tIHRoZSBkZXNpZ24gc3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFRoZSBsZWdhY3kgdG9rZW5zIHRoZSBkZXZlbG9wZXIgY2hvc2UgRVhQTElDSVRMWTogYSBub24tZGVmYXVsdCBgYmFzZVRoZW1lYFxuICogcGx1cyBgdmFyaWFibGVzYC4gT25seSB0aGVzZSBtYXAgb250byBhIGRlc2lnbiDigJQgdGhlIHRva2VuIGRlZmF1bHRzIG11c3Qgbm90XG4gKiBvdmVyd3JpdGUgdGhlIGRhc2hib2FyZCBkZXNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBsaWNpdFRva2VucyhhcHBlYXJhbmNlPzogQXBwZWFyYW5jZSk6IERlc2lnblRva2VucyB7XG4gIGNvbnN0IG91dDogRGVzaWduVG9rZW5zID0ge307XG4gIGlmIChhcHBlYXJhbmNlPy5iYXNlVGhlbWUgJiYgYXBwZWFyYW5jZS5iYXNlVGhlbWUgIT09ICdkZWZhdWx0Jykge1xuICAgIE9iamVjdC5hc3NpZ24ob3V0LCBUSEVNRVNbYXBwZWFyYW5jZS5iYXNlVGhlbWVdKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcHBlYXJhbmNlPy52YXJpYWJsZXMgPz8ge30pKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIG91dFtrZXkgYXMga2V5b2YgRGVzaWduVG9rZW5zXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogVHVybiBhbiBgYXBwZWFyYW5jZWAgKCsgdGhlIGluc3RhbmNlJ3MgZGFzaGJvYXJkIGRlc2lnbiBmcm9tIHRoZSBGcm9udGVuZFxuICogQVBJKSBpbnRvIHJvb3QgYXR0cmlidXRlcyBhbmQgYSBzdHlsZXNoZWV0IOKAlCB0aGUgc2FtZSBzZW1hbnRpY3MgYXNcbiAqIGBAYXRsYXNhdXRoL3JlYWN0YC4gUHJlY2VkZW5jZSwgbG93ZXN0IGZpcnN0OiBkYXNoYm9hcmQgZGVzaWduIDwgYHByZXNldGAgPFxuICogYHZhcmlhYmxlc2AgKGFuZCBhIG5vbi1kZWZhdWx0IGBiYXNlVGhlbWVgKSA8IGBkZXNpZ25gLiBXaXRob3V0IGEgZGFzaGJvYXJkXG4gKiBkZXNpZ24gYW5kIHdpdGhvdXQgYHByZXNldGAvYGRlc2lnbmAsIHRoZSBvdXRwdXQgaXMgZXhhY3RseSB0aGVcbiAqIHByZS1kZXNpZ24tc3lzdGVtIG9uZTogdGhlIHRva2VuIHZhcmlhYmxlcywgbm8gc3R5bGVzaGVldCwgbm8gYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckFwcGVhcmFuY2UoXG4gIGFwcGVhcmFuY2U6IEFwcGVhcmFuY2UgfCB1bmRlZmluZWQsXG4gIGluc3RhbmNlRGVzaWduOiBJbnN0YW5jZURlc2lnbiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IHsgZnJvbnRlbmRBcGk/OiBzdHJpbmc7IHdhcm4/OiBEZXNpZ25XYXJuIH0gPSB7fSxcbik6IEFwcGVhcmFuY2VSZW5kZXIge1xuICByZXR1cm4gcmVuZGVyRGVzaWduQXBwZWFyYW5jZShhcHBlYXJhbmNlLCBpbnN0YW5jZURlc2lnbiwge1xuICAgIHRva2VuczogZXhwbGljaXRUb2tlbnMoYXBwZWFyYW5jZSksXG4gICAgbGVnYWN5U3R5bGU6ICgpID0+IGNzc1ZhcmlhYmxlcyhyZXNvbHZlVG9rZW5zKGFwcGVhcmFuY2UpKSxcbiAgICBmcm9udGVuZEFwaTogb3B0aW9ucy5mcm9udGVuZEFwaSxcbiAgICB3YXJuOiBvcHRpb25zLndhcm4sXG4gIH0pO1xufVxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZWFyYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXBwZWFyYW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUNMLHNCQUFzQixHQUt2QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBbUQvRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQTJCO0lBQ3BELFlBQVksRUFBRSxTQUFTO0lBQ3ZCLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFVBQVUsRUFBRSxpRUFBaUU7SUFDN0UsV0FBVyxFQUFFLEtBQUs7Q0FDbkIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLElBQUksRUFBRTtRQUNKLEdBQUcsY0FBYztRQUNqQixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsU0FBUztLQUN4QjtJQUNELFlBQVksRUFBRTtRQUNaLEdBQUcsY0FBYztRQUNqQixZQUFZLEVBQUUsU0FBUztRQUN2QixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsS0FBSztRQUNuQixVQUFVLEVBQUUsd0NBQXdDO0tBQ3JEO0NBQ3dELENBQUM7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxVQUF1QjtJQUNuRCxNQUFNLElBQUksR0FBRyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDbkYsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFFOUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2hELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDckQsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLFFBQVEsQ0FBQyxHQUF5QixDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBOEI7SUFDekQsTUFBTSxJQUFJLEdBQTJCLEVBQUUsQ0FBQztJQUN4QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDakYsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLE9BQW1CLEVBQ25CLFVBQWtDLEVBQ2xDLElBQVk7SUFFWixNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVELG1GQUFtRjtBQUVuRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUF1QjtJQUNwRCxNQUFNLEdBQUcsR0FBaUIsRUFBRSxDQUFDO0lBQzdCLElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxHQUFHLENBQUMsR0FBeUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsVUFBa0MsRUFDbEMsY0FBaUQsRUFDakQsVUFBdUQsRUFBRTtJQUV6RCxPQUFPLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUU7UUFDeEQsTUFBTSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUM7UUFDbEMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDCpzEwLjMgdGhlbWluZy5cbiAqXG4gKiBcImFwcGVhcmFuY2UgcHJvcDogZGVzaWduIHRva2VucyAoY29sb3JzLCByYWRpdXMsIGZvbnQsIHNwYWNpbmcpICsgcGVyLWVsZW1lbnRcbiAqIGNsYXNzIG92ZXJyaWRlcyAoZWxlbWVudHM6IHsgZm9ybUJ1dHRvblByaW1hcnk6IFwi4oCmXCIgfSkuIE5vIGlmcmFtZSDigJQgY29tcG9uZW50c1xuICogcmVuZGVyIGluIHRoZSBob3N0IERPTSBzbyBUYWlsd2luZC9DU1MganVzdCB3b3Jrcy5cIlxuICpcbiAqIFJlbmRlcmluZyBpbiB0aGUgaG9zdCBET00gaXMgdGhlIGRlY2lzaW9uIGV2ZXJ5dGhpbmcgZWxzZSBmb2xsb3dzIGZyb20uIEFuXG4gKiBpZnJhbWUgd291bGQgaXNvbGF0ZSBzdHlsZXMgcGVyZmVjdGx5IGFuZCBiZSB1bnVzYWJsZTogaXQgY2Fubm90IGJlIHNpemVkIHRvXG4gKiBpdHMgY29udGVudCByZWxpYWJseSwgaXQgYnJlYWtzIHBhc3N3b3JkIG1hbmFnZXJzLCBpdCBicmVha3MgYXV0b2ZpbGwsIGFuZCBhXG4gKiBUYWlsd2luZCBjbGFzcyB0aGUgY3VzdG9tZXIgd3JpdGVzIGhhcyBubyBlZmZlY3QgaW5zaWRlIGl0LiBTaGFyaW5nIHRoZSBET01cbiAqIG1lYW5zIHRoZSBjdXN0b21lcidzIENTUyByZWFjaGVzIG91ciBtYXJrdXAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGV5IHdhbnRcbiAqIGFuZCB3aGF0IG1ha2VzIGFuIG92ZXJyaWRlIHN5c3RlbSBuZWNlc3NhcnkgcmF0aGVyIHRoYW4gZGVjb3JhdGl2ZS5cbiAqXG4gKiBFbGVtZW50IGNsYXNzZXMgYXJlIEFQUEVOREVEIHRvIG91cnMsIG5ldmVyIHJlcGxhY2luZyB0aGVtLiBBIGN1c3RvbWVyIGFkZGluZ1xuICogYGNsYXNzTmFtZT1cInJvdW5kZWQteGxcImAgd2FudHMgYSByb3VuZGVyIGJ1dHRvbiwgbm90IGFuIHVuc3R5bGVkIG9uZSDigJQgYW5kXG4gKiByZXBsYWNlbWVudCBpcyBhIHN1cHBvcnQgYnVyZGVuIHdoZXJlIGV2ZXJ5IG92ZXJyaWRlIHN0YXJ0cyBieSByZWJ1aWxkaW5nIHRoZVxuICogY29tcG9uZW50J3MgYmFzZSBzdHlsZXMgZnJvbSBzY3JhdGNoLlxuICovXG5cbmltcG9ydCB7XG4gIHJlbmRlckRlc2lnbkFwcGVhcmFuY2UsXG4gIHR5cGUgQXBwZWFyYW5jZVJlbmRlcixcbiAgdHlwZSBEZXNpZ25BcHBlYXJhbmNlLFxuICB0eXBlIERlc2lnbldhcm4sXG4gIHR5cGUgSW5zdGFuY2VEZXNpZ24sXG59IGZyb20gJ0BhdGxhc2F1dGgvZGVzaWduL3J1bnRpbWUnO1xuXG5leHBvcnQgeyBpbnN0YW5jZURlc2lnbkZyb20gfSBmcm9tICdAYXRsYXNhdXRoL2Rlc2lnbi9ydW50aW1lJztcbmV4cG9ydCB0eXBlIHsgQXBwZWFyYW5jZVJlbmRlciwgQXRsYXNEZXNpZ24sIEluc3RhbmNlRGVzaWduLCBQcmVzZXRJZCB9IGZyb20gJ0BhdGxhc2F1dGgvZGVzaWduL3J1bnRpbWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlc2lnblRva2VucyB7XG4gIGNvbG9yUHJpbWFyeT86IHN0cmluZztcbiAgY29sb3JUZXh0Pzogc3RyaW5nO1xuICBjb2xvckJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIGNvbG9yRGFuZ2VyPzogc3RyaW5nO1xuICBjb2xvckJvcmRlcj86IHN0cmluZztcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICBzcGFjaW5nVW5pdD86IHN0cmluZztcbn1cblxuLyoqIEV2ZXJ5IGVsZW1lbnQgYSBjdXN0b21lciBtYXkgdGFyZ2V0LiBOYW1lZCBmb3Igd2hhdCBpdCBJUywgbm90IHdoZXJlIGl0IHNpdHMuICovXG5leHBvcnQgdHlwZSBFbGVtZW50S2V5ID1cbiAgfCAncm9vdCdcbiAgfCAnY2FyZCdcbiAgfCAnaGVhZGVyVGl0bGUnXG4gIHwgJ2hlYWRlclN1YnRpdGxlJ1xuICB8ICdmb3JtRmllbGQnXG4gIHwgJ2Zvcm1GaWVsZExhYmVsJ1xuICB8ICdmb3JtRmllbGRJbnB1dCdcbiAgfCAnZm9ybUZpZWxkRXJyb3InXG4gIHwgJ2Zvcm1CdXR0b25QcmltYXJ5J1xuICB8ICdmb3JtQnV0dG9uU2Vjb25kYXJ5J1xuICB8ICdzb2NpYWxCdXR0b24nXG4gIHwgJ2RpdmlkZXJUZXh0J1xuICB8ICdmb290ZXJBY3Rpb24nXG4gIHwgJ2F2YXRhcidcbiAgfCAnbWVudSdcbiAgfCAnbWVudUl0ZW0nXG4gIHwgJ2xpc3QnXG4gIHwgJ2xpc3RJdGVtJ1xuICB8ICdiYWRnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwZWFyYW5jZSBleHRlbmRzIERlc2lnbkFwcGVhcmFuY2Uge1xuICAvKiogQSBwcmVidWlsdCB0b2tlbiB0aGVtZSB0byBzdGFydCBmcm9tIChwcmUtZGVzaWduLXN5c3RlbSB0aGVtZXMpLiAqL1xuICBiYXNlVGhlbWU/OiBrZXlvZiB0eXBlb2YgVEhFTUVTO1xuICAvKipcbiAgICogTGVnYWN5IGRlc2lnbiB0b2tlbnMuIFdpdGhvdXQgYSBkZXNpZ24gdGhleSBzZXQgdGhlIGAtLWF0bGFzLSpgIHZhcmlhYmxlc1xuICAgKiBleGFjdGx5IGFzIGJlZm9yZTsgd2l0aCBvbmUgdGhleSBtYXAgb250byBpdC5cbiAgICovXG4gIHZhcmlhYmxlcz86IERlc2lnblRva2VucztcbiAgZWxlbWVudHM/OiBQYXJ0aWFsPFJlY29yZDxFbGVtZW50S2V5LCBzdHJpbmc+PjtcbiAgLy8gRnJvbSBEZXNpZ25BcHBlYXJhbmNlOlxuICAvLyAgIHByZXNldD86IFByZXNldElkICAgICAgICAgICAgYSBkZXNpZ24gcHJlc2V0IChyZXBsYWNlcyB0aGUgZGFzaGJvYXJkIGRlc2lnbiBhcyB0aGUgYmFzZSlcbiAgLy8gICBkZXNpZ24/OiBBdGxhc0Rlc2lnbiAgICAgICAgIHN0cnVjdHVyZWQgb3ZlcnJpZGVzLCBoaWdoZXN0IHByZWNlZGVuY2VcbiAgLy8gICBpbnN0YW5jZURlc2lnbj86IGJvb2xlYW4gICAgIGFwcGx5IHRoZSBkYXNoYm9hcmQgZGVzaWduIGF1dG9tYXRpY2FsbHkgKGRlZmF1bHQgdHJ1ZSlcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVE9LRU5TOiBSZXF1aXJlZDxEZXNpZ25Ub2tlbnM+ID0ge1xuICBjb2xvclByaW1hcnk6ICcjNWI1YmQ2JyxcbiAgY29sb3JUZXh0OiAnIzFjMWMxZicsXG4gIGNvbG9yQmFja2dyb3VuZDogJyNmZmZmZmYnLFxuICBjb2xvckRhbmdlcjogJyNkNjQ1NDUnLFxuICBjb2xvckJvcmRlcjogJyNlNGU0ZTknLFxuICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICBmb250RmFtaWx5OiAndWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBcIlNlZ29lIFVJXCIsIHNhbnMtc2VyaWYnLFxuICBzcGFjaW5nVW5pdDogJzRweCcsXG59O1xuXG4vKipcbiAqIMKnMTAuMzogXCJwcmVidWlsdCB0aGVtZXMgc2hpcHBlZCAoZGVmYXVsdCwgZGFyaywgbmVvYnJ1dGFsaXN0IGFzIGEgZGVtbyBvZiB0aGVcbiAqIG92ZXJyaWRlIHN5c3RlbSlcIi4gTmVvYnJ1dGFsaXN0IGV4aXN0cyB0byBwcm92ZSB0aGUgdG9rZW4gc2V0IGlzIGV4cHJlc3NpdmVcbiAqIGVub3VnaCBmb3IgYSB0aGVtZSB0aGF0IGxvb2tzIG5vdGhpbmcgbGlrZSB0aGUgZGVmYXVsdCDigJQgYSB0aGVtaW5nIHN5c3RlbVxuICogdGhhdCBvbmx5IHByb2R1Y2VzIHRhc3RlZnVsIHZhcmlhdGlvbnMgb2YgaXRzZWxmIGlzIG5vdCBhIHRoZW1pbmcgc3lzdGVtLlxuICovXG5leHBvcnQgY29uc3QgVEhFTUVTID0ge1xuICBkZWZhdWx0OiBERUZBVUxUX1RPS0VOUyxcbiAgZGFyazoge1xuICAgIC4uLkRFRkFVTFRfVE9LRU5TLFxuICAgIGNvbG9yVGV4dDogJyNlNmU5ZWYnLFxuICAgIGNvbG9yQmFja2dyb3VuZDogJyMxNDE3MWMnLFxuICAgIGNvbG9yQm9yZGVyOiAnIzI0MjkzMicsXG4gICAgY29sb3JQcmltYXJ5OiAnIzZlYThmZScsXG4gIH0sXG4gIG5lb2JydXRhbGlzdDoge1xuICAgIC4uLkRFRkFVTFRfVE9LRU5TLFxuICAgIGNvbG9yUHJpbWFyeTogJyNmZmU2MDAnLFxuICAgIGNvbG9yVGV4dDogJyMwMDAwMDAnLFxuICAgIGNvbG9yQmFja2dyb3VuZDogJyNmZmZmZmYnLFxuICAgIGNvbG9yQm9yZGVyOiAnIzAwMDAwMCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnMHB4JyxcbiAgICBmb250RmFtaWx5OiAnXCJDb3VyaWVyIE5ld1wiLCB1aS1tb25vc3BhY2UsIG1vbm9zcGFjZScsXG4gIH0sXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBSZXF1aXJlZDxEZXNpZ25Ub2tlbnM+PjtcblxuLyoqXG4gKiBSZXNvbHZlIHRva2VuczogZGVmYXVsdHMsIHRoZW4gdGhlIGJhc2UgdGhlbWUsIHRoZW4gZXhwbGljaXQgdmFyaWFibGVzLlxuICpcbiAqIExhdGVyIHdpbnMsIGFuZCBgdW5kZWZpbmVkYCBuZXZlciBvdmVyd3JpdGVzLiBBIGN1c3RvbWVyIHNldHRpbmcgb25lIHZhcmlhYmxlXG4gKiBvbiB0aGUgZGFyayB0aGVtZSBleHBlY3RzIHRoZSBvdGhlciBlbGV2ZW4gdG8gc3RheSBkYXJrLCBub3Qgc2lsZW50bHkgcmV2ZXJ0XG4gKiB0byB0aGUgbGlnaHQgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVG9rZW5zKGFwcGVhcmFuY2U/OiBBcHBlYXJhbmNlKTogUmVxdWlyZWQ8RGVzaWduVG9rZW5zPiB7XG4gIGNvbnN0IGJhc2UgPSBhcHBlYXJhbmNlPy5iYXNlVGhlbWUgPyBUSEVNRVNbYXBwZWFyYW5jZS5iYXNlVGhlbWVdIDogREVGQVVMVF9UT0tFTlM7XG4gIGNvbnN0IG92ZXJyaWRlcyA9IGFwcGVhcmFuY2U/LnZhcmlhYmxlcyA/PyB7fTtcblxuICBjb25zdCByZXNvbHZlZCA9IHsgLi4uREVGQVVMVF9UT0tFTlMsIC4uLmJhc2UgfTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGVzKSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXNvbHZlZFtrZXkgYXMga2V5b2YgRGVzaWduVG9rZW5zXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuLyoqIFRva2VucyBhcyBDU1MgY3VzdG9tIHByb3BlcnRpZXMsIGZvciB0aGUgaG9zdCBET00gdG8gaW5oZXJpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NWYXJpYWJsZXModG9rZW5zOiBSZXF1aXJlZDxEZXNpZ25Ub2tlbnM+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModG9rZW5zKSkge1xuICAgIC8vIGNhbWVsQ2FzZSDihpIgLS1hdGxhcy1rZWJhYi1jYXNlLCB3aGljaCBpcyB3aGF0IGEgY3VzdG9tZXIgd3JpdGVzIGluIENTUy5cbiAgICB2YXJzW2AtLWF0bGFzLSR7a2V5LnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApfWBdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogQ29tYmluZSBvdXIgYmFzZSBjbGFzcyB3aXRoIHRoZSBjdXN0b21lcidzIG92ZXJyaWRlLlxuICpcbiAqIEFwcGVuZGVkLCBuZXZlciByZXBsYWNlZCDigJQgYSBjdXN0b21lciBhZGRpbmcgYHJvdW5kZWQteGxgIHdhbnRzIGEgcm91bmRlclxuICogYnV0dG9uLCBub3QgYW4gdW5zdHlsZWQgb25lLiBUaGVpcnMgY29tZXMgbGFzdCBzbyBpdCB3aW5zIG9uIGVxdWFsXG4gKiBzcGVjaWZpY2l0eSwgd2hpY2ggaXMgdGhlIGJlaGF2aW91ciBhbnlvbmUgd3JpdGluZyBUYWlsd2luZCBleHBlY3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NGb3IoXG4gIGVsZW1lbnQ6IEVsZW1lbnRLZXksXG4gIGFwcGVhcmFuY2U6IEFwcGVhcmFuY2UgfCB1bmRlZmluZWQsXG4gIGJhc2U6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG92ZXJyaWRlID0gYXBwZWFyYW5jZT8uZWxlbWVudHM/LltlbGVtZW50XTtcbiAgcmV0dXJuIG92ZXJyaWRlID8gYCR7YmFzZX0gJHtvdmVycmlkZX1gIDogYmFzZTtcbn1cblxuLy8gLS0tLSB0aGUgZGVzaWduIHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBUaGUgbGVnYWN5IHRva2VucyB0aGUgZGV2ZWxvcGVyIGNob3NlIEVYUExJQ0lUTFk6IGEgbm9uLWRlZmF1bHQgYGJhc2VUaGVtZWBcbiAqIHBsdXMgYHZhcmlhYmxlc2AuIE9ubHkgdGhlc2UgbWFwIG9udG8gYSBkZXNpZ24g4oCUIHRoZSB0b2tlbiBkZWZhdWx0cyBtdXN0IG5vdFxuICogb3ZlcndyaXRlIHRoZSBkYXNoYm9hcmQgZGVzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwbGljaXRUb2tlbnMoYXBwZWFyYW5jZT86IEFwcGVhcmFuY2UpOiBEZXNpZ25Ub2tlbnMge1xuICBjb25zdCBvdXQ6IERlc2lnblRva2VucyA9IHt9O1xuICBpZiAoYXBwZWFyYW5jZT8uYmFzZVRoZW1lICYmIGFwcGVhcmFuY2UuYmFzZVRoZW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICBPYmplY3QuYXNzaWduKG91dCwgVEhFTUVTW2FwcGVhcmFuY2UuYmFzZVRoZW1lXSk7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXBwZWFyYW5jZT8udmFyaWFibGVzID8/IHt9KSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBvdXRba2V5IGFzIGtleW9mIERlc2lnblRva2Vuc10gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFR1cm4gYW4gYGFwcGVhcmFuY2VgICgrIHRoZSBpbnN0YW5jZSdzIGRhc2hib2FyZCBkZXNpZ24gZnJvbSB0aGUgRnJvbnRlbmRcbiAqIEFQSSkgaW50byByb290IGF0dHJpYnV0ZXMgYW5kIGEgc3R5bGVzaGVldCDigJQgdGhlIHNhbWUgc2VtYW50aWNzIGFzXG4gKiBgQGF0bGFzYXV0aC9yZWFjdGAuIFByZWNlZGVuY2UsIGxvd2VzdCBmaXJzdDogZGFzaGJvYXJkIGRlc2lnbiA8IGBwcmVzZXRgIDxcbiAqIGB2YXJpYWJsZXNgIChhbmQgYSBub24tZGVmYXVsdCBgYmFzZVRoZW1lYCkgPCBgZGVzaWduYC4gV2l0aG91dCBhIGRhc2hib2FyZFxuICogZGVzaWduIGFuZCB3aXRob3V0IGBwcmVzZXRgL2BkZXNpZ25gLCB0aGUgb3V0cHV0IGlzIGV4YWN0bHkgdGhlXG4gKiBwcmUtZGVzaWduLXN5c3RlbSBvbmU6IHRoZSB0b2tlbiB2YXJpYWJsZXMsIG5vIHN0eWxlc2hlZXQsIG5vIGF0dHJpYnV0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJBcHBlYXJhbmNlKFxuICBhcHBlYXJhbmNlOiBBcHBlYXJhbmNlIHwgdW5kZWZpbmVkLFxuICBpbnN0YW5jZURlc2lnbjogSW5zdGFuY2VEZXNpZ24gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiB7IGZyb250ZW5kQXBpPzogc3RyaW5nOyB3YXJuPzogRGVzaWduV2FybiB9ID0ge30sXG4pOiBBcHBlYXJhbmNlUmVuZGVyIHtcbiAgcmV0dXJuIHJlbmRlckRlc2lnbkFwcGVhcmFuY2UoYXBwZWFyYW5jZSwgaW5zdGFuY2VEZXNpZ24sIHtcbiAgICB0b2tlbnM6IGV4cGxpY2l0VG9rZW5zKGFwcGVhcmFuY2UpLFxuICAgIGxlZ2FjeVN0eWxlOiAoKSA9PiBjc3NWYXJpYWJsZXMocmVzb2x2ZVRva2VucyhhcHBlYXJhbmNlKSksXG4gICAgZnJvbnRlbmRBcGk6IG9wdGlvbnMuZnJvbnRlbmRBcGksXG4gICAgd2Fybjogb3B0aW9ucy53YXJuLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -3,7 +3,8 @@ import { isPlatformBrowser } from '@angular/common';
|
|
|
3
3
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
|
|
5
5
|
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
6
|
-
import {
|
|
6
|
+
import { AtlasOrganizationAuditLog } from './components/organization-audit-log';
|
|
7
|
+
import { FapiClient, SignOutGuard, catalogLocale, localizedErrorMessage, TokenCache, closeOAuthPopupAfterSignIn, completeOAuthPopupLanding, getProviderToken as fetchProviderToken, mapOAuthPopupPayload, msUntilRefresh, readExpiry, readRedirectResult, resolveFrontendApi, stripRedirectParams, SDK_HEADER, SignOutNotifier, getTemplateToken, reportSdkAdvisory, sdkHeaderValue, signOutReasonFromClient, configureReferralCapture, withDevBrowser, reauthenticate, } from '@atlasauth/js';
|
|
7
8
|
import { evaluate } from '@atlasauth/authz';
|
|
8
9
|
import { ATLAS_OPTIONS } from './atlas.config';
|
|
9
10
|
import { cssVariables, instanceDesignFrom, renderAppearance, resolveTokens, } from './appearance';
|
|
@@ -221,6 +222,23 @@ export class AtlasService {
|
|
|
221
222
|
return null;
|
|
222
223
|
}
|
|
223
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* The active organization's audit trail, for its admins: `state` is a signal
|
|
227
|
+
* of `{ entries, loading, forbidden, hasMore }`, one page at a time with
|
|
228
|
+
* `loadMore()`. `action` narrows it (exact, or a prefix ending in `.`). It
|
|
229
|
+
* follows the active organization; call `destroy()` when done. The peer of
|
|
230
|
+
* React's `useOrganizationAuditLog`.
|
|
231
|
+
*/
|
|
232
|
+
organizationAuditLog(options = {}) {
|
|
233
|
+
return new AtlasOrganizationAuditLog(this.createFapiClient(), this.organization$, options);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Re-authenticate the signed-in user with their password (a step-up), for an
|
|
237
|
+
* action the server answered with STEP_UP_REQUIRED. Rejects when refused.
|
|
238
|
+
*/
|
|
239
|
+
reauthenticate(password) {
|
|
240
|
+
return reauthenticate({ strategy: 'password', password }, { api: this.baseUrl, publishableKey: this.publishableKey, fetchImpl: this.doFetch, locale: this.requestLocale });
|
|
241
|
+
}
|
|
224
242
|
/** A fresh {@link FapiClient} for driving a sign-in/sign-up flow. */
|
|
225
243
|
createFapiClient() {
|
|
226
244
|
return new FapiClient({
|
|
@@ -288,6 +306,25 @@ export class AtlasService {
|
|
|
288
306
|
await this.reload();
|
|
289
307
|
return this.guard.settle(attempt, options);
|
|
290
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* End the active impersonation ("return to admin"): the impersonator's own
|
|
311
|
+
* session on this browser becomes active again with no sign-in
|
|
312
|
+
* (`resumed: true`); with none, another account signed in here is adopted,
|
|
313
|
+
* or this browser is signed out.
|
|
314
|
+
*/
|
|
315
|
+
async endImpersonation() {
|
|
316
|
+
const outcome = await this.guard.endImpersonation(this.cache.peek()?.sessionId ?? this._session.value?.id ?? null);
|
|
317
|
+
if (!outcome.ended)
|
|
318
|
+
return outcome;
|
|
319
|
+
if (!outcome.activeSessionId) {
|
|
320
|
+
this.clearLocalState('user');
|
|
321
|
+
return outcome;
|
|
322
|
+
}
|
|
323
|
+
if (outcome.jwt)
|
|
324
|
+
this.applyToken(outcome.jwt, outcome.activeSessionId);
|
|
325
|
+
await this.reload();
|
|
326
|
+
return outcome;
|
|
327
|
+
}
|
|
291
328
|
/**
|
|
292
329
|
* Switch the active organization (or `null` for the personal account). The
|
|
293
330
|
* new token carries the new org claims, so the app's permission checks update
|
|
@@ -388,7 +425,7 @@ export class AtlasService {
|
|
|
388
425
|
readPendingAttempt() {
|
|
389
426
|
const result = readRedirectResult(window.location.search);
|
|
390
427
|
return result?.status && !result.ticket
|
|
391
|
-
? { id: result.attemptId, status: result.status }
|
|
428
|
+
? { id: result.attemptId, status: result.status, ...(result.policyToken ? { policyToken: result.policyToken } : {}) }
|
|
392
429
|
: null;
|
|
393
430
|
}
|
|
394
431
|
async call(path, init) {
|
|
@@ -490,4 +527,4 @@ function decodeClaims(jwt) {
|
|
|
490
527
|
return null;
|
|
491
528
|
}
|
|
492
529
|
}
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRsYXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXRsYXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFFckIsVUFBVSxFQUNWLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsZ0JBQWdCLElBQUksa0JBQWtCLEVBQ3RDLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBS25CLFVBQVUsRUFDVixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsdUJBQXVCLEVBSXZCLHdCQUF3QixFQUN4QixjQUFjLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBeUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FJZCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBZ0Is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LEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzt3R0ExZlUsWUFBWTs0R0FBWixZQUFZLGNBREMsTUFBTTs7NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQThmbEMsNkVBQTZFO0FBQzdFLFNBQVMsWUFBWSxDQUFDLEdBQVc7SUFDL0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BDLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FDZixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0lBQ3JCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95LFxuICBQTEFURk9STV9JRCxcbiAgU2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRmFwaUNsaWVudCxcbiAgU2lnbk91dEd1YXJkLFxuICBjYXRhbG9nTG9jYWxlLFxuICBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UsXG4gIHR5cGUgRXJyb3JMaWtlLFxuICBUb2tlbkNhY2hlLFxuICBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbixcbiAgY29tcGxldGVPQXV0aFBvcHVwTGFuZGluZyxcbiAgZ2V0UHJvdmlkZXJUb2tlbiBhcyBmZXRjaFByb3ZpZGVyVG9rZW4sXG4gIG1hcE9BdXRoUG9wdXBQYXlsb2FkLFxuICBtc1VudGlsUmVmcmVzaCxcbiAgcmVhZEV4cGlyeSxcbiAgcmVhZFJlZGlyZWN0UmVzdWx0LFxuICByZXNvbHZlRnJvbnRlbmRBcGksXG4gIHN0cmlwUmVkaXJlY3RQYXJhbXMsXG4gIHR5cGUgUHJvdmlkZXJUb2tlbixcbiAgdHlwZSBSZWRpcmVjdFJlc3VsdCxcbiAgdHlwZSBTaWduT3V0T3B0aW9ucyxcbiAgdHlwZSBTaWduT3V0UmVzdWx0LFxuICBTREtfSEVBREVSLFxuICBTaWduT3V0Tm90aWZpZXIsXG4gIGdldFRlbXBsYXRlVG9rZW4sXG4gIHJlcG9ydFNka0Fkdmlzb3J5LFxuICBzZGtIZWFkZXJWYWx1ZSxcbiAgc2lnbk91dFJlYXNvbkZyb21DbGllbnQsXG4gIHR5cGUgU2lnbk91dEV2ZW50LFxuICB0eXBlIFNpZ25PdXRMaXN0ZW5lcixcbiAgdHlwZSBTaWduT3V0UmVhc29uLFxuICBjb25maWd1cmVSZWZlcnJhbENhcHR1cmUsXG4gIHdpdGhEZXZCcm93c2VyLFxufSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IGV2YWx1YXRlLCB0eXBlIFByb3RlY3RDb25kaXRpb24gfSBmcm9tICdAYXRsYXNhdXRoL2F1dGh6JztcbmltcG9ydCB7IEFUTEFTX09QVElPTlMgfSBmcm9tICcuL2F0bGFzLmNvbmZpZyc7XG5pbXBvcnQge1xuICBjc3NWYXJpYWJsZXMsXG4gIGluc3RhbmNlRGVzaWduRnJvbSxcbiAgcmVuZGVyQXBwZWFyYW5jZSxcbiAgcmVzb2x2ZVRva2VucyxcbiAgdHlwZSBBcHBlYXJhbmNlLFxuICB0eXBlIEFwcGVhcmFuY2VSZW5kZXIsXG4gIHR5cGUgSW5zdGFuY2VEZXNpZ24sXG59IGZyb20gJy4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeyBFTl9VUywgd2l0aEZhbGxiYWNrLCB0eXBlIENhdGFsb2cgfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHR5cGUge1xuICBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXAsXG4gIEF0bGFzU2Vzc2lvbixcbiAgQXRsYXNVc2VyLFxuICBBdXRoU3RhdHVzLFxuICBTZXNzaW9uQ2xhaW1zLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEFUTEFTX0FOR1VMQVJfU0RLIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuLyoqXG4gKiBgQXRsYXNTZXJ2aWNlYCDigJQgdGhlIEFuZ3VsYXIgcGVlciBvZiBSZWFjdCdzIGA8QXRsYXNQcm92aWRlcj5gICsgaG9va3MuXG4gKlxuICogSXQgaG9sZHMgZXhhY3RseSBvbmUgdGhpbmcgdGhhdCBtYXR0ZXJzIGluIG1lbW9yeTogdGhlIHNob3J0LWxpdmVkIEpXVCwgaW4gYVxuICoge0BsaW5rIFRva2VuQ2FjaGV9LiBOb3QgbG9jYWxTdG9yYWdlLCBub3QgYSBjb29raWUgdGhpcyBjb2RlIHdyaXRlcyDigJQgdGhlXG4gKiByZWZyZXNoIHRva2VuIGlzIEh0dHBPbmx5IHNvIGJyb3dzZXIgc2NyaXB0IG5ldmVyIHRvdWNoZXMgaXQsIGFuZCB0aGUgSldUXG4gKiBsaXZlcyBvbmx5IGFzIGxvbmcgYXMgdGhlIHRhYi4gQW55dGhpbmcgcGVyc2lzdGVkIHdvdWxkIHN1cnZpdmUgdGhlIHRhYiBhbmRcbiAqIGJlY29tZSB0aGUgZmlyc3QgdGhpbmcgYW4gWFNTIHJlYWRzLlxuICpcbiAqIFJlYWN0aXZlIGF1dGggc3RhdGUgaXMgZXhwb3NlZCB0d28gd2F5cyBzbyBjYWxsZXJzIGNhbiBwaWNrIHRoZWlyIGlkaW9tOlxuICogIC0gUnhKUyBvYnNlcnZhYmxlcyAoYHVzZXIkYCwgYHNlc3Npb24kYCwgYGlzU2lnbmVkSW4kYCwg4oCmKSDigJQgdGhlIHByaW1hcnkgQVBJLFxuICogICAgdGhlIGFuYWxvZ3VlIG9mIHRoZSBSZWFjdCBob29rcycgcmV0dXJuIHZhbHVlcy5cbiAqICAtIEFuZ3VsYXIgc2lnbmFscyAoYHVzZXJgLCBgc2Vzc2lvbmAsIGBpc1NpZ25lZEluYCwg4oCmKSDigJQgdGhlIHNhbWUgdmFsdWVzIGFzXG4gKiAgICBgU2lnbmFsPFQ+YCwgZm9yIHRlbXBsYXRlcyBhbmQgYGNvbXB1dGVkKClgLlxuICpcbiAqIFRoZSBpbXBlcmF0aXZlIG1ldGhvZHMgKGBzaWduT3V0YCwgYGdldFRva2VuYCwgYGdldFByb3ZpZGVyVG9rZW5gLFxuICogYHNldEFjdGl2ZU9yZ2FuaXphdGlvbmAsIGByZWxvYWRgKSBtaXJyb3IgdGhlIGFjdGlvbnMgdGhlIGhvb2tzIHJldHVybi5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdGxhc1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3QoQVRMQVNfT1BUSU9OUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwdWJsaXNoYWJsZUtleTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvRmV0Y2g6IHR5cGVvZiBmZXRjaDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IFRva2VuQ2FjaGUoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmYXBpQ2xpZW50OiBGYXBpQ2xpZW50O1xuICBwcml2YXRlIHJlZnJlc2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIHNlc3Npb25zIHRoaXMgYnJvd3NlciBzaWduZWQgb3V0IG9mICh0b21ic3RvbmVzIGluIGxvY2FsU3RvcmFnZSwgcGVyXG4gICAqIEZyb250ZW5kIEFQSSBvcmlnaW4pLCB0aGUgcmV2b2tlIGFuZCBpdHMgYmFja2dyb3VuZCByZS10cmllcy4gRXZlcnkgcmVsb2FkIC9cbiAgICogcmVmcmVzaCBhc2tzIGl0IGJlZm9yZSBhZG9wdGluZyBhIHNlc3Npb24sIHNvIGEgc2lnbi1vdXQgdGhlIHNlcnZlciBuZXZlclxuICAgKiBjb25maXJtZWQgaXMgbm90IHVuZG9uZSBieSB0aGUgc3RpbGwtdmFsaWQgcmVmcmVzaCBjb29raWUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGd1YXJkOiBTaWduT3V0R3VhcmQ7XG4gIHByaXZhdGUgc3RvcFdhdGNoaW5nU2lnbk91dDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nOiBDYXRhbG9nO1xuICAvKiogVGhlIGxhbmd1YWdlIGxheWVyIG9mIGBjYXRhbG9nYCAodGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSBhbG9uZTsgYEVOX1VTYCB3aGVuIG5vbmUpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQ2F0YWxvZzogQ2F0YWxvZztcbiAgLyoqIFNlbnQgdG8gdGhlIEZyb250ZW5kIEFQSSBhcyBgQWNjZXB0LUxhbmd1YWdlYDogdGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSdzIGBsb2NhbGVgIHRhZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0TG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgc2lnbi1pbiBhdHRlbXB0IGhhbmRlZCBiYWNrIGJ5IGFuIE9BdXRoIHJlZGlyZWN0IHRoYXQgc3RpbGwgbmVlZHMgYSBzZWNvbmRcbiAgICogZmFjdG9yIChubyBzZXNzaW9uIHdhcyBpc3N1ZWQpLiBOdWxsIGluIHRoZSBvcmRpbmFyeSBjYXNlOyB0aGUgYDxhdGxhcy1zaWduLWluPmBcbiAgICogZmxvdyBzZWVkcyBpdHNlbGYgZnJvbSB0aGlzIHNvIHRoZSB1c2VyIHJlc3VtZXMgYXQgdGhlIDJGQSBzdGVwLiBDYXB0dXJlZFxuICAgKiBvbmNlLCBzeW5jaHJvbm91c2x5LCBhdCBjb25zdHJ1Y3Rpb24g4oCUIGJlZm9yZSBhbnkgZmxvdyBjb21wb25lbnQgcmVhZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nQXR0ZW1wdDogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9IHwgbnVsbDtcblxuICAvLyAtLS0gUmVhY3RpdmUgc3RhdGUgKHNvdXJjZSBvZiB0cnV0aCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdHVzPignbG9hZGluZycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91c2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdGxhc1VzZXIgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXRsYXNTZXNzaW9uIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYWltcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Vzc2lvbkNsYWltcyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZW1iZXJzaGlwcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwW10+KFtdKTtcbiAgLy8gQVRMLVMtMzAgc2lnbi1vdXQgZXZlbnRzLCBvbiBldmVyeSBwYXRoLlxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWVyID0gbmV3IFNpZ25PdXROb3RpZmllcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaWduT3V0ID0gbmV3IFN1YmplY3Q8U2lnbk91dEV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdHMgb25jZSBlYWNoIHRpbWUgYSBzaWduZWQtaW4gdXNlciBiZWNvbWVzIHNpZ25lZCBvdXQ6IGByZWFzb25gIGlzXG4gICAqIGB1c2VyYCwgYG90aGVyX3RhYmAsIGBzZXNzaW9uX2V4cGlyZWRgLCBgcmV2b2tlZGAgKGVuZGVkIGVsc2V3aGVyZSwgc2VlbiBvblxuICAgKiB0aGUgbmV4dCB0b2tlbiByZWZyZXNoKSBvciBgdW5rbm93bmAuIFRoZSBwbGFjZSB0byByZXNldCBhbiBlbWJlZGRlZFxuICAgKiB0aGlyZCBwYXJ0eSAoYSBjaGF0IHdpZGdldCkuIEFsc28gZGlzcGF0Y2hlZCBhcyBgYXRsYXM6c2lnbm91dGAgb24gYHdpbmRvd2AuXG4gICAqL1xuICByZWFkb25seSBzaWduT3V0JDogT2JzZXJ2YWJsZTxTaWduT3V0RXZlbnQ+ID0gdGhpcy5fc2lnbk91dC5hc09ic2VydmFibGUoKTtcblxuICAvKiogVGhlIHRocmVlLXN0YXRlIGF1dGggbGlmZWN5Y2xlOiBgbG9hZGluZ2Ag4oaSIGBzaWduZWRfaW5gIHwgYHNpZ25lZF9vdXRgLiAqL1xuICByZWFkb25seSBzdGF0dXMkOiBPYnNlcnZhYmxlPEF1dGhTdGF0dXM+ID0gdGhpcy5fc3RhdHVzLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSB1c2VyJDogT2JzZXJ2YWJsZTxBdGxhc1VzZXIgfCBudWxsPiA9IHRoaXMuX3VzZXIuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IHNlc3Npb24kOiBPYnNlcnZhYmxlPEF0bGFzU2Vzc2lvbiB8IG51bGw+ID0gdGhpcy5fc2Vzc2lvbi5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgY2xhaW1zJDogT2JzZXJ2YWJsZTxTZXNzaW9uQ2xhaW1zIHwgbnVsbD4gPSB0aGlzLl9jbGFpbXMuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBzJDogT2JzZXJ2YWJsZTxBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXT4gPVxuICAgIHRoaXMuX21lbWJlcnNoaXBzLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKlxuICAgKiBUcnVlIG9uY2UgdGhlIFNESyBoYXMgZmluaXNoZWQgaXRzIGZpcnN0IGJvb3QuIERpc3Rpbmd1aXNoaW5nIFwic3RpbGwgbG9hZGluZ1wiXG4gICAqIGZyb20gXCJzaWduZWQgb3V0XCIgaXMgd2hhdCBsZXRzIGEgdGVtcGxhdGUgYXZvaWQgdGhlIGZsYXNoIG9mIGEgc2lnbi1pbiBmb3JtXG4gICAqIG9uIGV2ZXJ5IHBhZ2UgbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RhdHVzJC5waXBlKFxuICAgIG1hcCgocykgPT4gcyAhPT0gJ2xvYWRpbmcnKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICApO1xuXG4gIHJlYWRvbmx5IGlzU2lnbmVkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdGF0dXMkLnBpcGUoXG4gICAgbWFwKChzKSA9PiBzID09PSAnc2lnbmVkX2luJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgKTtcblxuICAvKiogVGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gbWVtYmVyc2hpcCwgZGVyaXZlZCBmcm9tIHRoZSB0b2tlbidzIGBvcmdfaWRgIGNsYWltLiAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb24kOiBPYnNlcnZhYmxlPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcCB8IG51bGw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fbWVtYmVyc2hpcHMsXG4gICAgdGhpcy5fY2xhaW1zLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbbWVtYmVyc2hpcHMsIGNsYWltc10pID0+XG4gICAgICAgIG1lbWJlcnNoaXBzLmZpbmQoKG0pID0+IG0ub3JnYW5pemF0aW9uLmlkID09PSBjbGFpbXM/Lm9yZ19pZCkgPz8gbnVsbCxcbiAgICApLFxuICApO1xuXG4gIC8vIC0tLSBTaWduYWwgbWlycm9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICByZWFkb25seSBzdGF0dXM6IFNpZ25hbDxBdXRoU3RhdHVzPiA9IHRvU2lnbmFsKHRoaXMuc3RhdHVzJCwgeyBpbml0aWFsVmFsdWU6ICdsb2FkaW5nJyB9KTtcbiAgcmVhZG9ubHkgdXNlcjogU2lnbmFsPEF0bGFzVXNlciB8IG51bGw+ID0gdG9TaWduYWwodGhpcy51c2VyJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIHJlYWRvbmx5IHNlc3Npb246IFNpZ25hbDxBdGxhc1Nlc3Npb24gfCBudWxsPiA9IHRvU2lnbmFsKHRoaXMuc2Vzc2lvbiQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBjbGFpbXM6IFNpZ25hbDxTZXNzaW9uQ2xhaW1zIHwgbnVsbD4gPSB0b1NpZ25hbCh0aGlzLmNsYWltcyQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBtZW1iZXJzaGlwczogU2lnbmFsPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdPiA9IHRvU2lnbmFsKHRoaXMubWVtYmVyc2hpcHMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXSxcbiAgfSk7XG4gIHJlYWRvbmx5IGlzTG9hZGVkOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXR1cygpICE9PSAnbG9hZGluZycpO1xuICByZWFkb25seSBpc1NpZ25lZEluOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXR1cygpID09PSAnc2lnbmVkX2luJyk7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogU2lnbmFsPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcCB8IG51bGw+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5jbGFpbXMoKT8ub3JnX2lkO1xuICAgIHJldHVybiB0aGlzLm1lbWJlcnNoaXBzKCkuZmluZCgobSkgPT4gbS5vcmdhbml6YXRpb24uaWQgPT09IG9yZ0lkKSA/PyBudWxsO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucHVibGlzaGFibGVLZXkgPSBvcHRpb25zLnB1Ymxpc2hhYmxlS2V5O1xuICAgIC8vIFRocm93cyBhbiBgQXRsYXNDb25maWdFcnJvcmAgb24gYSBtaXNzaW5nL2ludmFsaWQgdmFsdWUgcmF0aGVyIHRoYW4gcXVpZXRseVxuICAgIC8vIHNlbmRpbmcgZXZlcnkgcmVxdWVzdCB0byBhIHJlbGF0aXZlIHBhdGggb24gdGhlIGFwcCdzIG9yaWdpbi5cbiAgICB0aGlzLmJhc2VVcmwgPSByZXNvbHZlRnJvbnRlbmRBcGkob3B0aW9ucy5mcm9udGVuZEFwaSwge1xuICAgICAgY29tcG9uZW50OiAncHJvdmlkZUF0bGFzKCkgLyBBdGxhc01vZHVsZS5mb3JSb290KCknLFxuICAgIH0pO1xuICAgIC8vIERldmVsb3BtZW50IGluc3RhbmNlcyBrZWVwIHRoZSBzZXNzaW9uIGluIGEgaGVhZGVyIHdoZXJlIHRoZSBicm93c2VyIGJsb2NrcyB0aGUgY29va2llLlxuICAgIHRoaXMuZG9GZXRjaCA9IHdpdGhEZXZCcm93c2VyKFxuICAgICAgb3B0aW9ucy5wdWJsaXNoYWJsZUtleSxcbiAgICAgIG9wdGlvbnMuZmV0Y2hJbXBsID8/ICgoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgZmV0Y2g+KSA9PiBmZXRjaCguLi5hcmdzKSksXG4gICAgKTtcblxuICAgIHRoaXMuY2F0YWxvZyA9IG9wdGlvbnMubG9jYWxpemF0aW9uID8gd2l0aEZhbGxiYWNrKG9wdGlvbnMubG9jYWxpemF0aW9uKSA6IEVOX1VTO1xuICAgIHRoaXMuZXJyb3JDYXRhbG9nID0gb3B0aW9ucy5sb2NhbGl6YXRpb24gPz8gRU5fVVM7XG4gICAgdGhpcy5yZXF1ZXN0TG9jYWxlID0gY2F0YWxvZ0xvY2FsZShvcHRpb25zLmxvY2FsaXphdGlvbik7XG5cbiAgICAvLyBSZWZlcnJhbCBhdHRyaWJ1dGlvbjogYXBwLXdpZGUgb3B0aW9ucyBldmVyeSBGQVBJIGNsaWVudCBvbiB0aGUgcGFnZSBmYWxscyBiYWNrIHRvLlxuICAgIGNvbmZpZ3VyZVJlZmVycmFsQ2FwdHVyZSh7IHJlZmVycmFsOiBvcHRpb25zLnJlZmVycmFsLCByZWZlcnJhbENvbnNlbnQ6IG9wdGlvbnMucmVmZXJyYWxDb25zZW50IH0pO1xuICAgIHRoaXMuZmFwaUNsaWVudCA9IG5ldyBGYXBpQ2xpZW50KHtcbiAgICAgIHB1Ymxpc2hhYmxlS2V5OiB0aGlzLnB1Ymxpc2hhYmxlS2V5LFxuICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgZmV0Y2hJbXBsOiB0aGlzLmRvRmV0Y2gsXG4gICAgICBsb2NhbGU6IHRoaXMucmVxdWVzdExvY2FsZSxcbiAgICAgIHNkazogQVRMQVNfQU5HVUxBUl9TREssXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vdGlmaWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuX3NpZ25PdXQubmV4dChldmVudCkpO1xuICAgIGlmIChvcHRpb25zLm9uU2lnbk91dCkgdGhpcy5ub3RpZmllci5zdWJzY3JpYmUob3B0aW9ucy5vblNpZ25PdXQpO1xuXG4gICAgdGhpcy5ndWFyZCA9IG5ldyBTaWduT3V0R3VhcmQoe1xuICAgICAgcmVxdWVzdDogKHBhdGgsIGluaXQpID0+IHRoaXMuY2FsbChwYXRoLCBpbml0KSxcbiAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmJhc2VVcmwsXG4gICAgfSk7XG5cbiAgICAvLyBDYXB0dXJlZCBzeW5jaHJvbm91c2x5IChub3QgaW4gYW4gYXN5bmMgaW5pdCkgc28gaXQgaXMgYXZhaWxhYmxlIGJlZm9yZSBhbnlcbiAgICAvLyBmbG93IGNvbXBvbmVudCByZWFkcyBpdDogYSBuZWVkc19zZWNvbmRfZmFjdG9yIHJlZGlyZWN0IGNhcnJpZXMgYSBzdGF0dXMgYnV0XG4gICAgLy8gbm8gdGlja2V0LCBhbmQgdGhhdCBpcyB3aGF0IHRoZSAyRkEgcmVzdW1lIHNlZWRzIGZyb20uXG4gICAgdGhpcy5wZW5kaW5nQXR0ZW1wdCA9IHRoaXMuaXNCcm93c2VyID8gdGhpcy5yZWFkUGVuZGluZ0F0dGVtcHQoKSA6IG51bGw7XG5cbiAgICAvLyBCb290IG9uY2UsIGJyb3dzZXIgb25seS4gT24gdGhlIHNlcnZlciB0aGVyZSBpcyBubyBjb29raWUgamFyIHRvIHJlYWQgYVxuICAgIC8vIHNlc3Npb24gZnJvbSwgc28gd2UgbGVhdmUgdGhlIHN0YXRlIGF0IGBsb2FkaW5nYCBhbmQgbGV0IGh5ZHJhdGlvbiBib290IGl0LlxuICAgIGlmICh0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgLy8gQW5vdGhlciB0YWIgc2lnbmVkIG91dCBvZiBUSElTIHNlc3Npb24gKGl0cyB0b21ic3RvbmUgcmVhY2hlZCB0aGUgc2hhcmVkXG4gICAgICAvLyBzdG9yZSk6IGRyb3AgdGhlIHRva2VuIGFuZCByZS1jaGVjaywgd2hpY2ggdGhlbiByZWZ1c2VzIHRoZSBzZXNzaW9uLlxuICAgICAgdGhpcy5zdG9wV2F0Y2hpbmdTaWduT3V0ID0gdGhpcy5ndWFyZC53YXRjaChcbiAgICAgICAgKCkgPT4gdGhpcy5jYWNoZS5wZWVrKCk/LnNlc3Npb25JZCA/PyB0aGlzLl9zZXNzaW9uLnZhbHVlPy5pZCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubm90aWZpZXIuZXhwZWN0KCdvdGhlcl90YWInKTtcbiAgICAgICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgdm9pZCB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHZvaWQgdGhpcy5ib290KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wV2F0Y2hpbmdTaWduT3V0Py4oKTtcbiAgICB0aGlzLnN0b3BXYXRjaGluZ1NpZ25PdXQgPSBudWxsO1xuICAgIHRoaXMuZ3VhcmQuZGlzcG9zZSgpO1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLl9zdGF0dXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl91c2VyLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NsYWltcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX21lbWJlcnNoaXBzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2lnbk91dC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLy8gLS0tIENvbmZpZ3VyYXRpb24gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGdldCBhcHBlYXJhbmNlKCk6IEFwcGVhcmFuY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXBwZWFyYW5jZTtcbiAgfVxuXG4gIGdldCBsb2NhbGl6YXRpb24oKTogQ2F0YWxvZyB7XG4gICAgcmV0dXJuIHRoaXMuY2F0YWxvZztcbiAgfVxuXG4gIGdldCBmcm9udGVuZEFwaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VVcmw7XG4gIH1cblxuICAvKiogVGhlIGBBY2NlcHQtTGFuZ3VhZ2VgIHNlbnQgdG8gdGhlIEZyb250ZW5kIEFQSTogdGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSdzIGBsb2NhbGVgIHRhZywgaWYgYW55LiAqL1xuICBnZXQgbG9jYWxlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byBzaG93IGZvciBhIHNlcnZlciBlcnJvciwgaW4gdGhlIGFwcCdzIGxhbmd1YWdlOiB0aGUgY2F0YWxvZydzXG4gICAqIGBlcnJvci48cmVhc29uPmAgKGxvb2tlZCB1cCBpbiB0aGUgYGxvY2FsaXphdGlvbmAgYnVuZGxlLCBvciBgRU5fVVNgIHdoZW5cbiAgICogbm9uZSBpcyBzZXQpLCBlbHNlIHRoZSBzZXJ2ZXIncyBtZXNzYWdlLCBlbHNlIGBlcnJvci5nZW5lcmljYC5cbiAgICovXG4gIGVycm9yVGV4dChlcnJvcjogRXJyb3JMaWtlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsaXplZEVycm9yTWVzc2FnZShlcnJvciwgdGhpcy5lcnJvckNhdGFsb2csIHRoaXMuY2F0YWxvZyk7XG4gIH1cblxuICAvKiogVGhlIGNhdGFsb2cgc2VydmVyIGVycm9ycyBhcmUgbG9va2VkIHVwIGluIChzZWUge0BsaW5rIGVycm9yVGV4dH0pLiAqL1xuICBnZXQgZXJyb3JMb2NhbGl6YXRpb24oKTogQ2F0YWxvZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JDYXRhbG9nO1xuICB9XG5cbiAgLyoqIFRva2VucyBhcyBDU1MgY3VzdG9tIHByb3BlcnRpZXMsIGZvciBhIGhvc3QgZWxlbWVudCB0byBpbmhlcml0LiAqL1xuICBhcHBlYXJhbmNlVmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBjc3NWYXJpYWJsZXMocmVzb2x2ZVRva2Vucyh0aGlzLm9wdGlvbnMuYXBwZWFyYW5jZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIGFwcGVhcmFuY2UgcmVuZGVyIGZvciBhIHJvb3QgZWxlbWVudDogaW5saW5lIHZhcmlhYmxlcywgdGhlXG4gICAqIGBkYXRhLWF0bGFzLSpgIGF0dHJpYnV0ZXMgYW5kIHRoZSBkZXNpZ24gc3R5bGVzaGVldC4gUGFzcyB0aGUgZGFzaGJvYXJkXG4gICAqIGRlc2lnbiAoZnJvbSB7QGxpbmsgbG9hZEluc3RhbmNlRGVzaWdufSkgdG8gbGF5ZXIgY29kZSBvdmVycmlkZXMgb24gaXQg4oCUXG4gICAqIHRoZSBzYW1lIHNlbWFudGljcyBhcyBgQGF0bGFzYXV0aC9yZWFjdGAuXG4gICAqL1xuICBhcHBlYXJhbmNlUmVuZGVyKGluc3RhbmNlRGVzaWduPzogSW5zdGFuY2VEZXNpZ24gfCBudWxsKTogQXBwZWFyYW5jZVJlbmRlciB7XG4gICAgcmV0dXJuIHJlbmRlckFwcGVhcmFuY2UodGhpcy5vcHRpb25zLmFwcGVhcmFuY2UsIGluc3RhbmNlRGVzaWduID8/IG51bGwsIHtcbiAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmJhc2VVcmwsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlc2lnbiBjb25maWd1cmVkIGluIHRoZSBBdGxhcyBkYXNoYm9hcmQgKGBHRVQgL3YxL2FwcGVhcmFuY2VgKSwgb3IgbnVsbFxuICAgKiB3aGVuIHRoZXJlIGlzIG5vbmUsIGl0IGNhbm5vdCBiZSByZWFkLCBvciB0aGUgYXBwIG9wdGVkIG91dCB3aXRoXG4gICAqIGBhcHBlYXJhbmNlLmluc3RhbmNlRGVzaWduOiBmYWxzZWAuXG4gICAqL1xuICBhc3luYyBsb2FkSW5zdGFuY2VEZXNpZ24oKTogUHJvbWlzZTxJbnN0YW5jZURlc2lnbiB8IG51bGw+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwcGVhcmFuY2U/Lmluc3RhbmNlRGVzaWduID09PSBmYWxzZSkgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKCcvdjEvYXBwZWFyYW5jZScpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLm9rID8gaW5zdGFuY2VEZXNpZ25Gcm9tKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgOiBudWxsO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEEgZnJlc2gge0BsaW5rIEZhcGlDbGllbnR9IGZvciBkcml2aW5nIGEgc2lnbi1pbi9zaWduLXVwIGZsb3cuICovXG4gIGNyZWF0ZUZhcGlDbGllbnQoKTogRmFwaUNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBGYXBpQ2xpZW50KHtcbiAgICAgIHB1Ymxpc2hhYmxlS2V5OiB0aGlzLnB1Ymxpc2hhYmxlS2V5LFxuICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgbG9jYWxlOiB0aGlzLnJlcXVlc3RMb2NhbGUsXG4gICAgICBzZGs6IEFUTEFTX0FOR1VMQVJfU0RLLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIEltcGVyYXRpdmUgQVBJIChtaXJyb3JzIHRoZSBSZWFjdCBob29rcycgYWN0aW9ucykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzZXNzaW9uJ3MgSldULCBhbHdheXMgZnJlc2g6IGlmIHRoZSBjYWNoZWQgdG9rZW4gaXMgd2l0aGluIDVzIG9mXG4gICAqIGV4cGlyeSBpdCBpcyByZWZyZXNoZWQgZmlyc3QgcmF0aGVyIHRoYW4gaGFuZGVkIG92ZXIuIE51bGwgd2hlbiBzaWduZWQgb3V0LlxuICAgKi9cbiAgLyoqIFRoZSBzZXNzaW9uIEpXVDsgd2l0aCBgeyB0ZW1wbGF0ZSB9YCBhIHNob3J0LWxpdmVkIG5hbWVkLXRlbXBsYXRlIHRva2VuIChlLmcuIGAnY2hhdGx5J2ApLiAqL1xuICBhc3luYyBnZXRUb2tlbihvcHRpb25zPzogeyB0ZW1wbGF0ZT86IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKG9wdGlvbnM/LnRlbXBsYXRlKSB7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IHRoaXMuX3Nlc3Npb24udmFsdWU/LmlkID8/IG51bGw7XG4gICAgICByZXR1cm4gc2Vzc2lvbklkID8gKChhd2FpdCBnZXRUZW1wbGF0ZVRva2VuKHRoaXMuZmFwaUNsaWVudCwgc2Vzc2lvbklkLCBvcHRpb25zLnRlbXBsYXRlKSk/Lmp3dCA/PyBudWxsKSA6IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVzYWJsZSA9IHRoaXMuY2FjaGUuZ2V0KDVfMDAwKTtcbiAgICBpZiAodXNhYmxlKSByZXR1cm4gdXNhYmxlLmp3dDtcblxuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldCg1XzAwMCk/Lmp3dCA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzaWduZWQtaW4gdXNlcidzIE9XTiBsaXZlIGFjY2VzcyB0b2tlbiBhdCBhIGNvbm5lY3RlZCBwcm92aWRlciAoR29vZ2xlLFxuICAgKiBHaXRIdWIsIOKApiksIHNvIHRoZSBhcHAgY2FuIGNhbGwgdGhhdCBwcm92aWRlcidzIEFQSSBmcm9tIHRoZSBicm93c2VyLiBOdWxsXG4gICAqIHdoZW4gdGhlcmUgaXMgbm8gdXNhYmxlIHRva2VuIOKAlCBubyBsaW5rZWQgYWNjb3VudCwgb3IgdGhlIHByb3ZpZGVyIGdyYW50ZWQgL1xuICAgKiBrZXB0IG5vbmUuIFRoZSBzZXJ2ZXIgcmVmcmVzaGVzIGEgc3RhbGUgdG9rZW4gb24gcmVhZDsgdGhlIHJlZnJlc2ggdG9rZW4gaXNcbiAgICogbmV2ZXIgZXhwb3NlZC5cbiAgICovXG4gIC8qKiBMaXN0ZW4gZm9yIHNpZ24tb3V0IG9uIGV2ZXJ5IHBhdGggKHNlZSB7QGxpbmsgc2lnbk91dCR9KTsgcmV0dXJucyB0aGUgdW5zdWJzY3JpYmUuICovXG4gIG9uU2lnbk91dChsaXN0ZW5lcjogU2lnbk91dExpc3RlbmVyKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpZXIuc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyVG9rZW4ocHJvdmlkZXI6IHN0cmluZyk6IFByb21pc2U8UHJvdmlkZXJUb2tlbiB8IG51bGw+IHtcbiAgICByZXR1cm4gZmV0Y2hQcm92aWRlclRva2VuKHRoaXMuZmFwaUNsaWVudCwgcHJvdmlkZXIpO1xuICB9XG5cbiAgLyoqIEltcGVyYXRpdmUgYGhhcygpYCDigJQgdGhlIHNhbWUgZXZhbHVhdGlvbiBgKmF0bGFzUHJvdGVjdGAgcmVuZGVycyBvbi4gKi9cbiAgaGFzKGNvbmRpdGlvbjogUHJvdGVjdENvbmRpdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmFsdWF0ZSh0aGlzLl9jbGFpbXMudmFsdWUsIGNvbmRpdGlvbikuYWxsb3dlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgdGhlIGN1cnJlbnQgc2Vzc2lvbiBzZXJ2ZXItc2lkZSBhbmQgZHJvcCBhbGwgbG9jYWwgYXV0aCBzdGF0ZS5cbiAgICpcbiAgICogVGhlIHNlc3Npb24gaWQgaXMgcmVtZW1iZXJlZCBiZWZvcmUgdGhlIHJldm9rZSAoYSB0b21ic3RvbmUgc2hhcmVkIGJ5IGV2ZXJ5XG4gICAqIHRhYiksIHNvIGEgcmVsb2FkLCBhIHRva2VuIHJlZnJlc2gsIGEgc2libGluZyB0YWIgb3IgYSB0YWIgb3BlbmVkIGxhdGVyIG5ldmVyXG4gICAqIHJlLWFkb3B0cyBpdCDigJQgZXZlbiB3aGVuIHRoZSByZXZva2UgZmFpbGVkIChpdCBpcyByZXRyaWVkIG9uY2UsIHRoZW4gYWdhaW4gaW5cbiAgICogdGhlIGJhY2tncm91bmQpIGFuZCB0aGUgcmVmcmVzaCBjb29raWUgaXMgc3RpbGwgdmFsaWQuIFJlc29sdmVzXG4gICAqIGB7IHJldm9rZWQsIGFjdGl2ZVNlc3Npb25JZD8gfWA7IHdpdGggYHsgc3RyaWN0OiB0cnVlIH1gIGFuIHVuY29uZmlybWVkIHJldm9rZVxuICAgKiByZWplY3RzIHdpdGggYSBgU2lnbk91dEVycm9yYCBpbnN0ZWFkIChhZnRlciB0aGUgbG9jYWwgc2lnbi1vdXQpLiBBIHBhcmtlZFxuICAgKiBzZXNzaW9uIHRoZSBzZXJ2ZXIgcHJvbW90ZWQgb24gcmV2b2tlIGlzIGFkb3B0ZWQuIEZyb250LWNoYW5uZWwgbG9nb3V0IHJ1bnNcbiAgICogdW5sZXNzIGB7IGZyb250Y2hhbm5lbDogZmFsc2UgfWAuXG4gICAqL1xuICBhc3luYyBzaWduT3V0KG9wdGlvbnM6IFNpZ25PdXRPcHRpb25zID0ge30pOiBQcm9taXNlPFNpZ25PdXRSZXN1bHQ+IHtcbiAgICAvLyBXaXRoIG5vIGNhY2hlZCB0b2tlbiB0aGUgZ3VhcmQgZmluZHMgdGhlIGNvb2tpZSBzZXNzaW9uIGl0c2VsZlxuICAgIC8vIChHRVQgL3YxL2NsaWVudCksIHNvIGEgbWlzc2luZyBKV1QgbmV2ZXIgc2tpcHMgdGhlIHJldm9rZS5cbiAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IHRoaXMuX3Nlc3Npb24udmFsdWU/LmlkID8/IG51bGw7XG4gICAgdGhpcy5ub3RpZmllci5leHBlY3QoJ3VzZXInKTtcbiAgICBjb25zdCBhdHRlbXB0ID0gYXdhaXQgdGhpcy5ndWFyZC5yZXZva2Uoc2Vzc2lvbklkLCBvcHRpb25zKTtcbiAgICB0aGlzLmNsZWFyTG9jYWxTdGF0ZSgndXNlcicpO1xuICAgIGlmICh0aGlzLmd1YXJkLnByb21vdGVkKGF0dGVtcHQpKSBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmd1YXJkLnNldHRsZShhdHRlbXB0LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2ggdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gKG9yIGBudWxsYCBmb3IgdGhlIHBlcnNvbmFsIGFjY291bnQpLiBUaGVcbiAgICogbmV3IHRva2VuIGNhcnJpZXMgdGhlIG5ldyBvcmcgY2xhaW1zLCBzbyB0aGUgYXBwJ3MgcGVybWlzc2lvbiBjaGVja3MgdXBkYXRlXG4gICAqIHdpdGhvdXQgYSByZS1sb2dpbi5cbiAgICovXG4gIGFzeW5jIHNldEFjdGl2ZU9yZ2FuaXphdGlvbihvcmdhbml6YXRpb25JZDogc3RyaW5nIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKGAvdjEvY2xpZW50L3Nlc3Npb25zLyR7Y3VycmVudC5zZXNzaW9uSWR9L3RvdWNoYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGl2ZV9vcmdhbml6YXRpb25faWQ6IG9yZ2FuaXphdGlvbklkIH0pLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHJldHVybjtcblxuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGp3dDogc3RyaW5nIH07XG4gICAgdGhpcy5hcHBseVRva2VuKGJvZHkuand0LCBjdXJyZW50LnNlc3Npb25JZCk7XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIC8qKiBSZS1yZWFkIGAvdjEvY2xpZW50YDogcmVmcmVzaCB1c2VyLCBzZXNzaW9uLCBtZW1iZXJzaGlwcyBhbmQgc3RhdHVzLiAqL1xuICAvKiogUmUtYm9vdCBmcm9tIHRoZSBGcm9udGVuZCBBUEkuIFJlc29sdmVzIHRydWUgd2hlbiBhIHNlc3Npb24gbm93IGV4aXN0cyBpbiB0aGlzIGJyb3dzZXIuICovXG4gIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoJy92MS9jbGllbnQnKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcignYm9vdCBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgc2Vzc2lvbjogQXRsYXNTZXNzaW9uIHwgbnVsbDtcbiAgICAgICAgdXNlcjogQXRsYXNVc2VyIHwgbnVsbDtcbiAgICAgICAgand0Pzogc3RyaW5nO1xuICAgICAgICBvcmdhbml6YXRpb25fbWVtYmVyc2hpcHM/OiBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEEgc2Vzc2lvbiB0aGlzIGJyb3dzZXIgc2lnbmVkIG91dCBvZiBpcyBuZXZlciByZS1hZG9wdGVkIGZyb20gdGhlXG4gICAgICAvLyByZWZyZXNoIGNvb2tpZTsgdGhlIGd1YXJkIHJlLXRyaWVzIGl0cyByZXZva2UgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgICBpZiAoIWJvZHkuc2Vzc2lvbiB8fCAhYm9keS51c2VyIHx8IHRoaXMuZ3VhcmQucmVmdXNlKGJvZHkuc2Vzc2lvbi5pZCkpIHtcbiAgICAgICAgdGhpcy5jbGVhckxvY2FsU3RhdGUoYm9keS5zZXNzaW9uID8gJ290aGVyX3RhYicgOiBzaWduT3V0UmVhc29uRnJvbUNsaWVudChib2R5KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90aWZpZXIuY2xlYXIoKTtcblxuICAgICAgdGhpcy5fdXNlci5uZXh0KGJvZHkudXNlcik7XG4gICAgICB0aGlzLl9zZXNzaW9uLm5leHQoYm9keS5zZXNzaW9uKTtcbiAgICAgIHRoaXMuX21lbWJlcnNoaXBzLm5leHQoYm9keS5vcmdhbml6YXRpb25fbWVtYmVyc2hpcHMgPz8gW10pO1xuICAgICAgaWYgKGJvZHkuand0KSB0aGlzLmFwcGx5VG9rZW4oYm9keS5qd3QsIGJvZHkuc2Vzc2lvbi5pZCk7XG4gICAgICB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX2luJyk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVmcmVzaCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBBIGZhaWxlZCBib290IGlzIE5PVCBzaWduZWQtb3V0LiBSZW5kZXJpbmcgYSBzaWduLWluIGZvcm0gYmVjYXVzZSB0aGVcbiAgICAgIC8vIG5ldHdvcmsgaGljY3VwZWQgdGhyb3dzIGF3YXkgYSBwZXJmZWN0bHkgZ29vZCBzZXNzaW9uIGFuZCBmb3JjZXMgYVxuICAgICAgLy8gbmVlZGxlc3MgcmUtYXV0aGVudGljYXRpb24uIE9ubHkgcHJvbW90ZSBsb2FkaW5nIOKGkiBzaWduZWRfb3V0LlxuICAgICAgaWYgKHRoaXMuX3N0YXR1cy52YWx1ZSA9PT0gJ2xvYWRpbmcnKSB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX291dCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBJbnRlcm5hbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogwqc2LjMgc3RlcCAzOiBjb21wbGV0ZSBhIHJlZGlyZWN0LWJhc2VkIHNpZ24taW4sIHRoZW4gYm9vdC4gQW4gT0F1dGggb3JcbiAgICogaG9zdGVkLXBhZ2UgZmxvdyBsYW5kcyBiYWNrIHdpdGggYSBvbmUtdGltZSB0aWNrZXQgaW4gdGhlIFVSTDsgZXhjaGFuZ2UgaXRcbiAgICogZm9yIGNvb2tpZXMsIHNjcnViIHRoZSBVUkwgc28gYSByZWxvYWQgY2Fubm90IHJlcGxheSBpdCwgVEhFTiByZWFkIHRoZVxuICAgKiBzZXNzaW9uLiBBIHJlZGlyZWN0IGNhcnJ5aW5nIG9ubHkgYSBzdGF0dXMgKGEgc2Vjb25kIGZhY3RvciBpcyBzdGlsbCBvd2VkKVxuICAgKiBoYXMgbm8gdGlja2V0LCBzbyBub3RoaW5nIGlzIGV4Y2hhbmdlZCBhbmQgdGhlIGFwcCBib290cyBzaWduZWQtb3V0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBib290KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZyb21VcmwgPSByZWFkUmVkaXJlY3RSZXN1bHQod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgbGV0IHJlc3VsdDogUmVkaXJlY3RSZXN1bHQgfCBudWxsID0gZnJvbVVybDtcblxuICAgIC8vIMKnb2F1dGggcG9wdXAgbW9kZTogdGhpcyBwYWdlIG1heSBiZSB0aGUgbGFuZGluZyBvZiBhIHNpZ24taW4gcG9wdXAgd2hvc2VcbiAgICAvLyBvcGVuZXIgYSBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSBzZXZlcmVkIChgI2F0bGFzX3BvcHVwX3Jlc3VsdD3igKZgKS5cbiAgICAvLyBUaGUgcmVzdWx0IGlzIHJlbGF5ZWQgdG8gdGhlIG9wZW5lciwgd2hpY2ggcmVkZWVtcyB0aGUgdGlja2V0LCBhbmQgdGhpc1xuICAgIC8vIHdpbmRvdyBjbG9zZXMuIElmIG5vIG9wZW5lciB0YWtlcyBpdCAoaXRzIHRhYiBpcyBnb25lKSwgZmluaXNoIGhlcmUgbGlrZVxuICAgIC8vIGEgcmVkaXJlY3QuXG4gICAgY29uc3QgbGFuZGluZyA9IGF3YWl0IGNvbXBsZXRlT0F1dGhQb3B1cExhbmRpbmcoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICBpZiAobGFuZGluZyAmJiAhbGFuZGluZy5kZWxpdmVyZWQpIHtcbiAgICAgIGNvbnN0IG91dGNvbWUgPSBtYXBPQXV0aFBvcHVwUGF5bG9hZChsYW5kaW5nLnBheWxvYWQpO1xuICAgICAgaWYgKG91dGNvbWU/LnRpY2tldCAmJiBvdXRjb21lLmF0dGVtcHRJZCkge1xuICAgICAgICByZXN1bHQgPSB7IGF0dGVtcHRJZDogb3V0Y29tZS5hdHRlbXB0SWQsIHRpY2tldDogb3V0Y29tZS50aWNrZXQgfTtcbiAgICAgIH0gZWxzZSBpZiAob3V0Y29tZT8uY29udGludWF0aW9uVXJsKSB7XG4gICAgICAgIC8vIEEgc2Vjb25kIGZhY3RvciAvIGNvbm5lY3Qgc3RlcCAvIHByb3ZpZGVyIGVycm9yOiB0aGUgcmVkaXJlY3QgZmxvdydzIHBhZ2UuXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKG91dGNvbWUuY29udGludWF0aW9uVXJsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleGNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0Py50aWNrZXQpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGF0dGVtcHRfaWQ6IHJlc3VsdC5hdHRlbXB0SWQsIHRpY2tldDogcmVzdWx0LnRpY2tldCB9KSxcbiAgICAgIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICBleGNoYW5nZWQgPSAhIXJlc3BvbnNlPy5vaztcbiAgICB9XG4gICAgaWYgKGZyb21VcmwpIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIHN0cmlwUmVkaXJlY3RQYXJhbXMod2luZG93LmxvY2F0aW9uLmhyZWYpKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgICAvLyBTaWduZWQgaW4gaW5zaWRlIHRoZSBBdGxhcyBwb3B1cCAodGhlIHJlZGlyZWN0IGZsb3cgcmFuIGluIGl0KTogaGFuZCBiYWNrXG4gICAgLy8gdG8gdGhlIHdhaXRpbmcgb3BlbmVyIGFuZCBjbG9zZS4gQSBuby1vcCBpbiBhbiBvcmRpbmFyeSB0YWIuXG4gICAgaWYgKGV4Y2hhbmdlZCkgdm9pZCBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkUGVuZGluZ0F0dGVtcHQoKTogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVhZFJlZGlyZWN0UmVzdWx0KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIHJldHVybiByZXN1bHQ/LnN0YXR1cyAmJiAhcmVzdWx0LnRpY2tldFxuICAgICAgPyB7IGlkOiByZXN1bHQuYXR0ZW1wdElkLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxsKHBhdGg6IHN0cmluZywgaW5pdD86IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kb0ZldGNoKGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YCwge1xuICAgICAgLi4uaW5pdCxcbiAgICAgIC8vIENvb2tpZXMgY2FycnkgdGhlIHNlc3Npb247IGEgcmVxdWVzdCB3aXRob3V0IHRoaXMgaXMgaW5kaXN0aW5ndWlzaGFibGVcbiAgICAgIC8vIGZyb20gYmVpbmcgc2lnbmVkIG91dC5cbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICd4LXB1Ymxpc2hhYmxlLWtleSc6IHRoaXMucHVibGlzaGFibGVLZXksXG4gICAgICAgIC8vIE5hbWVzIHRoaXMgU0RLIHNvIHRoZSBGcm9udGVuZCBBUEkgY2FuIGZsYWcgYSB2ZXJzaW9uIHdpdGggYSBrbm93biBidWcuXG4gICAgICAgIFtTREtfSEVBREVSXTogc2RrSGVhZGVyVmFsdWUoQVRMQVNfQU5HVUxBUl9TREspLFxuICAgICAgICAuLi4oaW5pdD8uYm9keSA/IHsgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9IDoge30pLFxuICAgICAgICAuLi5pbml0Py5oZWFkZXJzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXBvcnRTZGtBZHZpc29yeShyZXNwb25zZSwgQVRMQVNfQU5HVUxBUl9TREspO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUb2tlbihqd3Q6IHN0cmluZywgc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBBbiBpbi1mbGlnaHQgcmVmcmVzaCBtdXN0IG5vdCByZXN1cnJlY3QgYSBzZXNzaW9uIHNpZ25lZCBvdXQgbWVhbndoaWxlLlxuICAgIGlmICh0aGlzLmd1YXJkLmlzU2lnbmVkT3V0KHNlc3Npb25JZCkpIHJldHVybjtcbiAgICBjb25zdCBleHBpcmVzQXQgPSByZWFkRXhwaXJ5KGp3dCk7XG4gICAgaWYgKCFleHBpcmVzQXQpIHJldHVybjtcblxuICAgIHRoaXMuY2FjaGUuc2V0KHsgand0LCBleHBpcmVzQXQsIHNlc3Npb25JZCB9KTtcbiAgICB0aGlzLl9jbGFpbXMubmV4dChkZWNvZGVDbGFpbXMoand0KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY2FjaGUucGVlaygpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKGAvdjEvY2xpZW50L3Nlc3Npb25zLyR7Y3VycmVudC5zZXNzaW9uSWR9L3Rva2Vuc2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcigncmVmcmVzaCBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgand0OiBzdHJpbmc7IHNlc3Npb25faWQ6IHN0cmluZyB9O1xuICAgICAgdGhpcy5hcHBseVRva2VuKGJvZHkuand0LCBib2R5LnNlc3Npb25faWQpO1xuICAgICAgdGhpcy5zY2hlZHVsZVJlZnJlc2goKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRoZSBzZXNzaW9uIG1heSBnZW51aW5lbHkgYmUgZ29uZS4gUmUtYm9vdCByYXRoZXIgdGhhbiBndWVzcy5cbiAgICAgIGF3YWl0IHRoaXMucmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckxvY2FsU3RhdGUocmVhc29uPzogU2lnbk91dFJlYXNvbik6IHZvaWQge1xuICAgIC8vIEEgc2lnbmVkLWluIOKGkiBzaWduZWQtb3V0IHRyYW5zaXRpb24gdGVsbHMgdGhlIHNpZ24tb3V0IGxpc3RlbmVycyB3aHkuXG4gICAgY29uc3QgZW5kZWQgPVxuICAgICAgdGhpcy5fc3RhdHVzLnZhbHVlID09PSAnc2lnbmVkX2luJ1xuICAgICAgICA/ICh0aGlzLl9zZXNzaW9uLnZhbHVlPy5pZCA/PyB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IG51bGwpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5fc3RhdHVzLm5leHQoJ3NpZ25lZF9vdXQnKTtcbiAgICB0aGlzLl91c2VyLm5leHQobnVsbCk7XG4gICAgdGhpcy5fc2Vzc2lvbi5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2NsYWltcy5uZXh0KG51bGwpO1xuICAgIHRoaXMuX21lbWJlcnNoaXBzLm5leHQoW10pO1xuICAgIGlmIChlbmRlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLm5vdGlmaWVyLnNpZ25lZE91dChlbmRlZCwgcmVhc29uKTtcbiAgICBlbHNlIHRoaXMubm90aWZpZXIuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiDCpzcuNDogcHJvYWN0aXZlLCBqaXR0ZXJlZCByZWZyZXNoIHNjaGVkdWxlZCBmcm9tIHRoZSB0b2tlbidzIG93biBleHBpcnkuICovXG4gIHByaXZhdGUgc2NoZWR1bGVSZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICBpZiAodGhpcy5fc3RhdHVzLnZhbHVlICE9PSAnc2lnbmVkX2luJykgcmV0dXJuO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG5cbiAgICBjb25zdCBkZWxheSA9IG1zVW50aWxSZWZyZXNoKHsgdG9rZW4sIG5vdzogRGF0ZS5ub3coKSB9KTtcbiAgICB0aGlzLnJlZnJlc2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnJlZnJlc2goKSwgZGVsYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLnJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKiBEZWNvZGUgYSBKV1QgcGF5bG9hZCB3aXRob3V0IHZlcmlmeWluZyBpdCDigJQgYSBzY2hlZHVsaW5nL1VJIGhpbnQgb25seS4gKi9cbmZ1bmN0aW9uIGRlY29kZUNsYWltcyhqd3Q6IHN0cmluZyk6IFNlc3Npb25DbGFpbXMgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBhdG9iKHBhcnRzWzFdIS5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpKSxcbiAgICApIGFzIFNlc3Npb25DbGFpbXM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
|
|
530
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRsYXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXRsYXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hGLE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFFckIsVUFBVSxFQUNWLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsZ0JBQWdCLElBQUksa0JBQWtCLEVBQ3RDLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBT25CLFVBQVUsRUFDVixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsdUJBQXVCLEVBSXZCLHdCQUF3QixFQUN4QixjQUFjLEVBQ2QsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEdB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bkIsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzt3R0FsaUJVLFlBQVk7NEdBQVosWUFBWSxjQURDLE1BQU07OzRGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUFzaUJsQyw2RUFBNkU7QUFDN0UsU0FBUyxZQUFZLENBQUMsR0FBVztJQUMvQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ3JDLENBQUM7SUFDckIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIFBMQVRGT1JNX0lELFxuICBTaWduYWwsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdGxhc09yZ2FuaXphdGlvbkF1ZGl0TG9nIH0gZnJvbSAnLi9jb21wb25lbnRzL29yZ2FuaXphdGlvbi1hdWRpdC1sb2cnO1xuaW1wb3J0IHtcbiAgRmFwaUNsaWVudCxcbiAgU2lnbk91dEd1YXJkLFxuICBjYXRhbG9nTG9jYWxlLFxuICBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UsXG4gIHR5cGUgRXJyb3JMaWtlLFxuICBUb2tlbkNhY2hlLFxuICBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbixcbiAgY29tcGxldGVPQXV0aFBvcHVwTGFuZGluZyxcbiAgZ2V0UHJvdmlkZXJUb2tlbiBhcyBmZXRjaFByb3ZpZGVyVG9rZW4sXG4gIG1hcE9BdXRoUG9wdXBQYXlsb2FkLFxuICBtc1VudGlsUmVmcmVzaCxcbiAgcmVhZEV4cGlyeSxcbiAgcmVhZFJlZGlyZWN0UmVzdWx0LFxuICByZXNvbHZlRnJvbnRlbmRBcGksXG4gIHN0cmlwUmVkaXJlY3RQYXJhbXMsXG4gIHR5cGUgT3JnYW5pemF0aW9uQXVkaXRMb2dPcHRpb25zLFxuICB0eXBlIFByb3ZpZGVyVG9rZW4sXG4gIHR5cGUgUmVkaXJlY3RSZXN1bHQsXG4gIHR5cGUgU2lnbk91dE9wdGlvbnMsXG4gIHR5cGUgU2lnbk91dFJlc3VsdCxcbiAgdHlwZSBFbmRJbXBlcnNvbmF0aW9uUmVzdWx0LFxuICBTREtfSEVBREVSLFxuICBTaWduT3V0Tm90aWZpZXIsXG4gIGdldFRlbXBsYXRlVG9rZW4sXG4gIHJlcG9ydFNka0Fkdmlzb3J5LFxuICBzZGtIZWFkZXJWYWx1ZSxcbiAgc2lnbk91dFJlYXNvbkZyb21DbGllbnQsXG4gIHR5cGUgU2lnbk91dEV2ZW50LFxuICB0eXBlIFNpZ25PdXRMaXN0ZW5lcixcbiAgdHlwZSBTaWduT3V0UmVhc29uLFxuICBjb25maWd1cmVSZWZlcnJhbENhcHR1cmUsXG4gIHdpdGhEZXZCcm93c2VyLFxuICByZWF1dGhlbnRpY2F0ZSxcbn0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZSwgdHlwZSBQcm90ZWN0Q29uZGl0aW9uIH0gZnJvbSAnQGF0bGFzYXV0aC9hdXRoeic7XG5pbXBvcnQgeyBBVExBU19PUFRJT05TIH0gZnJvbSAnLi9hdGxhcy5jb25maWcnO1xuaW1wb3J0IHtcbiAgY3NzVmFyaWFibGVzLFxuICBpbnN0YW5jZURlc2lnbkZyb20sXG4gIHJlbmRlckFwcGVhcmFuY2UsXG4gIHJlc29sdmVUb2tlbnMsXG4gIHR5cGUgQXBwZWFyYW5jZSxcbiAgdHlwZSBBcHBlYXJhbmNlUmVuZGVyLFxuICB0eXBlIEluc3RhbmNlRGVzaWduLFxufSBmcm9tICcuL2FwcGVhcmFuY2UnO1xuaW1wb3J0IHsgRU5fVVMsIHdpdGhGYWxsYmFjaywgdHlwZSBDYXRhbG9nIH0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB0eXBlIHtcbiAgQXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwLFxuICBBdGxhc1Nlc3Npb24sXG4gIEF0bGFzVXNlcixcbiAgQXV0aFN0YXR1cyxcbiAgU2Vzc2lvbkNsYWltcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBVExBU19BTkdVTEFSX1NESyB9IGZyb20gJy4vdmVyc2lvbic7XG5cbi8qKlxuICogYEF0bGFzU2VydmljZWAg4oCUIHRoZSBBbmd1bGFyIHBlZXIgb2YgUmVhY3QncyBgPEF0bGFzUHJvdmlkZXI+YCArIGhvb2tzLlxuICpcbiAqIEl0IGhvbGRzIGV4YWN0bHkgb25lIHRoaW5nIHRoYXQgbWF0dGVycyBpbiBtZW1vcnk6IHRoZSBzaG9ydC1saXZlZCBKV1QsIGluIGFcbiAqIHtAbGluayBUb2tlbkNhY2hlfS4gTm90IGxvY2FsU3RvcmFnZSwgbm90IGEgY29va2llIHRoaXMgY29kZSB3cml0ZXMg4oCUIHRoZVxuICogcmVmcmVzaCB0b2tlbiBpcyBIdHRwT25seSBzbyBicm93c2VyIHNjcmlwdCBuZXZlciB0b3VjaGVzIGl0LCBhbmQgdGhlIEpXVFxuICogbGl2ZXMgb25seSBhcyBsb25nIGFzIHRoZSB0YWIuIEFueXRoaW5nIHBlcnNpc3RlZCB3b3VsZCBzdXJ2aXZlIHRoZSB0YWIgYW5kXG4gKiBiZWNvbWUgdGhlIGZpcnN0IHRoaW5nIGFuIFhTUyByZWFkcy5cbiAqXG4gKiBSZWFjdGl2ZSBhdXRoIHN0YXRlIGlzIGV4cG9zZWQgdHdvIHdheXMgc28gY2FsbGVycyBjYW4gcGljayB0aGVpciBpZGlvbTpcbiAqICAtIFJ4SlMgb2JzZXJ2YWJsZXMgKGB1c2VyJGAsIGBzZXNzaW9uJGAsIGBpc1NpZ25lZEluJGAsIOKApikg4oCUIHRoZSBwcmltYXJ5IEFQSSxcbiAqICAgIHRoZSBhbmFsb2d1ZSBvZiB0aGUgUmVhY3QgaG9va3MnIHJldHVybiB2YWx1ZXMuXG4gKiAgLSBBbmd1bGFyIHNpZ25hbHMgKGB1c2VyYCwgYHNlc3Npb25gLCBgaXNTaWduZWRJbmAsIOKApikg4oCUIHRoZSBzYW1lIHZhbHVlcyBhc1xuICogICAgYFNpZ25hbDxUPmAsIGZvciB0ZW1wbGF0ZXMgYW5kIGBjb21wdXRlZCgpYC5cbiAqXG4gKiBUaGUgaW1wZXJhdGl2ZSBtZXRob2RzIChgc2lnbk91dGAsIGBnZXRUb2tlbmAsIGBnZXRQcm92aWRlclRva2VuYCxcbiAqIGBzZXRBY3RpdmVPcmdhbml6YXRpb25gLCBgcmVsb2FkYCkgbWlycm9yIHRoZSBhY3Rpb25zIHRoZSBob29rcyByZXR1cm4uXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXRsYXNTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zID0gaW5qZWN0KEFUTEFTX09QVElPTlMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHVibGlzaGFibGVLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBkb0ZldGNoOiB0eXBlb2YgZmV0Y2g7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZSA9IG5ldyBUb2tlbkNhY2hlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFwaUNsaWVudDogRmFwaUNsaWVudDtcbiAgcHJpdmF0ZSByZWZyZXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXNzaW9ucyB0aGlzIGJyb3dzZXIgc2lnbmVkIG91dCBvZiAodG9tYnN0b25lcyBpbiBsb2NhbFN0b3JhZ2UsIHBlclxuICAgKiBGcm9udGVuZCBBUEkgb3JpZ2luKSwgdGhlIHJldm9rZSBhbmQgaXRzIGJhY2tncm91bmQgcmUtdHJpZXMuIEV2ZXJ5IHJlbG9hZCAvXG4gICAqIHJlZnJlc2ggYXNrcyBpdCBiZWZvcmUgYWRvcHRpbmcgYSBzZXNzaW9uLCBzbyBhIHNpZ24tb3V0IHRoZSBzZXJ2ZXIgbmV2ZXJcbiAgICogY29uZmlybWVkIGlzIG5vdCB1bmRvbmUgYnkgdGhlIHN0aWxsLXZhbGlkIHJlZnJlc2ggY29va2llLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBndWFyZDogU2lnbk91dEd1YXJkO1xuICBwcml2YXRlIHN0b3BXYXRjaGluZ1NpZ25PdXQ6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZzogQ2F0YWxvZztcbiAgLyoqIFRoZSBsYW5ndWFnZSBsYXllciBvZiBgY2F0YWxvZ2AgKHRoZSBgbG9jYWxpemF0aW9uYCBidW5kbGUgYWxvbmU7IGBFTl9VU2Agd2hlbiBub25lKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvckNhdGFsb2c6IENhdGFsb2c7XG4gIC8qKiBTZW50IHRvIHRoZSBGcm9udGVuZCBBUEkgYXMgYEFjY2VwdC1MYW5ndWFnZWA6IHRoZSBgbG9jYWxpemF0aW9uYCBidW5kbGUncyBgbG9jYWxlYCB0YWcuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdExvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIHNpZ24taW4gYXR0ZW1wdCBoYW5kZWQgYmFjayBieSBhbiBPQXV0aCByZWRpcmVjdCB0aGF0IHN0aWxsIG5lZWRzIGEgc2Vjb25kXG4gICAqIGZhY3RvciAobm8gc2Vzc2lvbiB3YXMgaXNzdWVkKS4gTnVsbCBpbiB0aGUgb3JkaW5hcnkgY2FzZTsgdGhlIGA8YXRsYXMtc2lnbi1pbj5gXG4gICAqIGZsb3cgc2VlZHMgaXRzZWxmIGZyb20gdGhpcyBzbyB0aGUgdXNlciByZXN1bWVzIGF0IHRoZSAyRkEgc3RlcC4gQ2FwdHVyZWRcbiAgICogb25jZSwgc3luY2hyb25vdXNseSwgYXQgY29uc3RydWN0aW9uIOKAlCBiZWZvcmUgYW55IGZsb3cgY29tcG9uZW50IHJlYWRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGVuZGluZ0F0dGVtcHQ6IHsgaWQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHBvbGljeVRva2VuPzogc3RyaW5nIH0gfCBudWxsO1xuXG4gIC8vIC0tLSBSZWFjdGl2ZSBzdGF0ZSAoc291cmNlIG9mIHRydXRoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0dXM+KCdsb2FkaW5nJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VzZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0bGFzVXNlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdGxhc1Nlc3Npb24gfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xhaW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uQ2xhaW1zIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbWJlcnNoaXBzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXT4oW10pO1xuICAvLyBBVEwtUy0zMCBzaWduLW91dCBldmVudHMsIG9uIGV2ZXJ5IHBhdGguXG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWZpZXIgPSBuZXcgU2lnbk91dE5vdGlmaWVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NpZ25PdXQgPSBuZXcgU3ViamVjdDxTaWduT3V0RXZlbnQ+KCk7XG4gIC8qKlxuICAgKiBFbWl0cyBvbmNlIGVhY2ggdGltZSBhIHNpZ25lZC1pbiB1c2VyIGJlY29tZXMgc2lnbmVkIG91dDogYHJlYXNvbmAgaXNcbiAgICogYHVzZXJgLCBgb3RoZXJfdGFiYCwgYHNlc3Npb25fZXhwaXJlZGAsIGByZXZva2VkYCAoZW5kZWQgZWxzZXdoZXJlLCBzZWVuIG9uXG4gICAqIHRoZSBuZXh0IHRva2VuIHJlZnJlc2gpIG9yIGB1bmtub3duYC4gVGhlIHBsYWNlIHRvIHJlc2V0IGFuIGVtYmVkZGVkXG4gICAqIHRoaXJkIHBhcnR5IChhIGNoYXQgd2lkZ2V0KS4gQWxzbyBkaXNwYXRjaGVkIGFzIGBhdGxhczpzaWdub3V0YCBvbiBgd2luZG93YC5cbiAgICovXG4gIHJlYWRvbmx5IHNpZ25PdXQkOiBPYnNlcnZhYmxlPFNpZ25PdXRFdmVudD4gPSB0aGlzLl9zaWduT3V0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBUaGUgdGhyZWUtc3RhdGUgYXV0aCBsaWZlY3ljbGU6IGBsb2FkaW5nYCDihpIgYHNpZ25lZF9pbmAgfCBgc2lnbmVkX291dGAuICovXG4gIHJlYWRvbmx5IHN0YXR1cyQ6IE9ic2VydmFibGU8QXV0aFN0YXR1cz4gPSB0aGlzLl9zdGF0dXMuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IHVzZXIkOiBPYnNlcnZhYmxlPEF0bGFzVXNlciB8IG51bGw+ID0gdGhpcy5fdXNlci5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgc2Vzc2lvbiQ6IE9ic2VydmFibGU8QXRsYXNTZXNzaW9uIHwgbnVsbD4gPSB0aGlzLl9zZXNzaW9uLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjbGFpbXMkOiBPYnNlcnZhYmxlPFNlc3Npb25DbGFpbXMgfCBudWxsPiA9IHRoaXMuX2NsYWltcy5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcHMkOiBPYnNlcnZhYmxlPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdPiA9XG4gICAgdGhpcy5fbWVtYmVyc2hpcHMuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqXG4gICAqIFRydWUgb25jZSB0aGUgU0RLIGhhcyBmaW5pc2hlZCBpdHMgZmlyc3QgYm9vdC4gRGlzdGluZ3Vpc2hpbmcgXCJzdGlsbCBsb2FkaW5nXCJcbiAgICogZnJvbSBcInNpZ25lZCBvdXRcIiBpcyB3aGF0IGxldHMgYSB0ZW1wbGF0ZSBhdm9pZCB0aGUgZmxhc2ggb2YgYSBzaWduLWluIGZvcm1cbiAgICogb24gZXZlcnkgcGFnZSBsb2FkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2FkZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdGF0dXMkLnBpcGUoXG4gICAgbWFwKChzKSA9PiBzICE9PSAnbG9hZGluZycpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNTaWduZWRJbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN0YXR1cyQucGlwZShcbiAgICBtYXAoKHMpID0+IHMgPT09ICdzaWduZWRfaW4nKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICApO1xuXG4gIC8qKiBUaGUgYWN0aXZlIG9yZ2FuaXphdGlvbiBtZW1iZXJzaGlwLCBkZXJpdmVkIGZyb20gdGhlIHRva2VuJ3MgYG9yZ19pZGAgY2xhaW0uICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbiQ6IE9ic2VydmFibGU8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwIHwgbnVsbD4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9tZW1iZXJzaGlwcyxcbiAgICB0aGlzLl9jbGFpbXMsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFttZW1iZXJzaGlwcywgY2xhaW1zXSkgPT5cbiAgICAgICAgbWVtYmVyc2hpcHMuZmluZCgobSkgPT4gbS5vcmdhbml6YXRpb24uaWQgPT09IGNsYWltcz8ub3JnX2lkKSA/PyBudWxsLFxuICAgICksXG4gICk7XG5cbiAgLy8gLS0tIFNpZ25hbCBtaXJyb3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHJlYWRvbmx5IHN0YXR1czogU2lnbmFsPEF1dGhTdGF0dXM+ID0gdG9TaWduYWwodGhpcy5zdGF0dXMkLCB7IGluaXRpYWxWYWx1ZTogJ2xvYWRpbmcnIH0pO1xuICByZWFkb25seSB1c2VyOiBTaWduYWw8QXRsYXNVc2VyIHwgbnVsbD4gPSB0b1NpZ25hbCh0aGlzLnVzZXIkLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgcmVhZG9ubHkgc2Vzc2lvbjogU2lnbmFsPEF0bGFzU2Vzc2lvbiB8IG51bGw+ID0gdG9TaWduYWwodGhpcy5zZXNzaW9uJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIHJlYWRvbmx5IGNsYWltczogU2lnbmFsPFNlc3Npb25DbGFpbXMgfCBudWxsPiA9IHRvU2lnbmFsKHRoaXMuY2xhaW1zJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBzOiBTaWduYWw8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwW10+ID0gdG9TaWduYWwodGhpcy5tZW1iZXJzaGlwcyQsIHtcbiAgICBpbml0aWFsVmFsdWU6IFtdIGFzIEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdLFxuICB9KTtcbiAgcmVhZG9ubHkgaXNMb2FkZWQ6IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdHVzKCkgIT09ICdsb2FkaW5nJyk7XG4gIHJlYWRvbmx5IGlzU2lnbmVkSW46IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdHVzKCkgPT09ICdzaWduZWRfaW4nKTtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBTaWduYWw8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwIHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmNsYWltcygpPy5vcmdfaWQ7XG4gICAgcmV0dXJuIHRoaXMubWVtYmVyc2hpcHMoKS5maW5kKChtKSA9PiBtLm9yZ2FuaXphdGlvbi5pZCA9PT0gb3JnSWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdGhpcy5wdWJsaXNoYWJsZUtleSA9IG9wdGlvbnMucHVibGlzaGFibGVLZXk7XG4gICAgLy8gVGhyb3dzIGFuIGBBdGxhc0NvbmZpZ0Vycm9yYCBvbiBhIG1pc3NpbmcvaW52YWxpZCB2YWx1ZSByYXRoZXIgdGhhbiBxdWlldGx5XG4gICAgLy8gc2VuZGluZyBldmVyeSByZXF1ZXN0IHRvIGEgcmVsYXRpdmUgcGF0aCBvbiB0aGUgYXBwJ3Mgb3JpZ2luLlxuICAgIHRoaXMuYmFzZVVybCA9IHJlc29sdmVGcm9udGVuZEFwaShvcHRpb25zLmZyb250ZW5kQXBpLCB7XG4gICAgICBjb21wb25lbnQ6ICdwcm92aWRlQXRsYXMoKSAvIEF0bGFzTW9kdWxlLmZvclJvb3QoKScsXG4gICAgfSk7XG4gICAgLy8gRGV2ZWxvcG1lbnQgaW5zdGFuY2VzIGtlZXAgdGhlIHNlc3Npb24gaW4gYSBoZWFkZXIgd2hlcmUgdGhlIGJyb3dzZXIgYmxvY2tzIHRoZSBjb29raWUuXG4gICAgdGhpcy5kb0ZldGNoID0gd2l0aERldkJyb3dzZXIoXG4gICAgICBvcHRpb25zLnB1Ymxpc2hhYmxlS2V5LFxuICAgICAgb3B0aW9ucy5mZXRjaEltcGwgPz8gKCguLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD4pID0+IGZldGNoKC4uLmFyZ3MpKSxcbiAgICApO1xuXG4gICAgdGhpcy5jYXRhbG9nID0gb3B0aW9ucy5sb2NhbGl6YXRpb24gPyB3aXRoRmFsbGJhY2sob3B0aW9ucy5sb2NhbGl6YXRpb24pIDogRU5fVVM7XG4gICAgdGhpcy5lcnJvckNhdGFsb2cgPSBvcHRpb25zLmxvY2FsaXphdGlvbiA/PyBFTl9VUztcbiAgICB0aGlzLnJlcXVlc3RMb2NhbGUgPSBjYXRhbG9nTG9jYWxlKG9wdGlvbnMubG9jYWxpemF0aW9uKTtcblxuICAgIC8vIFJlZmVycmFsIGF0dHJpYnV0aW9uOiBhcHAtd2lkZSBvcHRpb25zIGV2ZXJ5IEZBUEkgY2xpZW50IG9uIHRoZSBwYWdlIGZhbGxzIGJhY2sgdG8uXG4gICAgY29uZmlndXJlUmVmZXJyYWxDYXB0dXJlKHsgcmVmZXJyYWw6IG9wdGlvbnMucmVmZXJyYWwsIHJlZmVycmFsQ29uc2VudDogb3B0aW9ucy5yZWZlcnJhbENvbnNlbnQgfSk7XG4gICAgdGhpcy5mYXBpQ2xpZW50ID0gbmV3IEZhcGlDbGllbnQoe1xuICAgICAgcHVibGlzaGFibGVLZXk6IHRoaXMucHVibGlzaGFibGVLZXksXG4gICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICBmZXRjaEltcGw6IHRoaXMuZG9GZXRjaCxcbiAgICAgIGxvY2FsZTogdGhpcy5yZXF1ZXN0TG9jYWxlLFxuICAgICAgc2RrOiBBVExBU19BTkdVTEFSX1NESyxcbiAgICB9KTtcblxuICAgIHRoaXMubm90aWZpZXIuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fc2lnbk91dC5uZXh0KGV2ZW50KSk7XG4gICAgaWYgKG9wdGlvbnMub25TaWduT3V0KSB0aGlzLm5vdGlmaWVyLnN1YnNjcmliZShvcHRpb25zLm9uU2lnbk91dCk7XG5cbiAgICB0aGlzLmd1YXJkID0gbmV3IFNpZ25PdXRHdWFyZCh7XG4gICAgICByZXF1ZXN0OiAocGF0aCwgaW5pdCkgPT4gdGhpcy5jYWxsKHBhdGgsIGluaXQpLFxuICAgICAgZnJvbnRlbmRBcGk6IHRoaXMuYmFzZVVybCxcbiAgICB9KTtcblxuICAgIC8vIENhcHR1cmVkIHN5bmNocm9ub3VzbHkgKG5vdCBpbiBhbiBhc3luYyBpbml0KSBzbyBpdCBpcyBhdmFpbGFibGUgYmVmb3JlIGFueVxuICAgIC8vIGZsb3cgY29tcG9uZW50IHJlYWRzIGl0OiBhIG5lZWRzX3NlY29uZF9mYWN0b3IgcmVkaXJlY3QgY2FycmllcyBhIHN0YXR1cyBidXRcbiAgICAvLyBubyB0aWNrZXQsIGFuZCB0aGF0IGlzIHdoYXQgdGhlIDJGQSByZXN1bWUgc2VlZHMgZnJvbS5cbiAgICB0aGlzLnBlbmRpbmdBdHRlbXB0ID0gdGhpcy5pc0Jyb3dzZXIgPyB0aGlzLnJlYWRQZW5kaW5nQXR0ZW1wdCgpIDogbnVsbDtcblxuICAgIC8vIEJvb3Qgb25jZSwgYnJvd3NlciBvbmx5LiBPbiB0aGUgc2VydmVyIHRoZXJlIGlzIG5vIGNvb2tpZSBqYXIgdG8gcmVhZCBhXG4gICAgLy8gc2Vzc2lvbiBmcm9tLCBzbyB3ZSBsZWF2ZSB0aGUgc3RhdGUgYXQgYGxvYWRpbmdgIGFuZCBsZXQgaHlkcmF0aW9uIGJvb3QgaXQuXG4gICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7XG4gICAgICAvLyBBbm90aGVyIHRhYiBzaWduZWQgb3V0IG9mIFRISVMgc2Vzc2lvbiAoaXRzIHRvbWJzdG9uZSByZWFjaGVkIHRoZSBzaGFyZWRcbiAgICAgIC8vIHN0b3JlKTogZHJvcCB0aGUgdG9rZW4gYW5kIHJlLWNoZWNrLCB3aGljaCB0aGVuIHJlZnVzZXMgdGhlIHNlc3Npb24uXG4gICAgICB0aGlzLnN0b3BXYXRjaGluZ1NpZ25PdXQgPSB0aGlzLmd1YXJkLndhdGNoKFxuICAgICAgICAoKSA9PiB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IHRoaXMuX3Nlc3Npb24udmFsdWU/LmlkLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ub3RpZmllci5leHBlY3QoJ290aGVyX3RhYicpO1xuICAgICAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgICB2b2lkIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdm9pZCB0aGlzLmJvb3QoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BXYXRjaGluZ1NpZ25PdXQ/LigpO1xuICAgIHRoaXMuc3RvcFdhdGNoaW5nU2lnbk91dCA9IG51bGw7XG4gICAgdGhpcy5ndWFyZC5kaXNwb3NlKCk7XG4gICAgdGhpcy5jbGVhclJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuX3N0YXR1cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3VzZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zZXNzaW9uLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY2xhaW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fbWVtYmVyc2hpcHMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zaWduT3V0LmNvbXBsZXRlKCk7XG4gIH1cblxuICAvLyAtLS0gQ29uZmlndXJhdGlvbiBhY2Nlc3NvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgZ2V0IGFwcGVhcmFuY2UoKTogQXBwZWFyYW5jZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlO1xuICB9XG5cbiAgZ2V0IGxvY2FsaXphdGlvbigpOiBDYXRhbG9nIHtcbiAgICByZXR1cm4gdGhpcy5jYXRhbG9nO1xuICB9XG5cbiAgZ2V0IGZyb250ZW5kQXBpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVVybDtcbiAgfVxuXG4gIC8qKiBUaGUgYEFjY2VwdC1MYW5ndWFnZWAgc2VudCB0byB0aGUgRnJvbnRlbmQgQVBJOiB0aGUgYGxvY2FsaXphdGlvbmAgYnVuZGxlJ3MgYGxvY2FsZWAgdGFnLCBpZiBhbnkuICovXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIHNob3cgZm9yIGEgc2VydmVyIGVycm9yLCBpbiB0aGUgYXBwJ3MgbGFuZ3VhZ2U6IHRoZSBjYXRhbG9nJ3NcbiAgICogYGVycm9yLjxyZWFzb24+YCAobG9va2VkIHVwIGluIHRoZSBgbG9jYWxpemF0aW9uYCBidW5kbGUsIG9yIGBFTl9VU2Agd2hlblxuICAgKiBub25lIGlzIHNldCksIGVsc2UgdGhlIHNlcnZlcidzIG1lc3NhZ2UsIGVsc2UgYGVycm9yLmdlbmVyaWNgLlxuICAgKi9cbiAgZXJyb3JUZXh0KGVycm9yOiBFcnJvckxpa2UgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxpemVkRXJyb3JNZXNzYWdlKGVycm9yLCB0aGlzLmVycm9yQ2F0YWxvZywgdGhpcy5jYXRhbG9nKTtcbiAgfVxuXG4gIC8qKiBUaGUgY2F0YWxvZyBzZXJ2ZXIgZXJyb3JzIGFyZSBsb29rZWQgdXAgaW4gKHNlZSB7QGxpbmsgZXJyb3JUZXh0fSkuICovXG4gIGdldCBlcnJvckxvY2FsaXphdGlvbigpOiBDYXRhbG9nIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvckNhdGFsb2c7XG4gIH1cblxuICAvKiogVG9rZW5zIGFzIENTUyBjdXN0b20gcHJvcGVydGllcywgZm9yIGEgaG9zdCBlbGVtZW50IHRvIGluaGVyaXQuICovXG4gIGFwcGVhcmFuY2VWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIGNzc1ZhcmlhYmxlcyhyZXNvbHZlVG9rZW5zKHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZ1bGwgYXBwZWFyYW5jZSByZW5kZXIgZm9yIGEgcm9vdCBlbGVtZW50OiBpbmxpbmUgdmFyaWFibGVzLCB0aGVcbiAgICogYGRhdGEtYXRsYXMtKmAgYXR0cmlidXRlcyBhbmQgdGhlIGRlc2lnbiBzdHlsZXNoZWV0LiBQYXNzIHRoZSBkYXNoYm9hcmRcbiAgICogZGVzaWduIChmcm9tIHtAbGluayBsb2FkSW5zdGFuY2VEZXNpZ259KSB0byBsYXllciBjb2RlIG92ZXJyaWRlcyBvbiBpdCDigJRcbiAgICogdGhlIHNhbWUgc2VtYW50aWNzIGFzIGBAYXRsYXNhdXRoL3JlYWN0YC5cbiAgICovXG4gIGFwcGVhcmFuY2VSZW5kZXIoaW5zdGFuY2VEZXNpZ24/OiBJbnN0YW5jZURlc2lnbiB8IG51bGwpOiBBcHBlYXJhbmNlUmVuZGVyIHtcbiAgICByZXR1cm4gcmVuZGVyQXBwZWFyYW5jZSh0aGlzLm9wdGlvbnMuYXBwZWFyYW5jZSwgaW5zdGFuY2VEZXNpZ24gPz8gbnVsbCwge1xuICAgICAgZnJvbnRlbmRBcGk6IHRoaXMuYmFzZVVybCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVzaWduIGNvbmZpZ3VyZWQgaW4gdGhlIEF0bGFzIGRhc2hib2FyZCAoYEdFVCAvdjEvYXBwZWFyYW5jZWApLCBvciBudWxsXG4gICAqIHdoZW4gdGhlcmUgaXMgbm9uZSwgaXQgY2Fubm90IGJlIHJlYWQsIG9yIHRoZSBhcHAgb3B0ZWQgb3V0IHdpdGhcbiAgICogYGFwcGVhcmFuY2UuaW5zdGFuY2VEZXNpZ246IGZhbHNlYC5cbiAgICovXG4gIGFzeW5jIGxvYWRJbnN0YW5jZURlc2lnbigpOiBQcm9taXNlPEluc3RhbmNlRGVzaWduIHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXBwZWFyYW5jZT8uaW5zdGFuY2VEZXNpZ24gPT09IGZhbHNlKSByZXR1cm4gbnVsbDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoJy92MS9hcHBlYXJhbmNlJyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2Uub2sgPyBpbnN0YW5jZURlc2lnbkZyb20oYXdhaXQgcmVzcG9uc2UuanNvbigpKSA6IG51bGw7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFjdGl2ZSBvcmdhbml6YXRpb24ncyBhdWRpdCB0cmFpbCwgZm9yIGl0cyBhZG1pbnM6IGBzdGF0ZWAgaXMgYSBzaWduYWxcbiAgICogb2YgYHsgZW50cmllcywgbG9hZGluZywgZm9yYmlkZGVuLCBoYXNNb3JlIH1gLCBvbmUgcGFnZSBhdCBhIHRpbWUgd2l0aFxuICAgKiBgbG9hZE1vcmUoKWAuIGBhY3Rpb25gIG5hcnJvd3MgaXQgKGV4YWN0LCBvciBhIHByZWZpeCBlbmRpbmcgaW4gYC5gKS4gSXRcbiAgICogZm9sbG93cyB0aGUgYWN0aXZlIG9yZ2FuaXphdGlvbjsgY2FsbCBgZGVzdHJveSgpYCB3aGVuIGRvbmUuIFRoZSBwZWVyIG9mXG4gICAqIFJlYWN0J3MgYHVzZU9yZ2FuaXphdGlvbkF1ZGl0TG9nYC5cbiAgICovXG4gIG9yZ2FuaXphdGlvbkF1ZGl0TG9nKG9wdGlvbnM6IE9yZ2FuaXphdGlvbkF1ZGl0TG9nT3B0aW9ucyA9IHt9KTogQXRsYXNPcmdhbml6YXRpb25BdWRpdExvZyB7XG4gICAgcmV0dXJuIG5ldyBBdGxhc09yZ2FuaXphdGlvbkF1ZGl0TG9nKHRoaXMuY3JlYXRlRmFwaUNsaWVudCgpLCB0aGlzLm9yZ2FuaXphdGlvbiQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLWF1dGhlbnRpY2F0ZSB0aGUgc2lnbmVkLWluIHVzZXIgd2l0aCB0aGVpciBwYXNzd29yZCAoYSBzdGVwLXVwKSwgZm9yIGFuXG4gICAqIGFjdGlvbiB0aGUgc2VydmVyIGFuc3dlcmVkIHdpdGggU1RFUF9VUF9SRVFVSVJFRC4gUmVqZWN0cyB3aGVuIHJlZnVzZWQuXG4gICAqL1xuICByZWF1dGhlbnRpY2F0ZShwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHJlYXV0aGVudGljYXRlKFxuICAgICAgeyBzdHJhdGVneTogJ3Bhc3N3b3JkJywgcGFzc3dvcmQgfSxcbiAgICAgIHsgYXBpOiB0aGlzLmJhc2VVcmwsIHB1Ymxpc2hhYmxlS2V5OiB0aGlzLnB1Ymxpc2hhYmxlS2V5LCBmZXRjaEltcGw6IHRoaXMuZG9GZXRjaCwgbG9jYWxlOiB0aGlzLnJlcXVlc3RMb2NhbGUgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqIEEgZnJlc2gge0BsaW5rIEZhcGlDbGllbnR9IGZvciBkcml2aW5nIGEgc2lnbi1pbi9zaWduLXVwIGZsb3cuICovXG4gIGNyZWF0ZUZhcGlDbGllbnQoKTogRmFwaUNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBGYXBpQ2xpZW50KHtcbiAgICAgIHB1Ymxpc2hhYmxlS2V5OiB0aGlzLnB1Ymxpc2hhYmxlS2V5LFxuICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgbG9jYWxlOiB0aGlzLnJlcXVlc3RMb2NhbGUsXG4gICAgICBzZGs6IEFUTEFTX0FOR1VMQVJfU0RLLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIEltcGVyYXRpdmUgQVBJIChtaXJyb3JzIHRoZSBSZWFjdCBob29rcycgYWN0aW9ucykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzZXNzaW9uJ3MgSldULCBhbHdheXMgZnJlc2g6IGlmIHRoZSBjYWNoZWQgdG9rZW4gaXMgd2l0aGluIDVzIG9mXG4gICAqIGV4cGlyeSBpdCBpcyByZWZyZXNoZWQgZmlyc3QgcmF0aGVyIHRoYW4gaGFuZGVkIG92ZXIuIE51bGwgd2hlbiBzaWduZWQgb3V0LlxuICAgKi9cbiAgLyoqIFRoZSBzZXNzaW9uIEpXVDsgd2l0aCBgeyB0ZW1wbGF0ZSB9YCBhIHNob3J0LWxpdmVkIG5hbWVkLXRlbXBsYXRlIHRva2VuIChlLmcuIGAnY2hhdGx5J2ApLiAqL1xuICBhc3luYyBnZXRUb2tlbihvcHRpb25zPzogeyB0ZW1wbGF0ZT86IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKG9wdGlvbnM/LnRlbXBsYXRlKSB7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IHRoaXMuX3Nlc3Npb24udmFsdWU/LmlkID8/IG51bGw7XG4gICAgICByZXR1cm4gc2Vzc2lvbklkID8gKChhd2FpdCBnZXRUZW1wbGF0ZVRva2VuKHRoaXMuZmFwaUNsaWVudCwgc2Vzc2lvbklkLCBvcHRpb25zLnRlbXBsYXRlKSk/Lmp3dCA/PyBudWxsKSA6IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVzYWJsZSA9IHRoaXMuY2FjaGUuZ2V0KDVfMDAwKTtcbiAgICBpZiAodXNhYmxlKSByZXR1cm4gdXNhYmxlLmp3dDtcblxuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldCg1XzAwMCk/Lmp3dCA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzaWduZWQtaW4gdXNlcidzIE9XTiBsaXZlIGFjY2VzcyB0b2tlbiBhdCBhIGNvbm5lY3RlZCBwcm92aWRlciAoR29vZ2xlLFxuICAgKiBHaXRIdWIsIOKApiksIHNvIHRoZSBhcHAgY2FuIGNhbGwgdGhhdCBwcm92aWRlcidzIEFQSSBmcm9tIHRoZSBicm93c2VyLiBOdWxsXG4gICAqIHdoZW4gdGhlcmUgaXMgbm8gdXNhYmxlIHRva2VuIOKAlCBubyBsaW5rZWQgYWNjb3VudCwgb3IgdGhlIHByb3ZpZGVyIGdyYW50ZWQgL1xuICAgKiBrZXB0IG5vbmUuIFRoZSBzZXJ2ZXIgcmVmcmVzaGVzIGEgc3RhbGUgdG9rZW4gb24gcmVhZDsgdGhlIHJlZnJlc2ggdG9rZW4gaXNcbiAgICogbmV2ZXIgZXhwb3NlZC5cbiAgICovXG4gIC8qKiBMaXN0ZW4gZm9yIHNpZ24tb3V0IG9uIGV2ZXJ5IHBhdGggKHNlZSB7QGxpbmsgc2lnbk91dCR9KTsgcmV0dXJucyB0aGUgdW5zdWJzY3JpYmUuICovXG4gIG9uU2lnbk91dChsaXN0ZW5lcjogU2lnbk91dExpc3RlbmVyKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpZXIuc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyVG9rZW4ocHJvdmlkZXI6IHN0cmluZyk6IFByb21pc2U8UHJvdmlkZXJUb2tlbiB8IG51bGw+IHtcbiAgICByZXR1cm4gZmV0Y2hQcm92aWRlclRva2VuKHRoaXMuZmFwaUNsaWVudCwgcHJvdmlkZXIpO1xuICB9XG5cbiAgLyoqIEltcGVyYXRpdmUgYGhhcygpYCDigJQgdGhlIHNhbWUgZXZhbHVhdGlvbiBgKmF0bGFzUHJvdGVjdGAgcmVuZGVycyBvbi4gKi9cbiAgaGFzKGNvbmRpdGlvbjogUHJvdGVjdENvbmRpdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmFsdWF0ZSh0aGlzLl9jbGFpbXMudmFsdWUsIGNvbmRpdGlvbikuYWxsb3dlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgdGhlIGN1cnJlbnQgc2Vzc2lvbiBzZXJ2ZXItc2lkZSBhbmQgZHJvcCBhbGwgbG9jYWwgYXV0aCBzdGF0ZS5cbiAgICpcbiAgICogVGhlIHNlc3Npb24gaWQgaXMgcmVtZW1iZXJlZCBiZWZvcmUgdGhlIHJldm9rZSAoYSB0b21ic3RvbmUgc2hhcmVkIGJ5IGV2ZXJ5XG4gICAqIHRhYiksIHNvIGEgcmVsb2FkLCBhIHRva2VuIHJlZnJlc2gsIGEgc2libGluZyB0YWIgb3IgYSB0YWIgb3BlbmVkIGxhdGVyIG5ldmVyXG4gICAqIHJlLWFkb3B0cyBpdCDigJQgZXZlbiB3aGVuIHRoZSByZXZva2UgZmFpbGVkIChpdCBpcyByZXRyaWVkIG9uY2UsIHRoZW4gYWdhaW4gaW5cbiAgICogdGhlIGJhY2tncm91bmQpIGFuZCB0aGUgcmVmcmVzaCBjb29raWUgaXMgc3RpbGwgdmFsaWQuIFJlc29sdmVzXG4gICAqIGB7IHJldm9rZWQsIGFjdGl2ZVNlc3Npb25JZD8gfWA7IHdpdGggYHsgc3RyaWN0OiB0cnVlIH1gIGFuIHVuY29uZmlybWVkIHJldm9rZVxuICAgKiByZWplY3RzIHdpdGggYSBgU2lnbk91dEVycm9yYCBpbnN0ZWFkIChhZnRlciB0aGUgbG9jYWwgc2lnbi1vdXQpLiBBIHBhcmtlZFxuICAgKiBzZXNzaW9uIHRoZSBzZXJ2ZXIgcHJvbW90ZWQgb24gcmV2b2tlIGlzIGFkb3B0ZWQuIEZyb250LWNoYW5uZWwgbG9nb3V0IHJ1bnNcbiAgICogdW5sZXNzIGB7IGZyb250Y2hhbm5lbDogZmFsc2UgfWAuXG4gICAqL1xuICBhc3luYyBzaWduT3V0KG9wdGlvbnM6IFNpZ25PdXRPcHRpb25zID0ge30pOiBQcm9taXNlPFNpZ25PdXRSZXN1bHQ+IHtcbiAgICAvLyBXaXRoIG5vIGNhY2hlZCB0b2tlbiB0aGUgZ3VhcmQgZmluZHMgdGhlIGNvb2tpZSBzZXNzaW9uIGl0c2VsZlxuICAgIC8vIChHRVQgL3YxL2NsaWVudCksIHNvIGEgbWlzc2luZyBKV1QgbmV2ZXIgc2tpcHMgdGhlIHJldm9rZS5cbiAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IHRoaXMuX3Nlc3Npb24udmFsdWU/LmlkID8/IG51bGw7XG4gICAgdGhpcy5ub3RpZmllci5leHBlY3QoJ3VzZXInKTtcbiAgICBjb25zdCBhdHRlbXB0ID0gYXdhaXQgdGhpcy5ndWFyZC5yZXZva2Uoc2Vzc2lvbklkLCBvcHRpb25zKTtcbiAgICB0aGlzLmNsZWFyTG9jYWxTdGF0ZSgndXNlcicpO1xuICAgIGlmICh0aGlzLmd1YXJkLnByb21vdGVkKGF0dGVtcHQpKSBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmd1YXJkLnNldHRsZShhdHRlbXB0LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmQgdGhlIGFjdGl2ZSBpbXBlcnNvbmF0aW9uIChcInJldHVybiB0byBhZG1pblwiKTogdGhlIGltcGVyc29uYXRvcidzIG93blxuICAgKiBzZXNzaW9uIG9uIHRoaXMgYnJvd3NlciBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiB3aXRoIG5vIHNpZ24taW5cbiAgICogKGByZXN1bWVkOiB0cnVlYCk7IHdpdGggbm9uZSwgYW5vdGhlciBhY2NvdW50IHNpZ25lZCBpbiBoZXJlIGlzIGFkb3B0ZWQsXG4gICAqIG9yIHRoaXMgYnJvd3NlciBpcyBzaWduZWQgb3V0LlxuICAgKi9cbiAgYXN5bmMgZW5kSW1wZXJzb25hdGlvbigpOiBQcm9taXNlPEVuZEltcGVyc29uYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBvdXRjb21lID0gYXdhaXQgdGhpcy5ndWFyZC5lbmRJbXBlcnNvbmF0aW9uKHRoaXMuY2FjaGUucGVlaygpPy5zZXNzaW9uSWQgPz8gdGhpcy5fc2Vzc2lvbi52YWx1ZT8uaWQgPz8gbnVsbCk7XG4gICAgaWYgKCFvdXRjb21lLmVuZGVkKSByZXR1cm4gb3V0Y29tZTtcbiAgICBpZiAoIW91dGNvbWUuYWN0aXZlU2Vzc2lvbklkKSB7XG4gICAgICB0aGlzLmNsZWFyTG9jYWxTdGF0ZSgndXNlcicpO1xuICAgICAgcmV0dXJuIG91dGNvbWU7XG4gICAgfVxuICAgIGlmIChvdXRjb21lLmp3dCkgdGhpcy5hcHBseVRva2VuKG91dGNvbWUuand0LCBvdXRjb21lLmFjdGl2ZVNlc3Npb25JZCk7XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgICByZXR1cm4gb3V0Y29tZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2ggdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gKG9yIGBudWxsYCBmb3IgdGhlIHBlcnNvbmFsIGFjY291bnQpLiBUaGVcbiAgICogbmV3IHRva2VuIGNhcnJpZXMgdGhlIG5ldyBvcmcgY2xhaW1zLCBzbyB0aGUgYXBwJ3MgcGVybWlzc2lvbiBjaGVja3MgdXBkYXRlXG4gICAqIHdpdGhvdXQgYSByZS1sb2dpbi5cbiAgICovXG4gIGFzeW5jIHNldEFjdGl2ZU9yZ2FuaXphdGlvbihvcmdhbml6YXRpb25JZDogc3RyaW5nIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKGAvdjEvY2xpZW50L3Nlc3Npb25zLyR7Y3VycmVudC5zZXNzaW9uSWR9L3RvdWNoYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGl2ZV9vcmdhbml6YXRpb25faWQ6IG9yZ2FuaXphdGlvbklkIH0pLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHJldHVybjtcblxuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGp3dDogc3RyaW5nIH07XG4gICAgdGhpcy5hcHBseVRva2VuKGJvZHkuand0LCBjdXJyZW50LnNlc3Npb25JZCk7XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIC8qKiBSZS1yZWFkIGAvdjEvY2xpZW50YDogcmVmcmVzaCB1c2VyLCBzZXNzaW9uLCBtZW1iZXJzaGlwcyBhbmQgc3RhdHVzLiAqL1xuICAvKiogUmUtYm9vdCBmcm9tIHRoZSBGcm9udGVuZCBBUEkuIFJlc29sdmVzIHRydWUgd2hlbiBhIHNlc3Npb24gbm93IGV4aXN0cyBpbiB0aGlzIGJyb3dzZXIuICovXG4gIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoJy92MS9jbGllbnQnKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcignYm9vdCBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgc2Vzc2lvbjogQXRsYXNTZXNzaW9uIHwgbnVsbDtcbiAgICAgICAgdXNlcjogQXRsYXNVc2VyIHwgbnVsbDtcbiAgICAgICAgand0Pzogc3RyaW5nO1xuICAgICAgICBvcmdhbml6YXRpb25fbWVtYmVyc2hpcHM/OiBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEEgc2Vzc2lvbiB0aGlzIGJyb3dzZXIgc2lnbmVkIG91dCBvZiBpcyBuZXZlciByZS1hZG9wdGVkIGZyb20gdGhlXG4gICAgICAvLyByZWZyZXNoIGNvb2tpZTsgdGhlIGd1YXJkIHJlLXRyaWVzIGl0cyByZXZva2UgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgICBpZiAoIWJvZHkuc2Vzc2lvbiB8fCAhYm9keS51c2VyIHx8IHRoaXMuZ3VhcmQucmVmdXNlKGJvZHkuc2Vzc2lvbi5pZCkpIHtcbiAgICAgICAgdGhpcy5jbGVhckxvY2FsU3RhdGUoYm9keS5zZXNzaW9uID8gJ290aGVyX3RhYicgOiBzaWduT3V0UmVhc29uRnJvbUNsaWVudChib2R5KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90aWZpZXIuY2xlYXIoKTtcblxuICAgICAgdGhpcy5fdXNlci5uZXh0KGJvZHkudXNlcik7XG4gICAgICB0aGlzLl9zZXNzaW9uLm5leHQoYm9keS5zZXNzaW9uKTtcbiAgICAgIHRoaXMuX21lbWJlcnNoaXBzLm5leHQoYm9keS5vcmdhbml6YXRpb25fbWVtYmVyc2hpcHMgPz8gW10pO1xuICAgICAgaWYgKGJvZHkuand0KSB0aGlzLmFwcGx5VG9rZW4oYm9keS5qd3QsIGJvZHkuc2Vzc2lvbi5pZCk7XG4gICAgICB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX2luJyk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVmcmVzaCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBBIGZhaWxlZCBib290IGlzIE5PVCBzaWduZWQtb3V0LiBSZW5kZXJpbmcgYSBzaWduLWluIGZvcm0gYmVjYXVzZSB0aGVcbiAgICAgIC8vIG5ldHdvcmsgaGljY3VwZWQgdGhyb3dzIGF3YXkgYSBwZXJmZWN0bHkgZ29vZCBzZXNzaW9uIGFuZCBmb3JjZXMgYVxuICAgICAgLy8gbmVlZGxlc3MgcmUtYXV0aGVudGljYXRpb24uIE9ubHkgcHJvbW90ZSBsb2FkaW5nIOKGkiBzaWduZWRfb3V0LlxuICAgICAgaWYgKHRoaXMuX3N0YXR1cy52YWx1ZSA9PT0gJ2xvYWRpbmcnKSB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX291dCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBJbnRlcm5hbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogwqc2LjMgc3RlcCAzOiBjb21wbGV0ZSBhIHJlZGlyZWN0LWJhc2VkIHNpZ24taW4sIHRoZW4gYm9vdC4gQW4gT0F1dGggb3JcbiAgICogaG9zdGVkLXBhZ2UgZmxvdyBsYW5kcyBiYWNrIHdpdGggYSBvbmUtdGltZSB0aWNrZXQgaW4gdGhlIFVSTDsgZXhjaGFuZ2UgaXRcbiAgICogZm9yIGNvb2tpZXMsIHNjcnViIHRoZSBVUkwgc28gYSByZWxvYWQgY2Fubm90IHJlcGxheSBpdCwgVEhFTiByZWFkIHRoZVxuICAgKiBzZXNzaW9uLiBBIHJlZGlyZWN0IGNhcnJ5aW5nIG9ubHkgYSBzdGF0dXMgKGEgc2Vjb25kIGZhY3RvciBpcyBzdGlsbCBvd2VkKVxuICAgKiBoYXMgbm8gdGlja2V0LCBzbyBub3RoaW5nIGlzIGV4Y2hhbmdlZCBhbmQgdGhlIGFwcCBib290cyBzaWduZWQtb3V0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBib290KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZyb21VcmwgPSByZWFkUmVkaXJlY3RSZXN1bHQod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgbGV0IHJlc3VsdDogUmVkaXJlY3RSZXN1bHQgfCBudWxsID0gZnJvbVVybDtcblxuICAgIC8vIMKnb2F1dGggcG9wdXAgbW9kZTogdGhpcyBwYWdlIG1heSBiZSB0aGUgbGFuZGluZyBvZiBhIHNpZ24taW4gcG9wdXAgd2hvc2VcbiAgICAvLyBvcGVuZXIgYSBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSBzZXZlcmVkIChgI2F0bGFzX3BvcHVwX3Jlc3VsdD3igKZgKS5cbiAgICAvLyBUaGUgcmVzdWx0IGlzIHJlbGF5ZWQgdG8gdGhlIG9wZW5lciwgd2hpY2ggcmVkZWVtcyB0aGUgdGlja2V0LCBhbmQgdGhpc1xuICAgIC8vIHdpbmRvdyBjbG9zZXMuIElmIG5vIG9wZW5lciB0YWtlcyBpdCAoaXRzIHRhYiBpcyBnb25lKSwgZmluaXNoIGhlcmUgbGlrZVxuICAgIC8vIGEgcmVkaXJlY3QuXG4gICAgY29uc3QgbGFuZGluZyA9IGF3YWl0IGNvbXBsZXRlT0F1dGhQb3B1cExhbmRpbmcoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICBpZiAobGFuZGluZyAmJiAhbGFuZGluZy5kZWxpdmVyZWQpIHtcbiAgICAgIGNvbnN0IG91dGNvbWUgPSBtYXBPQXV0aFBvcHVwUGF5bG9hZChsYW5kaW5nLnBheWxvYWQpO1xuICAgICAgaWYgKG91dGNvbWU/LnRpY2tldCAmJiBvdXRjb21lLmF0dGVtcHRJZCkge1xuICAgICAgICByZXN1bHQgPSB7IGF0dGVtcHRJZDogb3V0Y29tZS5hdHRlbXB0SWQsIHRpY2tldDogb3V0Y29tZS50aWNrZXQgfTtcbiAgICAgIH0gZWxzZSBpZiAob3V0Y29tZT8uY29udGludWF0aW9uVXJsKSB7XG4gICAgICAgIC8vIEEgc2Vjb25kIGZhY3RvciAvIGNvbm5lY3Qgc3RlcCAvIHByb3ZpZGVyIGVycm9yOiB0aGUgcmVkaXJlY3QgZmxvdydzIHBhZ2UuXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKG91dGNvbWUuY29udGludWF0aW9uVXJsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleGNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0Py50aWNrZXQpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGF0dGVtcHRfaWQ6IHJlc3VsdC5hdHRlbXB0SWQsIHRpY2tldDogcmVzdWx0LnRpY2tldCB9KSxcbiAgICAgIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICBleGNoYW5nZWQgPSAhIXJlc3BvbnNlPy5vaztcbiAgICB9XG4gICAgaWYgKGZyb21VcmwpIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIHN0cmlwUmVkaXJlY3RQYXJhbXMod2luZG93LmxvY2F0aW9uLmhyZWYpKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgICAvLyBTaWduZWQgaW4gaW5zaWRlIHRoZSBBdGxhcyBwb3B1cCAodGhlIHJlZGlyZWN0IGZsb3cgcmFuIGluIGl0KTogaGFuZCBiYWNrXG4gICAgLy8gdG8gdGhlIHdhaXRpbmcgb3BlbmVyIGFuZCBjbG9zZS4gQSBuby1vcCBpbiBhbiBvcmRpbmFyeSB0YWIuXG4gICAgaWYgKGV4Y2hhbmdlZCkgdm9pZCBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkUGVuZGluZ0F0dGVtcHQoKTogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcG9saWN5VG9rZW4/OiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRSZWRpcmVjdFJlc3VsdCh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICByZXR1cm4gcmVzdWx0Py5zdGF0dXMgJiYgIXJlc3VsdC50aWNrZXRcbiAgICAgID8geyBpZDogcmVzdWx0LmF0dGVtcHRJZCwgc3RhdHVzOiByZXN1bHQuc3RhdHVzLCAuLi4ocmVzdWx0LnBvbGljeVRva2VuID8geyBwb2xpY3lUb2tlbjogcmVzdWx0LnBvbGljeVRva2VuIH0gOiB7fSkgfVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxsKHBhdGg6IHN0cmluZywgaW5pdD86IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kb0ZldGNoKGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YCwge1xuICAgICAgLi4uaW5pdCxcbiAgICAgIC8vIENvb2tpZXMgY2FycnkgdGhlIHNlc3Npb247IGEgcmVxdWVzdCB3aXRob3V0IHRoaXMgaXMgaW5kaXN0aW5ndWlzaGFibGVcbiAgICAgIC8vIGZyb20gYmVpbmcgc2lnbmVkIG91dC5cbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICd4LXB1Ymxpc2hhYmxlLWtleSc6IHRoaXMucHVibGlzaGFibGVLZXksXG4gICAgICAgIC8vIE5hbWVzIHRoaXMgU0RLIHNvIHRoZSBGcm9udGVuZCBBUEkgY2FuIGZsYWcgYSB2ZXJzaW9uIHdpdGggYSBrbm93biBidWcuXG4gICAgICAgIFtTREtfSEVBREVSXTogc2RrSGVhZGVyVmFsdWUoQVRMQVNfQU5HVUxBUl9TREspLFxuICAgICAgICAuLi4oaW5pdD8uYm9keSA/IHsgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9IDoge30pLFxuICAgICAgICAuLi5pbml0Py5oZWFkZXJzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXBvcnRTZGtBZHZpc29yeShyZXNwb25zZSwgQVRMQVNfQU5HVUxBUl9TREspO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUb2tlbihqd3Q6IHN0cmluZywgc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBBbiBpbi1mbGlnaHQgcmVmcmVzaCBtdXN0IG5vdCByZXN1cnJlY3QgYSBzZXNzaW9uIHNpZ25lZCBvdXQgbWVhbndoaWxlLlxuICAgIGlmICh0aGlzLmd1YXJkLmlzU2lnbmVkT3V0KHNlc3Npb25JZCkpIHJldHVybjtcbiAgICBjb25zdCBleHBpcmVzQXQgPSByZWFkRXhwaXJ5KGp3dCk7XG4gICAgaWYgKCFleHBpcmVzQXQpIHJldHVybjtcblxuICAgIHRoaXMuY2FjaGUuc2V0KHsgand0LCBleHBpcmVzQXQsIHNlc3Npb25JZCB9KTtcbiAgICB0aGlzLl9jbGFpbXMubmV4dChkZWNvZGVDbGFpbXMoand0KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY2FjaGUucGVlaygpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKGAvdjEvY2xpZW50L3Nlc3Npb25zLyR7Y3VycmVudC5zZXNzaW9uSWR9L3Rva2Vuc2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcigncmVmcmVzaCBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgand0OiBzdHJpbmc7IHNlc3Npb25faWQ6IHN0cmluZyB9O1xuICAgICAgdGhpcy5hcHBseVRva2VuKGJvZHkuand0LCBib2R5LnNlc3Npb25faWQpO1xuICAgICAgdGhpcy5zY2hlZHVsZVJlZnJlc2goKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRoZSBzZXNzaW9uIG1heSBnZW51aW5lbHkgYmUgZ29uZS4gUmUtYm9vdCByYXRoZXIgdGhhbiBndWVzcy5cbiAgICAgIGF3YWl0IHRoaXMucmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckxvY2FsU3RhdGUocmVhc29uPzogU2lnbk91dFJlYXNvbik6IHZvaWQge1xuICAgIC8vIEEgc2lnbmVkLWluIOKGkiBzaWduZWQtb3V0IHRyYW5zaXRpb24gdGVsbHMgdGhlIHNpZ24tb3V0IGxpc3RlbmVycyB3aHkuXG4gICAgY29uc3QgZW5kZWQgPVxuICAgICAgdGhpcy5fc3RhdHVzLnZhbHVlID09PSAnc2lnbmVkX2luJ1xuICAgICAgICA/ICh0aGlzLl9zZXNzaW9uLnZhbHVlPy5pZCA/PyB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IG51bGwpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5fc3RhdHVzLm5leHQoJ3NpZ25lZF9vdXQnKTtcbiAgICB0aGlzLl91c2VyLm5leHQobnVsbCk7XG4gICAgdGhpcy5fc2Vzc2lvbi5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2NsYWltcy5uZXh0KG51bGwpO1xuICAgIHRoaXMuX21lbWJlcnNoaXBzLm5leHQoW10pO1xuICAgIGlmIChlbmRlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLm5vdGlmaWVyLnNpZ25lZE91dChlbmRlZCwgcmVhc29uKTtcbiAgICBlbHNlIHRoaXMubm90aWZpZXIuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiDCpzcuNDogcHJvYWN0aXZlLCBqaXR0ZXJlZCByZWZyZXNoIHNjaGVkdWxlZCBmcm9tIHRoZSB0b2tlbidzIG93biBleHBpcnkuICovXG4gIHByaXZhdGUgc2NoZWR1bGVSZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICBpZiAodGhpcy5fc3RhdHVzLnZhbHVlICE9PSAnc2lnbmVkX2luJykgcmV0dXJuO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG5cbiAgICBjb25zdCBkZWxheSA9IG1zVW50aWxSZWZyZXNoKHsgdG9rZW4sIG5vdzogRGF0ZS5ub3coKSB9KTtcbiAgICB0aGlzLnJlZnJlc2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnJlZnJlc2goKSwgZGVsYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLnJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKiBEZWNvZGUgYSBKV1QgcGF5bG9hZCB3aXRob3V0IHZlcmlmeWluZyBpdCDigJQgYSBzY2hlZHVsaW5nL1VJIGhpbnQgb25seS4gKi9cbmZ1bmN0aW9uIGRlY29kZUNsYWltcyhqd3Q6IHN0cmluZyk6IFNlc3Npb25DbGFpbXMgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBhdG9iKHBhcnRzWzFdIS5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpKSxcbiAgICApIGFzIFNlc3Npb25DbGFpbXM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
|
|
@@ -10,6 +10,8 @@ import { UserButtonComponent } from './components/user-button.component';
|
|
|
10
10
|
import { OrganizationSwitcherComponent } from './components/organization-switcher.component';
|
|
11
11
|
import { UserProfileComponent } from './components/user-profile.component';
|
|
12
12
|
import { OrganizationProfileComponent } from './components/organization-profile.component';
|
|
13
|
+
import { OrganizationAuditLogComponent } from './components/organization-audit-log.component';
|
|
14
|
+
import { AtlasPoliciesDirective, PolicyAcceptStepComponent, PolicyGateComponent } from './components/policy-host';
|
|
13
15
|
/**
|
|
14
16
|
* Every standalone directive and component the SDK ships. Import the array in a
|
|
15
17
|
* standalone component's `imports`, or rely on `AtlasModule` re-exporting it for
|
|
@@ -32,5 +34,9 @@ export const ATLAS_UI = [
|
|
|
32
34
|
OrganizationSwitcherComponent,
|
|
33
35
|
UserProfileComponent,
|
|
34
36
|
OrganizationProfileComponent,
|
|
37
|
+
OrganizationAuditLogComponent,
|
|
38
|
+
AtlasPoliciesDirective,
|
|
39
|
+
PolicyAcceptStepComponent,
|
|
40
|
+
PolicyGateComponent,
|
|
35
41
|
];
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRsYXMudWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2F0bGFzLnVpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDM0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDdEIsc0JBQXNCO0lBQ3RCLHVCQUF1QjtJQUN2QixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsNkJBQTZCO0lBQzdCLG9CQUFvQjtJQUNwQiw0QkFBNEI7SUFDNUIsNkJBQTZCO0lBQzdCLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsbUJBQW1CO0NBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzU2lnbmVkSW5EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2lnbmVkLWluLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBdGxhc1NpZ25lZE91dERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zaWduZWQtb3V0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBdGxhc0xvYWRpbmdEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvbG9hZGluZy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXRsYXNMb2FkZWREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvbG9hZGVkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBdGxhc1Byb3RlY3REaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvcHJvdGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXRsYXNSb290RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2F0bGFzLXJvb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNpZ25JbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zaWduLWluLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaWduVXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2lnbi11cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91c2VyLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uU3dpdGNoZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvb3JnYW5pemF0aW9uLXN3aXRjaGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VyUHJvZmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91c2VyLXByb2ZpbGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9yZ2FuaXphdGlvblByb2ZpbGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvb3JnYW5pemF0aW9uLXByb2ZpbGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkF1ZGl0TG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL29yZ2FuaXphdGlvbi1hdWRpdC1sb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEF0bGFzUG9saWNpZXNEaXJlY3RpdmUsIFBvbGljeUFjY2VwdFN0ZXBDb21wb25lbnQsIFBvbGljeUdhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcG9saWN5LWhvc3QnO1xuXG4vKipcbiAqIEV2ZXJ5IHN0YW5kYWxvbmUgZGlyZWN0aXZlIGFuZCBjb21wb25lbnQgdGhlIFNESyBzaGlwcy4gSW1wb3J0IHRoZSBhcnJheSBpbiBhXG4gKiBzdGFuZGFsb25lIGNvbXBvbmVudCdzIGBpbXBvcnRzYCwgb3IgcmVseSBvbiBgQXRsYXNNb2R1bGVgIHJlLWV4cG9ydGluZyBpdCBmb3JcbiAqIE5nTW9kdWxlLWJhc2VkIGFwcHM6XG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoeyBzdGFuZGFsb25lOiB0cnVlLCBpbXBvcnRzOiBbLi4uQVRMQVNfVUldLCB0ZW1wbGF0ZTogJ+KApicgfSlcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgQVRMQVNfVUkgPSBbXG4gIEF0bGFzU2lnbmVkSW5EaXJlY3RpdmUsXG4gIEF0bGFzU2lnbmVkT3V0RGlyZWN0aXZlLFxuICBBdGxhc0xvYWRpbmdEaXJlY3RpdmUsXG4gIEF0bGFzTG9hZGVkRGlyZWN0aXZlLFxuICBBdGxhc1Byb3RlY3REaXJlY3RpdmUsXG4gIEF0bGFzUm9vdERpcmVjdGl2ZSxcbiAgU2lnbkluQ29tcG9uZW50LFxuICBTaWduVXBDb21wb25lbnQsXG4gIFVzZXJCdXR0b25Db21wb25lbnQsXG4gIE9yZ2FuaXphdGlvblN3aXRjaGVyQ29tcG9uZW50LFxuICBVc2VyUHJvZmlsZUNvbXBvbmVudCxcbiAgT3JnYW5pemF0aW9uUHJvZmlsZUNvbXBvbmVudCxcbiAgT3JnYW5pemF0aW9uQXVkaXRMb2dDb21wb25lbnQsXG4gIEF0bGFzUG9saWNpZXNEaXJlY3RpdmUsXG4gIFBvbGljeUFjY2VwdFN0ZXBDb21wb25lbnQsXG4gIFBvbGljeUdhdGVDb21wb25lbnQsXG5dIGFzIGNvbnN0O1xuIl19
|