@uengage.io/platform-sdk 2.5.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.js +10 -2
- package/dist/auth/realtime-token.d.ts +18 -0
- package/dist/auth/realtime-token.js +46 -0
- package/dist/auth/upsell-token.d.ts +45 -0
- package/dist/auth/upsell-token.js +79 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/realtime/channel.d.ts +7 -0
- package/dist/realtime/channel.js +29 -0
- package/dist/realtime/connect.js +4 -2
- package/dist/realtime/index.d.ts +2 -1
- package/dist/realtime/index.js +7 -3
- package/dist/upsell/client.d.ts +1 -0
- package/dist/upsell/client.js +8 -3
- package/dist/upsell/schema.d.ts +7 -3
- package/dist/upsell/schema.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
# @uengage.io/platform-sdk
|
|
2
2
|
|
|
3
|
+
Backend-issued public/private suggestion tokens and outlet, brand or global admin tokens: [upsell token guide](../../services/upsell/TOKENS.md).
|
|
4
|
+
|
|
3
5
|
Client SDK for uEngage platform services. One factory (`createClient`) returns a `PlatformClient` exposing `business`, `audit`, `zones`, `wallet`, and `auth`. No singletons, no module-level state - each consumer constructs its own client with explicit config.
|
|
4
6
|
|
|
7
|
+
## Restricted realtime channels
|
|
8
|
+
|
|
9
|
+
Call `auth.mintRealtimeToken({ clientId, clientSecret, channel: 'delivery-updates',
|
|
10
|
+
expiresIn: 300, authBaseUrl })` on your backend after authorizing the current user.
|
|
11
|
+
The registered client needs `realtime.tokens:issue`. Return its
|
|
12
|
+
`{ token, expiresIn, channel }` result from your own non-cacheable token route.
|
|
13
|
+
On the frontend, supply the token through `realtime.connect({ getToken, env })`
|
|
14
|
+
and call `client.subscribe('delivery-updates', ...)`.
|
|
15
|
+
|
|
16
|
+
Names are case-sensitive identifiers, not paths or wildcards. Tokens permit exactly
|
|
17
|
+
one name, are valid for 60–900 seconds (300 by default), and cannot publish or call
|
|
18
|
+
other platform APIs. Minting does not create a publisher. See the
|
|
19
|
+
[complete integration and authorization guide](../../services/realtime/README.md).
|
|
20
|
+
|
|
5
21
|
## Quick start
|
|
6
22
|
|
|
7
23
|
```ts
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* the SDK itself — every helper takes parameters explicitly so multiple
|
|
5
5
|
* OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
|
|
6
6
|
*/
|
|
7
|
+
export { mintRealtimeToken, type MintRealtimeTokenInput, type RealtimeToken, } from './realtime-token';
|
|
8
|
+
export { mintUpsellToken, type MintUpsellTokenInput, type UpsellToken } from './upsell-token';
|
|
7
9
|
export { generatePKCE, type PkcePair } from './pkce';
|
|
8
10
|
export { createAuthorizeUrl, type AuthorizeUrlInput } from './authorize-url';
|
|
9
11
|
export { exchangeCode, parseTokenResponse, type ExchangeCodeInput, type TokenPair, } from './exchange-code';
|
|
@@ -12,6 +14,8 @@ export { verifyAccessToken } from './verify';
|
|
|
12
14
|
export { getIssuer, getExpiry } from './issuer';
|
|
13
15
|
export { loginWithPassword, type LoginWithPasswordInput } from './login';
|
|
14
16
|
export { requestOtp, verifyOtp, type RequestOtpInput, type RequestOtpResult, type VerifyOtpInput, } from './otp';
|
|
17
|
+
import { mintRealtimeToken } from './realtime-token';
|
|
18
|
+
import { mintUpsellToken } from './upsell-token';
|
|
15
19
|
import { generatePKCE } from './pkce';
|
|
16
20
|
import { createAuthorizeUrl } from './authorize-url';
|
|
17
21
|
import { exchangeCode } from './exchange-code';
|
|
@@ -29,6 +33,8 @@ import { requestOtp, verifyOtp } from './otp';
|
|
|
29
33
|
* sharing this object across clients is safe.
|
|
30
34
|
*/
|
|
31
35
|
export declare const auth: {
|
|
36
|
+
mintRealtimeToken: typeof mintRealtimeToken;
|
|
37
|
+
mintUpsellToken: typeof mintUpsellToken;
|
|
32
38
|
generatePKCE: typeof generatePKCE;
|
|
33
39
|
createAuthorizeUrl: typeof createAuthorizeUrl;
|
|
34
40
|
exchangeCode: typeof exchangeCode;
|
package/dist/auth/index.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.auth = exports.verifyOtp = exports.requestOtp = exports.loginWithPassword = exports.getExpiry = exports.getIssuer = exports.verifyAccessToken = exports.refresh = exports.parseTokenResponse = exports.exchangeCode = exports.createAuthorizeUrl = exports.generatePKCE = void 0;
|
|
3
|
+
exports.auth = exports.verifyOtp = exports.requestOtp = exports.loginWithPassword = exports.getExpiry = exports.getIssuer = exports.verifyAccessToken = exports.refresh = exports.parseTokenResponse = exports.exchangeCode = exports.createAuthorizeUrl = exports.generatePKCE = exports.mintUpsellToken = exports.mintRealtimeToken = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Auth namespace: helpers for OAuth2 flows against the platform's
|
|
6
6
|
* `/auth/business/*` surface. Consumers don't bake a `client_id` into
|
|
7
7
|
* the SDK itself — every helper takes parameters explicitly so multiple
|
|
8
8
|
* OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
|
|
9
9
|
*/
|
|
10
|
+
var realtime_token_1 = require("./realtime-token");
|
|
11
|
+
Object.defineProperty(exports, "mintRealtimeToken", { enumerable: true, get: function () { return realtime_token_1.mintRealtimeToken; } });
|
|
12
|
+
var upsell_token_1 = require("./upsell-token");
|
|
13
|
+
Object.defineProperty(exports, "mintUpsellToken", { enumerable: true, get: function () { return upsell_token_1.mintUpsellToken; } });
|
|
10
14
|
var pkce_1 = require("./pkce");
|
|
11
15
|
Object.defineProperty(exports, "generatePKCE", { enumerable: true, get: function () { return pkce_1.generatePKCE; } });
|
|
12
16
|
var authorize_url_1 = require("./authorize-url");
|
|
@@ -26,6 +30,8 @@ Object.defineProperty(exports, "loginWithPassword", { enumerable: true, get: fun
|
|
|
26
30
|
var otp_1 = require("./otp");
|
|
27
31
|
Object.defineProperty(exports, "requestOtp", { enumerable: true, get: function () { return otp_1.requestOtp; } });
|
|
28
32
|
Object.defineProperty(exports, "verifyOtp", { enumerable: true, get: function () { return otp_1.verifyOtp; } });
|
|
33
|
+
const realtime_token_2 = require("./realtime-token");
|
|
34
|
+
const upsell_token_2 = require("./upsell-token");
|
|
29
35
|
const pkce_2 = require("./pkce");
|
|
30
36
|
const authorize_url_2 = require("./authorize-url");
|
|
31
37
|
const exchange_code_2 = require("./exchange-code");
|
|
@@ -43,6 +49,8 @@ const otp_2 = require("./otp");
|
|
|
43
49
|
* sharing this object across clients is safe.
|
|
44
50
|
*/
|
|
45
51
|
exports.auth = {
|
|
52
|
+
mintRealtimeToken: realtime_token_2.mintRealtimeToken,
|
|
53
|
+
mintUpsellToken: upsell_token_2.mintUpsellToken,
|
|
46
54
|
generatePKCE: pkce_2.generatePKCE,
|
|
47
55
|
createAuthorizeUrl: authorize_url_2.createAuthorizeUrl,
|
|
48
56
|
exchangeCode: exchange_code_2.exchangeCode,
|
|
@@ -54,4 +62,4 @@ exports.auth = {
|
|
|
54
62
|
requestOtp: otp_2.requestOtp,
|
|
55
63
|
verifyOtp: otp_2.verifyOtp,
|
|
56
64
|
};
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNILG1EQUkwQjtBQUh4QixtSEFBQSxpQkFBaUIsT0FBQTtBQUluQiwrQ0FBOEY7QUFBckYsK0dBQUEsZUFBZSxPQUFBO0FBQ3hCLCtCQUFxRDtBQUE1QyxvR0FBQSxZQUFZLE9BQUE7QUFDckIsaURBQTZFO0FBQXBFLG1IQUFBLGtCQUFrQixPQUFBO0FBQzNCLGlEQUt5QjtBQUp2Qiw2R0FBQSxZQUFZLE9BQUE7QUFDWixtSEFBQSxrQkFBa0IsT0FBQTtBQUlwQixxQ0FBdUQ7QUFBOUMsa0dBQUEsT0FBTyxPQUFBO0FBQ2hCLG1DQUE2QztBQUFwQywyR0FBQSxpQkFBaUIsT0FBQTtBQUMxQixtQ0FBZ0Q7QUFBdkMsbUdBQUEsU0FBUyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBQzdCLGlDQUF5RTtBQUFoRSwwR0FBQSxpQkFBaUIsT0FBQTtBQUMxQiw2QkFNZTtBQUxiLGlHQUFBLFVBQVUsT0FBQTtBQUNWLGdHQUFBLFNBQVMsT0FBQTtBQU1YLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFDakQsaUNBQXNDO0FBQ3RDLG1EQUFxRDtBQUNyRCxtREFBK0M7QUFDL0MsdUNBQW9DO0FBQ3BDLHFDQUE2QztBQUM3QyxxQ0FBZ0Q7QUFDaEQsbUNBQTRDO0FBQzVDLCtCQUE4QztBQUU5Qzs7Ozs7OztHQU9HO0FBQ1UsUUFBQSxJQUFJLEdBQUc7SUFDbEIsaUJBQWlCLEVBQWpCLGtDQUFpQjtJQUNqQixlQUFlLEVBQWYsOEJBQWU7SUFDZixZQUFZLEVBQVosbUJBQVk7SUFDWixrQkFBa0IsRUFBbEIsa0NBQWtCO0lBQ2xCLFlBQVksRUFBWiw0QkFBWTtJQUNaLE9BQU8sRUFBUCxpQkFBTztJQUNQLGlCQUFpQixFQUFqQiwwQkFBaUI7SUFDakIsU0FBUyxFQUFULGtCQUFTO0lBQ1QsU0FBUyxFQUFULGtCQUFTO0lBQ1QsaUJBQWlCLEVBQWpCLHlCQUFpQjtJQUNqQixVQUFVLEVBQVYsZ0JBQVU7SUFDVixTQUFTLEVBQVQsZUFBUztDQUNWLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dGggbmFtZXNwYWNlOiBoZWxwZXJzIGZvciBPQXV0aDIgZmxvd3MgYWdhaW5zdCB0aGUgcGxhdGZvcm0nc1xuICogYC9hdXRoL2J1c2luZXNzLypgIHN1cmZhY2UuIENvbnN1bWVycyBkb24ndCBiYWtlIGEgYGNsaWVudF9pZGAgaW50b1xuICogdGhlIFNESyBpdHNlbGYg4oCUIGV2ZXJ5IGhlbHBlciB0YWtlcyBwYXJhbWV0ZXJzIGV4cGxpY2l0bHkgc28gbXVsdGlwbGVcbiAqIE9BdXRoIGNsaWVudHMgKGRhc2hib2FyZCwgbW9iaWxlLCBCRkZzKSBjYW4gc2hhcmUgb25lIFNESyBpbnN0YWxsLlxuICovXG5leHBvcnQge1xuICBtaW50UmVhbHRpbWVUb2tlbixcbiAgdHlwZSBNaW50UmVhbHRpbWVUb2tlbklucHV0LFxuICB0eXBlIFJlYWx0aW1lVG9rZW4sXG59IGZyb20gJy4vcmVhbHRpbWUtdG9rZW4nO1xuZXhwb3J0IHsgbWludFVwc2VsbFRva2VuLCB0eXBlIE1pbnRVcHNlbGxUb2tlbklucHV0LCB0eXBlIFVwc2VsbFRva2VuIH0gZnJvbSAnLi91cHNlbGwtdG9rZW4nO1xuZXhwb3J0IHsgZ2VuZXJhdGVQS0NFLCB0eXBlIFBrY2VQYWlyIH0gZnJvbSAnLi9wa2NlJztcbmV4cG9ydCB7IGNyZWF0ZUF1dGhvcml6ZVVybCwgdHlwZSBBdXRob3JpemVVcmxJbnB1dCB9IGZyb20gJy4vYXV0aG9yaXplLXVybCc7XG5leHBvcnQge1xuICBleGNoYW5nZUNvZGUsXG4gIHBhcnNlVG9rZW5SZXNwb25zZSxcbiAgdHlwZSBFeGNoYW5nZUNvZGVJbnB1dCxcbiAgdHlwZSBUb2tlblBhaXIsXG59IGZyb20gJy4vZXhjaGFuZ2UtY29kZSc7XG5leHBvcnQgeyByZWZyZXNoLCB0eXBlIFJlZnJlc2hJbnB1dCB9IGZyb20gJy4vcmVmcmVzaCc7XG5leHBvcnQgeyB2ZXJpZnlBY2Nlc3NUb2tlbiB9IGZyb20gJy4vdmVyaWZ5JztcbmV4cG9ydCB7IGdldElzc3VlciwgZ2V0RXhwaXJ5IH0gZnJvbSAnLi9pc3N1ZXInO1xuZXhwb3J0IHsgbG9naW5XaXRoUGFzc3dvcmQsIHR5cGUgTG9naW5XaXRoUGFzc3dvcmRJbnB1dCB9IGZyb20gJy4vbG9naW4nO1xuZXhwb3J0IHtcbiAgcmVxdWVzdE90cCxcbiAgdmVyaWZ5T3RwLFxuICB0eXBlIFJlcXVlc3RPdHBJbnB1dCxcbiAgdHlwZSBSZXF1ZXN0T3RwUmVzdWx0LFxuICB0eXBlIFZlcmlmeU90cElucHV0LFxufSBmcm9tICcuL290cCc7XG5cbmltcG9ydCB7IG1pbnRSZWFsdGltZVRva2VuIH0gZnJvbSAnLi9yZWFsdGltZS10b2tlbic7XG5pbXBvcnQgeyBtaW50VXBzZWxsVG9rZW4gfSBmcm9tICcuL3Vwc2VsbC10b2tlbic7XG5pbXBvcnQgeyBnZW5lcmF0ZVBLQ0UgfSBmcm9tICcuL3BrY2UnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aG9yaXplVXJsIH0gZnJvbSAnLi9hdXRob3JpemUtdXJsJztcbmltcG9ydCB7IGV4Y2hhbmdlQ29kZSB9IGZyb20gJy4vZXhjaGFuZ2UtY29kZSc7XG5pbXBvcnQgeyByZWZyZXNoIH0gZnJvbSAnLi9yZWZyZXNoJztcbmltcG9ydCB7IHZlcmlmeUFjY2Vzc1Rva2VuIH0gZnJvbSAnLi92ZXJpZnknO1xuaW1wb3J0IHsgZ2V0SXNzdWVyLCBnZXRFeHBpcnkgfSBmcm9tICcuL2lzc3Vlcic7XG5pbXBvcnQgeyBsb2dpbldpdGhQYXNzd29yZCB9IGZyb20gJy4vbG9naW4nO1xuaW1wb3J0IHsgcmVxdWVzdE90cCwgdmVyaWZ5T3RwIH0gZnJvbSAnLi9vdHAnO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIG5hbWVzcGFjZTogc3RhdGVsZXNzIGhlbHBlcnMgZ3JvdXBlZCB1bmRlciBvbmUgc3ltYm9sLlxuICogSWRlbnRpY2FsIHRvIHRoZSBuYW1lZCBleHBvcnRzIGFib3ZlOyBpbXBvcnRpbmcgdGhlIG5hbWVzcGFjZSBsZXRzXG4gKiBjYWxsZXJzIHdyaXRlIGBjbGllbnQuYXV0aC5yZWZyZXNoKC4uLilgIChpdCdzIGV4cG9zZWQgb24gdGhlXG4gKiBgUGxhdGZvcm1DbGllbnRgIGluc3RhbmNlIHJldHVybmVkIGJ5IGBjcmVhdGVDbGllbnQoLi4uKWApIG9yXG4gKiBgYXV0aC5nZW5lcmF0ZVBLQ0UoKWAgZnJvbSBhIHRvcC1sZXZlbCBpbXBvcnQuIE5vIG11dGFibGUgc3RhdGUsIHNvXG4gKiBzaGFyaW5nIHRoaXMgb2JqZWN0IGFjcm9zcyBjbGllbnRzIGlzIHNhZmUuXG4gKi9cbmV4cG9ydCBjb25zdCBhdXRoID0ge1xuICBtaW50UmVhbHRpbWVUb2tlbixcbiAgbWludFVwc2VsbFRva2VuLFxuICBnZW5lcmF0ZVBLQ0UsXG4gIGNyZWF0ZUF1dGhvcml6ZVVybCxcbiAgZXhjaGFuZ2VDb2RlLFxuICByZWZyZXNoLFxuICB2ZXJpZnlBY2Nlc3NUb2tlbixcbiAgZ2V0SXNzdWVyLFxuICBnZXRFeHBpcnksXG4gIGxvZ2luV2l0aFBhc3N3b3JkLFxuICByZXF1ZXN0T3RwLFxuICB2ZXJpZnlPdHAsXG59O1xuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface MintRealtimeTokenInput {
|
|
2
|
+
clientId: string;
|
|
3
|
+
clientSecret: string;
|
|
4
|
+
channel: string;
|
|
5
|
+
/** 60-900 seconds; defaults to 300. No refresh token is issued. */
|
|
6
|
+
expiresIn?: number;
|
|
7
|
+
/** Opaque user identifier (1-128 printable ASCII characters). Attribution only. */
|
|
8
|
+
onBehalfOf?: string;
|
|
9
|
+
authBaseUrl?: string;
|
|
10
|
+
fetchFn?: typeof fetch;
|
|
11
|
+
}
|
|
12
|
+
export interface RealtimeToken {
|
|
13
|
+
token: string;
|
|
14
|
+
expiresIn: number;
|
|
15
|
+
channel: string;
|
|
16
|
+
}
|
|
17
|
+
/** Backend only. Check the caller's entitlement to this channel before minting. */
|
|
18
|
+
export declare function mintRealtimeToken(input: MintRealtimeTokenInput): Promise<RealtimeToken>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mintRealtimeToken = mintRealtimeToken;
|
|
4
|
+
const config_1 = require("../config");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const channel_1 = require("../realtime/channel");
|
|
7
|
+
/** Backend only. Check the caller's entitlement to this channel before minting. */
|
|
8
|
+
async function mintRealtimeToken(input) {
|
|
9
|
+
if (!input.clientId || !input.clientSecret)
|
|
10
|
+
throw new errors_1.ConfigError('Backend client credentials are required');
|
|
11
|
+
if (!(0, channel_1.isChannelName)(input.channel))
|
|
12
|
+
throw new errors_1.ConfigError('Invalid channel name');
|
|
13
|
+
if (input.onBehalfOf !== undefined && !(0, channel_1.isAttributionId)(input.onBehalfOf)) {
|
|
14
|
+
throw new errors_1.ConfigError('onBehalfOf must be a printable ASCII identifier of 1-128 characters');
|
|
15
|
+
}
|
|
16
|
+
const expiresIn = input.expiresIn ?? 300;
|
|
17
|
+
if (!Number.isInteger(expiresIn) || expiresIn < 60 || expiresIn > 900) {
|
|
18
|
+
throw new errors_1.ConfigError('expiresIn must be an integer between 60 and 900 seconds');
|
|
19
|
+
}
|
|
20
|
+
const response = await (input.fetchFn ?? globalThis.fetch)(`${(input.authBaseUrl ?? `${config_1.DEFAULT_BASE_URL}/auth/business`).replace(/\/$/, '')}/oauth/token`, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: {
|
|
23
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
24
|
+
authorization: `Basic ${Buffer.from(`${input.clientId}:${input.clientSecret}`).toString('base64')}`,
|
|
25
|
+
},
|
|
26
|
+
body: new URLSearchParams({
|
|
27
|
+
grant_type: 'urn:uengage:params:oauth:grant-type:realtime-channel',
|
|
28
|
+
channel: input.channel,
|
|
29
|
+
expires_in: String(expiresIn),
|
|
30
|
+
...(input.onBehalfOf === undefined ? {} : { on_behalf_of: input.onBehalfOf }),
|
|
31
|
+
}).toString(),
|
|
32
|
+
});
|
|
33
|
+
if (!response.ok)
|
|
34
|
+
throw new errors_1.AuthenticationError(`Realtime token mint failed: HTTP ${response.status}`);
|
|
35
|
+
const body = (await response.json());
|
|
36
|
+
if (typeof body.access_token !== 'string' ||
|
|
37
|
+
!body.access_token ||
|
|
38
|
+
body.channel !== input.channel ||
|
|
39
|
+
!Number.isInteger(body.expires_in) ||
|
|
40
|
+
Number(body.expires_in) < 60 ||
|
|
41
|
+
Number(body.expires_in) > expiresIn) {
|
|
42
|
+
throw new errors_1.AuthenticationError('Invalid realtime token response');
|
|
43
|
+
}
|
|
44
|
+
return { token: body.access_token, expiresIn: Number(body.expires_in), channel: input.channel };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9yZWFsdGltZS10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNCQSw4Q0F5Q0M7QUEvREQsc0NBQTZDO0FBQzdDLHNDQUE2RDtBQUM3RCxpREFBcUU7QUFtQnJFLG1GQUFtRjtBQUM1RSxLQUFLLFVBQVUsaUJBQWlCLENBQUMsS0FBNkI7SUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtRQUN4QyxNQUFNLElBQUksb0JBQVcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxJQUFBLHVCQUFhLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUFFLE1BQU0sSUFBSSxvQkFBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDakYsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUEseUJBQWUsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxNQUFNLElBQUksb0JBQVcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUksb0JBQVcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQ3hELEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEdBQUcseUJBQWdCLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsY0FBYyxFQUM5RjtRQUNFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLG1DQUFtQztZQUNuRCxhQUFhLEVBQUUsU0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7U0FDcEc7UUFDRCxJQUFJLEVBQUUsSUFBSSxlQUFlLENBQUM7WUFDeEIsVUFBVSxFQUFFLHNEQUFzRDtZQUNsRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDN0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUM5RSxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQ2QsQ0FDRixDQUFDO0lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2QsTUFBTSxJQUFJLDRCQUFtQixDQUFDLG9DQUFvQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RixNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUE0QixDQUFDO0lBQ2hFLElBQ0UsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVE7UUFDckMsQ0FBQyxJQUFJLENBQUMsWUFBWTtRQUNsQixJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPO1FBQzlCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsRUFDbkMsQ0FBQztRQUNELE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9CQVNFX1VSTCB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yLCBDb25maWdFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBpc0NoYW5uZWxOYW1lLCBpc0F0dHJpYnV0aW9uSWQgfSBmcm9tICcuLi9yZWFsdGltZS9jaGFubmVsJztcblxuZXhwb3J0IGludGVyZmFjZSBNaW50UmVhbHRpbWVUb2tlbklucHV0IHtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgY2xpZW50U2VjcmV0OiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgLyoqIDYwLTkwMCBzZWNvbmRzOyBkZWZhdWx0cyB0byAzMDAuIE5vIHJlZnJlc2ggdG9rZW4gaXMgaXNzdWVkLiAqL1xuICBleHBpcmVzSW4/OiBudW1iZXI7XG4gIC8qKiBPcGFxdWUgdXNlciBpZGVudGlmaWVyICgxLTEyOCBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycykuIEF0dHJpYnV0aW9uIG9ubHkuICovXG4gIG9uQmVoYWxmT2Y/OiBzdHJpbmc7XG4gIGF1dGhCYXNlVXJsPzogc3RyaW5nO1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xufVxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZVRva2VuIHtcbiAgdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIGNoYW5uZWw6IHN0cmluZztcbn1cblxuLyoqIEJhY2tlbmQgb25seS4gQ2hlY2sgdGhlIGNhbGxlcidzIGVudGl0bGVtZW50IHRvIHRoaXMgY2hhbm5lbCBiZWZvcmUgbWludGluZy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtaW50UmVhbHRpbWVUb2tlbihpbnB1dDogTWludFJlYWx0aW1lVG9rZW5JbnB1dCk6IFByb21pc2U8UmVhbHRpbWVUb2tlbj4ge1xuICBpZiAoIWlucHV0LmNsaWVudElkIHx8ICFpbnB1dC5jbGllbnRTZWNyZXQpXG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdCYWNrZW5kIGNsaWVudCBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQnKTtcbiAgaWYgKCFpc0NoYW5uZWxOYW1lKGlucHV0LmNoYW5uZWwpKSB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoJ0ludmFsaWQgY2hhbm5lbCBuYW1lJyk7XG4gIGlmIChpbnB1dC5vbkJlaGFsZk9mICE9PSB1bmRlZmluZWQgJiYgIWlzQXR0cmlidXRpb25JZChpbnB1dC5vbkJlaGFsZk9mKSkge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcignb25CZWhhbGZPZiBtdXN0IGJlIGEgcHJpbnRhYmxlIEFTQ0lJIGlkZW50aWZpZXIgb2YgMS0xMjggY2hhcmFjdGVycycpO1xuICB9XG4gIGNvbnN0IGV4cGlyZXNJbiA9IGlucHV0LmV4cGlyZXNJbiA/PyAzMDA7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihleHBpcmVzSW4pIHx8IGV4cGlyZXNJbiA8IDYwIHx8IGV4cGlyZXNJbiA+IDkwMCkge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcignZXhwaXJlc0luIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDYwIGFuZCA5MDAgc2Vjb25kcycpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKGlucHV0LmZldGNoRm4gPz8gZ2xvYmFsVGhpcy5mZXRjaCkoXG4gICAgYCR7KGlucHV0LmF1dGhCYXNlVXJsID8/IGAke0RFRkFVTFRfQkFTRV9VUkx9L2F1dGgvYnVzaW5lc3NgKS5yZXBsYWNlKC9cXC8kLywgJycpfS9vYXV0aC90b2tlbmAsXG4gICAge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7aW5wdXQuY2xpZW50SWR9OiR7aW5wdXQuY2xpZW50U2VjcmV0fWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBncmFudF90eXBlOiAndXJuOnVlbmdhZ2U6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6cmVhbHRpbWUtY2hhbm5lbCcsXG4gICAgICAgIGNoYW5uZWw6IGlucHV0LmNoYW5uZWwsXG4gICAgICAgIGV4cGlyZXNfaW46IFN0cmluZyhleHBpcmVzSW4pLFxuICAgICAgICAuLi4oaW5wdXQub25CZWhhbGZPZiA9PT0gdW5kZWZpbmVkID8ge30gOiB7IG9uX2JlaGFsZl9vZjogaW5wdXQub25CZWhhbGZPZiB9KSxcbiAgICAgIH0pLnRvU3RyaW5nKCksXG4gICAgfSxcbiAgKTtcbiAgaWYgKCFyZXNwb25zZS5vaylcbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihgUmVhbHRpbWUgdG9rZW4gbWludCBmYWlsZWQ6IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKFxuICAgIHR5cGVvZiBib2R5LmFjY2Vzc190b2tlbiAhPT0gJ3N0cmluZycgfHxcbiAgICAhYm9keS5hY2Nlc3NfdG9rZW4gfHxcbiAgICBib2R5LmNoYW5uZWwgIT09IGlucHV0LmNoYW5uZWwgfHxcbiAgICAhTnVtYmVyLmlzSW50ZWdlcihib2R5LmV4cGlyZXNfaW4pIHx8XG4gICAgTnVtYmVyKGJvZHkuZXhwaXJlc19pbikgPCA2MCB8fFxuICAgIE51bWJlcihib2R5LmV4cGlyZXNfaW4pID4gZXhwaXJlc0luXG4gICkge1xuICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKCdJbnZhbGlkIHJlYWx0aW1lIHRva2VuIHJlc3BvbnNlJyk7XG4gIH1cbiAgcmV0dXJuIHsgdG9rZW46IGJvZHkuYWNjZXNzX3Rva2VuLCBleHBpcmVzSW46IE51bWJlcihib2R5LmV4cGlyZXNfaW4pLCBjaGFubmVsOiBpbnB1dC5jaGFubmVsIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
type UpsellOutlet = {
|
|
2
|
+
parentId: number;
|
|
3
|
+
businessId: number;
|
|
4
|
+
};
|
|
5
|
+
export type MintUpsellTokenInput = {
|
|
6
|
+
clientId: string;
|
|
7
|
+
clientSecret: string;
|
|
8
|
+
/** 60-900 seconds; defaults to 300. */
|
|
9
|
+
expiresIn?: number;
|
|
10
|
+
authBaseUrl?: string;
|
|
11
|
+
fetchFn?: typeof fetch;
|
|
12
|
+
} & ((UpsellOutlet & {
|
|
13
|
+
access: 'public';
|
|
14
|
+
contactMappingId?: never;
|
|
15
|
+
adminScope?: never;
|
|
16
|
+
}) | (UpsellOutlet & {
|
|
17
|
+
access: 'private';
|
|
18
|
+
contactMappingId: number;
|
|
19
|
+
adminScope?: never;
|
|
20
|
+
}) | ({
|
|
21
|
+
access: 'admin';
|
|
22
|
+
contactMappingId?: never;
|
|
23
|
+
} & ((UpsellOutlet & {
|
|
24
|
+
adminScope?: 'outlet';
|
|
25
|
+
}) | {
|
|
26
|
+
adminScope: 'brand';
|
|
27
|
+
parentId: number;
|
|
28
|
+
businessId?: never;
|
|
29
|
+
} | {
|
|
30
|
+
adminScope: 'global';
|
|
31
|
+
parentId?: never;
|
|
32
|
+
businessId?: never;
|
|
33
|
+
})));
|
|
34
|
+
export interface UpsellToken {
|
|
35
|
+
token: string;
|
|
36
|
+
expiresIn: number;
|
|
37
|
+
parentId?: number;
|
|
38
|
+
businessId?: number;
|
|
39
|
+
access: 'public' | 'private' | 'admin';
|
|
40
|
+
contactMappingId?: number;
|
|
41
|
+
adminScope?: 'outlet' | 'brand' | 'global';
|
|
42
|
+
}
|
|
43
|
+
/** Backend only: verify the caller's entitlement to the outlet and mapping first. No token cache. */
|
|
44
|
+
export declare function mintUpsellToken(input: MintUpsellTokenInput): Promise<UpsellToken>;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mintUpsellToken = mintUpsellToken;
|
|
4
|
+
const config_1 = require("../config");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
/** Backend only: verify the caller's entitlement to the outlet and mapping first. No token cache. */
|
|
7
|
+
async function mintUpsellToken(input) {
|
|
8
|
+
const validId = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value > 0;
|
|
9
|
+
const expiresIn = input.expiresIn ?? 300;
|
|
10
|
+
if (!input.clientId || !input.clientSecret)
|
|
11
|
+
throw new errors_1.ConfigError('Backend client credentials are required');
|
|
12
|
+
const adminScope = input.access === 'admin' ? (input.adminScope ?? 'outlet') : undefined;
|
|
13
|
+
if ((input.access !== 'admin' && input.adminScope !== undefined) ||
|
|
14
|
+
(input.access === 'admin' && !['outlet', 'brand', 'global'].includes(adminScope)) ||
|
|
15
|
+
(adminScope === 'global'
|
|
16
|
+
? input.parentId !== undefined || input.businessId !== undefined
|
|
17
|
+
: !validId(input.parentId)) ||
|
|
18
|
+
(adminScope === 'global' || adminScope === 'brand'
|
|
19
|
+
? input.businessId !== undefined
|
|
20
|
+
: !validId(input.businessId))) {
|
|
21
|
+
throw new errors_1.ConfigError('Invalid tenant IDs for the requested upsell/admin scope');
|
|
22
|
+
}
|
|
23
|
+
if ((input.access !== 'public' && input.access !== 'private' && input.access !== 'admin') ||
|
|
24
|
+
(input.access !== 'private' && input.contactMappingId !== undefined) ||
|
|
25
|
+
(input.access === 'private' && !validId(input.contactMappingId))) {
|
|
26
|
+
throw new errors_1.ConfigError('Use public/admin access without a contactMappingId or private access with a positive contactMappingId');
|
|
27
|
+
}
|
|
28
|
+
if (!Number.isInteger(expiresIn) || expiresIn < 60 || expiresIn > 900)
|
|
29
|
+
throw new errors_1.ConfigError('expiresIn must be an integer between 60 and 900 seconds');
|
|
30
|
+
const response = await (input.fetchFn ?? globalThis.fetch)(`${(input.authBaseUrl ?? `${config_1.DEFAULT_BASE_URL}/auth/business`).replace(/\/$/, '')}/oauth/token`, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
34
|
+
authorization: `Basic ${Buffer.from(`${input.clientId}:${input.clientSecret}`).toString('base64')}`,
|
|
35
|
+
},
|
|
36
|
+
body: new URLSearchParams({
|
|
37
|
+
grant_type: 'urn:uengage:params:oauth:grant-type:upsell',
|
|
38
|
+
...(input.parentId === undefined ? {} : { parent_id: String(input.parentId) }),
|
|
39
|
+
...(input.businessId === undefined ? {} : { business_id: String(input.businessId) }),
|
|
40
|
+
...(adminScope === undefined ? {} : { admin_scope: adminScope }),
|
|
41
|
+
access: input.access,
|
|
42
|
+
expires_in: String(expiresIn),
|
|
43
|
+
...(input.access === 'private'
|
|
44
|
+
? { contact_mapping_id: String(input.contactMappingId) }
|
|
45
|
+
: {}),
|
|
46
|
+
}).toString(),
|
|
47
|
+
});
|
|
48
|
+
if (!response.ok)
|
|
49
|
+
throw new errors_1.AuthenticationError(`Upsell token mint failed: HTTP ${response.status}`);
|
|
50
|
+
const expectedScope = input.access === 'admin'
|
|
51
|
+
? 'upsell.placements:read upsell.placements:write' +
|
|
52
|
+
(adminScope === 'outlet' ? '' : ' upsell.touchpoints:read upsell.touchpoints:write')
|
|
53
|
+
: `upsell.suggestions:${input.access}`;
|
|
54
|
+
const body = (await response.json());
|
|
55
|
+
if (typeof body.access_token !== 'string' ||
|
|
56
|
+
!body.access_token ||
|
|
57
|
+
body.token_type !== 'Bearer' ||
|
|
58
|
+
body.parent_id !== input.parentId ||
|
|
59
|
+
body.business_id !== input.businessId ||
|
|
60
|
+
body.access !== input.access ||
|
|
61
|
+
body.contact_mapping_id !== input.contactMappingId ||
|
|
62
|
+
body.admin_scope !== adminScope ||
|
|
63
|
+
body.scope !== expectedScope ||
|
|
64
|
+
!Number.isInteger(body.expires_in) ||
|
|
65
|
+
Number(body.expires_in) < 60 ||
|
|
66
|
+
Number(body.expires_in) > expiresIn) {
|
|
67
|
+
throw new errors_1.AuthenticationError('Invalid upsell token response');
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
token: body.access_token,
|
|
71
|
+
expiresIn: Number(body.expires_in),
|
|
72
|
+
parentId: input.parentId,
|
|
73
|
+
businessId: input.businessId,
|
|
74
|
+
access: input.access,
|
|
75
|
+
...(adminScope === undefined ? {} : { adminScope }),
|
|
76
|
+
...(input.access === 'private' ? { contactMappingId: input.contactMappingId } : {}),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBzZWxsLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvdXBzZWxsLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0JBLDBDQW9GQztBQW5IRCxzQ0FBNkM7QUFDN0Msc0NBQTZEO0FBNkI3RCxxR0FBcUc7QUFDOUYsS0FBSyxVQUFVLGVBQWUsQ0FBQyxLQUEyQjtJQUMvRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQ2pDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDeEUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUM7SUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtRQUN4QyxNQUFNLElBQUksb0JBQVcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN6RixJQUNFLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUM7UUFDNUQsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVyxDQUFDLENBQUM7UUFDbEYsQ0FBQyxVQUFVLEtBQUssUUFBUTtZQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTO1lBQ2hFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxPQUFPO1lBQ2hELENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVM7WUFDaEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUMvQixDQUFDO1FBQ0QsTUFBTSxJQUFJLG9CQUFXLENBQUMseURBQXlELENBQUMsQ0FBQztJQUNuRixDQUFDO0lBQ0QsSUFDRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDO1FBQ3JGLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsQ0FBQztRQUNwRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQ2hFLENBQUM7UUFDRCxNQUFNLElBQUksb0JBQVcsQ0FDbkIsdUdBQXVHLENBQ3hHLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsR0FBRztRQUNuRSxNQUFNLElBQUksb0JBQVcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FDeEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksR0FBRyx5QkFBZ0IsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQzlGO1FBQ0UsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDUCxjQUFjLEVBQUUsbUNBQW1DO1lBQ25ELGFBQWEsRUFBRSxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtTQUNwRztRQUNELElBQUksRUFBRSxJQUFJLGVBQWUsQ0FBQztZQUN4QixVQUFVLEVBQUUsNENBQTRDO1lBQ3hELEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNwRixHQUFHLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUNoRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDN0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUztnQkFDNUIsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUN4RCxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ1IsQ0FBQyxDQUFDLFFBQVEsRUFBRTtLQUNkLENBQ0YsQ0FBQztJQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNkLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyxrQ0FBa0MsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDckYsTUFBTSxhQUFhLEdBQ2pCLEtBQUssQ0FBQyxNQUFNLEtBQUssT0FBTztRQUN0QixDQUFDLENBQUMsZ0RBQWdEO1lBQ2hELENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxtREFBbUQsQ0FBQztRQUN0RixDQUFDLENBQUMsc0JBQXNCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUE0QixDQUFDO0lBQ2hFLElBQ0UsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVE7UUFDckMsQ0FBQyxJQUFJLENBQUMsWUFBWTtRQUNsQixJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVE7UUFDNUIsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsUUFBUTtRQUNqQyxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxVQUFVO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFDNUIsSUFBSSxDQUFDLGtCQUFrQixLQUFLLEtBQUssQ0FBQyxnQkFBZ0I7UUFDbEQsSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVO1FBQy9CLElBQUksQ0FBQyxLQUFLLEtBQUssYUFBYTtRQUM1QixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLEVBQ25DLENBQUM7UUFDRCxNQUFNLElBQUksNEJBQW1CLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsT0FBTztRQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtRQUN4QixTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNuRCxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNwRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFRkFVTFRfQkFTRV9VUkwgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciwgQ29uZmlnRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG50eXBlIFVwc2VsbE91dGxldCA9IHsgcGFyZW50SWQ6IG51bWJlcjsgYnVzaW5lc3NJZDogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBNaW50VXBzZWxsVG9rZW5JbnB1dCA9IHtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgY2xpZW50U2VjcmV0OiBzdHJpbmc7XG4gIC8qKiA2MC05MDAgc2Vjb25kczsgZGVmYXVsdHMgdG8gMzAwLiAqL1xuICBleHBpcmVzSW4/OiBudW1iZXI7XG4gIGF1dGhCYXNlVXJsPzogc3RyaW5nO1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xufSAmIChcbiAgfCAoVXBzZWxsT3V0bGV0ICYgeyBhY2Nlc3M6ICdwdWJsaWMnOyBjb250YWN0TWFwcGluZ0lkPzogbmV2ZXI7IGFkbWluU2NvcGU/OiBuZXZlciB9KVxuICB8IChVcHNlbGxPdXRsZXQgJiB7IGFjY2VzczogJ3ByaXZhdGUnOyBjb250YWN0TWFwcGluZ0lkOiBudW1iZXI7IGFkbWluU2NvcGU/OiBuZXZlciB9KVxuICB8ICh7IGFjY2VzczogJ2FkbWluJzsgY29udGFjdE1hcHBpbmdJZD86IG5ldmVyIH0gJiAoXG4gICAgICB8IChVcHNlbGxPdXRsZXQgJiB7IGFkbWluU2NvcGU/OiAnb3V0bGV0JyB9KVxuICAgICAgfCB7IGFkbWluU2NvcGU6ICdicmFuZCc7IHBhcmVudElkOiBudW1iZXI7IGJ1c2luZXNzSWQ/OiBuZXZlciB9XG4gICAgICB8IHsgYWRtaW5TY29wZTogJ2dsb2JhbCc7IHBhcmVudElkPzogbmV2ZXI7IGJ1c2luZXNzSWQ/OiBuZXZlciB9XG4gICAgKSlcbik7XG5leHBvcnQgaW50ZXJmYWNlIFVwc2VsbFRva2VuIHtcbiAgdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIHBhcmVudElkPzogbnVtYmVyO1xuICBidXNpbmVzc0lkPzogbnVtYmVyO1xuICBhY2Nlc3M6ICdwdWJsaWMnIHwgJ3ByaXZhdGUnIHwgJ2FkbWluJztcbiAgY29udGFjdE1hcHBpbmdJZD86IG51bWJlcjtcbiAgYWRtaW5TY29wZT86ICdvdXRsZXQnIHwgJ2JyYW5kJyB8ICdnbG9iYWwnO1xufVxuXG4vKiogQmFja2VuZCBvbmx5OiB2ZXJpZnkgdGhlIGNhbGxlcidzIGVudGl0bGVtZW50IHRvIHRoZSBvdXRsZXQgYW5kIG1hcHBpbmcgZmlyc3QuIE5vIHRva2VuIGNhY2hlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1pbnRVcHNlbGxUb2tlbihpbnB1dDogTWludFVwc2VsbFRva2VuSW5wdXQpOiBQcm9taXNlPFVwc2VsbFRva2VuPiB7XG4gIGNvbnN0IHZhbGlkSWQgPSAodmFsdWU6IHVua25vd24pID0+XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPiAwO1xuICBjb25zdCBleHBpcmVzSW4gPSBpbnB1dC5leHBpcmVzSW4gPz8gMzAwO1xuICBpZiAoIWlucHV0LmNsaWVudElkIHx8ICFpbnB1dC5jbGllbnRTZWNyZXQpXG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdCYWNrZW5kIGNsaWVudCBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQnKTtcbiAgY29uc3QgYWRtaW5TY29wZSA9IGlucHV0LmFjY2VzcyA9PT0gJ2FkbWluJyA/IChpbnB1dC5hZG1pblNjb3BlID8/ICdvdXRsZXQnKSA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIChpbnB1dC5hY2Nlc3MgIT09ICdhZG1pbicgJiYgaW5wdXQuYWRtaW5TY29wZSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgIChpbnB1dC5hY2Nlc3MgPT09ICdhZG1pbicgJiYgIVsnb3V0bGV0JywgJ2JyYW5kJywgJ2dsb2JhbCddLmluY2x1ZGVzKGFkbWluU2NvcGUhKSkgfHxcbiAgICAoYWRtaW5TY29wZSA9PT0gJ2dsb2JhbCdcbiAgICAgID8gaW5wdXQucGFyZW50SWQgIT09IHVuZGVmaW5lZCB8fCBpbnB1dC5idXNpbmVzc0lkICE9PSB1bmRlZmluZWRcbiAgICAgIDogIXZhbGlkSWQoaW5wdXQucGFyZW50SWQpKSB8fFxuICAgIChhZG1pblNjb3BlID09PSAnZ2xvYmFsJyB8fCBhZG1pblNjb3BlID09PSAnYnJhbmQnXG4gICAgICA/IGlucHV0LmJ1c2luZXNzSWQgIT09IHVuZGVmaW5lZFxuICAgICAgOiAhdmFsaWRJZChpbnB1dC5idXNpbmVzc0lkKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdJbnZhbGlkIHRlbmFudCBJRHMgZm9yIHRoZSByZXF1ZXN0ZWQgdXBzZWxsL2FkbWluIHNjb3BlJyk7XG4gIH1cbiAgaWYgKFxuICAgIChpbnB1dC5hY2Nlc3MgIT09ICdwdWJsaWMnICYmIGlucHV0LmFjY2VzcyAhPT0gJ3ByaXZhdGUnICYmIGlucHV0LmFjY2VzcyAhPT0gJ2FkbWluJykgfHxcbiAgICAoaW5wdXQuYWNjZXNzICE9PSAncHJpdmF0ZScgJiYgaW5wdXQuY29udGFjdE1hcHBpbmdJZCAhPT0gdW5kZWZpbmVkKSB8fFxuICAgIChpbnB1dC5hY2Nlc3MgPT09ICdwcml2YXRlJyAmJiAhdmFsaWRJZChpbnB1dC5jb250YWN0TWFwcGluZ0lkKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgJ1VzZSBwdWJsaWMvYWRtaW4gYWNjZXNzIHdpdGhvdXQgYSBjb250YWN0TWFwcGluZ0lkIG9yIHByaXZhdGUgYWNjZXNzIHdpdGggYSBwb3NpdGl2ZSBjb250YWN0TWFwcGluZ0lkJyxcbiAgICApO1xuICB9XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihleHBpcmVzSW4pIHx8IGV4cGlyZXNJbiA8IDYwIHx8IGV4cGlyZXNJbiA+IDkwMClcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoJ2V4cGlyZXNJbiBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiA2MCBhbmQgOTAwIHNlY29uZHMnKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoaW5wdXQuZmV0Y2hGbiA/PyBnbG9iYWxUaGlzLmZldGNoKShcbiAgICBgJHsoaW5wdXQuYXV0aEJhc2VVcmwgPz8gYCR7REVGQVVMVF9CQVNFX1VSTH0vYXV0aC9idXNpbmVzc2ApLnJlcGxhY2UoL1xcLyQvLCAnJyl9L29hdXRoL3Rva2VuYCxcbiAgICB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtpbnB1dC5jbGllbnRJZH06JHtpbnB1dC5jbGllbnRTZWNyZXR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICB9LFxuICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGdyYW50X3R5cGU6ICd1cm46dWVuZ2FnZTpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTp1cHNlbGwnLFxuICAgICAgICAuLi4oaW5wdXQucGFyZW50SWQgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBwYXJlbnRfaWQ6IFN0cmluZyhpbnB1dC5wYXJlbnRJZCkgfSksXG4gICAgICAgIC4uLihpbnB1dC5idXNpbmVzc0lkID09PSB1bmRlZmluZWQgPyB7fSA6IHsgYnVzaW5lc3NfaWQ6IFN0cmluZyhpbnB1dC5idXNpbmVzc0lkKSB9KSxcbiAgICAgICAgLi4uKGFkbWluU2NvcGUgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBhZG1pbl9zY29wZTogYWRtaW5TY29wZSB9KSxcbiAgICAgICAgYWNjZXNzOiBpbnB1dC5hY2Nlc3MsXG4gICAgICAgIGV4cGlyZXNfaW46IFN0cmluZyhleHBpcmVzSW4pLFxuICAgICAgICAuLi4oaW5wdXQuYWNjZXNzID09PSAncHJpdmF0ZSdcbiAgICAgICAgICA/IHsgY29udGFjdF9tYXBwaW5nX2lkOiBTdHJpbmcoaW5wdXQuY29udGFjdE1hcHBpbmdJZCkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSkudG9TdHJpbmcoKSxcbiAgICB9LFxuICApO1xuICBpZiAoIXJlc3BvbnNlLm9rKVxuICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKGBVcHNlbGwgdG9rZW4gbWludCBmYWlsZWQ6IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIGNvbnN0IGV4cGVjdGVkU2NvcGUgPVxuICAgIGlucHV0LmFjY2VzcyA9PT0gJ2FkbWluJ1xuICAgICAgPyAndXBzZWxsLnBsYWNlbWVudHM6cmVhZCB1cHNlbGwucGxhY2VtZW50czp3cml0ZScgK1xuICAgICAgICAoYWRtaW5TY29wZSA9PT0gJ291dGxldCcgPyAnJyA6ICcgdXBzZWxsLnRvdWNocG9pbnRzOnJlYWQgdXBzZWxsLnRvdWNocG9pbnRzOndyaXRlJylcbiAgICAgIDogYHVwc2VsbC5zdWdnZXN0aW9uczoke2lucHV0LmFjY2Vzc31gO1xuICBjb25zdCBib2R5ID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmIChcbiAgICB0eXBlb2YgYm9keS5hY2Nlc3NfdG9rZW4gIT09ICdzdHJpbmcnIHx8XG4gICAgIWJvZHkuYWNjZXNzX3Rva2VuIHx8XG4gICAgYm9keS50b2tlbl90eXBlICE9PSAnQmVhcmVyJyB8fFxuICAgIGJvZHkucGFyZW50X2lkICE9PSBpbnB1dC5wYXJlbnRJZCB8fFxuICAgIGJvZHkuYnVzaW5lc3NfaWQgIT09IGlucHV0LmJ1c2luZXNzSWQgfHxcbiAgICBib2R5LmFjY2VzcyAhPT0gaW5wdXQuYWNjZXNzIHx8XG4gICAgYm9keS5jb250YWN0X21hcHBpbmdfaWQgIT09IGlucHV0LmNvbnRhY3RNYXBwaW5nSWQgfHxcbiAgICBib2R5LmFkbWluX3Njb3BlICE9PSBhZG1pblNjb3BlIHx8XG4gICAgYm9keS5zY29wZSAhPT0gZXhwZWN0ZWRTY29wZSB8fFxuICAgICFOdW1iZXIuaXNJbnRlZ2VyKGJvZHkuZXhwaXJlc19pbikgfHxcbiAgICBOdW1iZXIoYm9keS5leHBpcmVzX2luKSA8IDYwIHx8XG4gICAgTnVtYmVyKGJvZHkuZXhwaXJlc19pbikgPiBleHBpcmVzSW5cbiAgKSB7XG4gICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoJ0ludmFsaWQgdXBzZWxsIHRva2VuIHJlc3BvbnNlJyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogYm9keS5hY2Nlc3NfdG9rZW4sXG4gICAgZXhwaXJlc0luOiBOdW1iZXIoYm9keS5leHBpcmVzX2luKSxcbiAgICBwYXJlbnRJZDogaW5wdXQucGFyZW50SWQsXG4gICAgYnVzaW5lc3NJZDogaW5wdXQuYnVzaW5lc3NJZCxcbiAgICBhY2Nlc3M6IGlucHV0LmFjY2VzcyxcbiAgICAuLi4oYWRtaW5TY29wZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGFkbWluU2NvcGUgfSksXG4gICAgLi4uKGlucHV0LmFjY2VzcyA9PT0gJ3ByaXZhdGUnID8geyBjb250YWN0TWFwcGluZ0lkOiBpbnB1dC5jb250YWN0TWFwcGluZ0lkIH0gOiB7fSksXG4gIH07XG59XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,6 @@ export * from './wallet';
|
|
|
5
5
|
export * from './upsell';
|
|
6
6
|
export * from './errors';
|
|
7
7
|
export { auth } from './auth';
|
|
8
|
-
export type { PkcePair, AuthorizeUrlInput, ExchangeCodeInput, RefreshInput, TokenPair, } from './auth';
|
|
8
|
+
export type { PkcePair, AuthorizeUrlInput, ExchangeCodeInput, RefreshInput, TokenPair, MintUpsellTokenInput, UpsellToken, } from './auth';
|
|
9
9
|
export { type PlatformAuth, type PlatformAuthInput, type PlatformConfig, type PlatformConfigInput, DEFAULT_BASE_URL, } from './config';
|
|
10
10
|
export { createClient, type ClientConfig, type PlatformClient } from './client';
|
package/dist/index.js
CHANGED
|
@@ -27,4 +27,4 @@ var config_1 = require("./config");
|
|
|
27
27
|
Object.defineProperty(exports, "DEFAULT_BASE_URL", { enumerable: true, get: function () { return config_1.DEFAULT_BASE_URL; } });
|
|
28
28
|
var client_1 = require("./client");
|
|
29
29
|
Object.defineProperty(exports, "createClient", { enumerable: true, get: function () { return client_1.createClient; } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsNkNBQTJCO0FBQzNCLDBDQUF3QjtBQUN4QiwyQ0FBeUI7QUFDekIsMkNBQXlCO0FBQ3pCLDJDQUF5QjtBQUN6QiwrQkFBOEI7QUFBckIsNEZBQUEsSUFBSSxPQUFBO0FBVWIsbUNBTWtCO0FBRGhCLDBHQUFBLGdCQUFnQixPQUFBO0FBRWxCLG1DQUFnRjtBQUF2RSxzR0FBQSxZQUFZLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F1ZGl0JztcbmV4cG9ydCAqIGZyb20gJy4vYnVzaW5lc3MnO1xuZXhwb3J0ICogZnJvbSAnLi96b25lcyc7XG5leHBvcnQgKiBmcm9tICcuL3dhbGxldCc7XG5leHBvcnQgKiBmcm9tICcuL3Vwc2VsbCc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgeyBhdXRoIH0gZnJvbSAnLi9hdXRoJztcbmV4cG9ydCB0eXBlIHtcbiAgUGtjZVBhaXIsXG4gIEF1dGhvcml6ZVVybElucHV0LFxuICBFeGNoYW5nZUNvZGVJbnB1dCxcbiAgUmVmcmVzaElucHV0LFxuICBUb2tlblBhaXIsXG4gIE1pbnRVcHNlbGxUb2tlbklucHV0LFxuICBVcHNlbGxUb2tlbixcbn0gZnJvbSAnLi9hdXRoJztcbmV4cG9ydCB7XG4gIHR5cGUgUGxhdGZvcm1BdXRoLFxuICB0eXBlIFBsYXRmb3JtQXV0aElucHV0LFxuICB0eXBlIFBsYXRmb3JtQ29uZmlnLFxuICB0eXBlIFBsYXRmb3JtQ29uZmlnSW5wdXQsXG4gIERFRkFVTFRfQkFTRV9VUkwsXG59IGZyb20gJy4vY29uZmlnJztcbmV4cG9ydCB7IGNyZWF0ZUNsaWVudCwgdHlwZSBDbGllbnRDb25maWcsIHR5cGUgUGxhdGZvcm1DbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Public channel names are case-sensitive single identifiers, never paths or wildcards. */
|
|
2
|
+
export declare function isChannelName(value: unknown): value is string;
|
|
3
|
+
/** Internal AppSync mapping. Absolute paths remain supported for existing integrations. */
|
|
4
|
+
export declare function toChannelPath(channel: string): string;
|
|
5
|
+
export declare function nameFromChannelPath(path: string): string | null;
|
|
6
|
+
/** Backend-supplied opaque attribution, never an authorization grant. */
|
|
7
|
+
export declare function isAttributionId(value: unknown): value is string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isChannelName = isChannelName;
|
|
4
|
+
exports.toChannelPath = toChannelPath;
|
|
5
|
+
exports.nameFromChannelPath = nameFromChannelPath;
|
|
6
|
+
exports.isAttributionId = isAttributionId;
|
|
7
|
+
/** Public channel names are case-sensitive single identifiers, never paths or wildcards. */
|
|
8
|
+
function isChannelName(value) {
|
|
9
|
+
return (typeof value === 'string' &&
|
|
10
|
+
value.trim() === value &&
|
|
11
|
+
/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/.test(value));
|
|
12
|
+
}
|
|
13
|
+
/** Internal AppSync mapping. Absolute paths remain supported for existing integrations. */
|
|
14
|
+
function toChannelPath(channel) {
|
|
15
|
+
if (channel.startsWith('/'))
|
|
16
|
+
return channel;
|
|
17
|
+
if (!isChannelName(channel))
|
|
18
|
+
throw new Error('Invalid channel name');
|
|
19
|
+
return `/channels/${channel}`;
|
|
20
|
+
}
|
|
21
|
+
function nameFromChannelPath(path) {
|
|
22
|
+
const name = path.startsWith('/channels/') ? path.slice('/channels/'.length) : null;
|
|
23
|
+
return isChannelName(name) ? name : null;
|
|
24
|
+
}
|
|
25
|
+
/** Backend-supplied opaque attribution, never an authorization grant. */
|
|
26
|
+
function isAttributionId(value) {
|
|
27
|
+
return typeof value === 'string' && value.trim() === value && /^[\x21-\x7e]{1,128}$/.test(value);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVhbHRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxzQ0FNQztBQUdELHNDQUlDO0FBRUQsa0RBR0M7QUFHRCwwQ0FFQztBQXhCRCw0RkFBNEY7QUFDNUYsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDMUMsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUs7UUFDdEIsbUNBQW1DLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVELDJGQUEyRjtBQUMzRixTQUFnQixhQUFhLENBQUMsT0FBZTtJQUMzQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDckUsT0FBTyxhQUFhLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEYsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBZ0IsZUFBZSxDQUFDLEtBQWM7SUFDNUMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBQdWJsaWMgY2hhbm5lbCBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgc2luZ2xlIGlkZW50aWZpZXJzLCBuZXZlciBwYXRocyBvciB3aWxkY2FyZHMuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGFubmVsTmFtZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLnRyaW0oKSA9PT0gdmFsdWUgJiZcbiAgICAvXltBLVphLXowLTldW0EtWmEtejAtOV8tXXswLDEyN30kLy50ZXN0KHZhbHVlKVxuICApO1xufVxuXG4vKiogSW50ZXJuYWwgQXBwU3luYyBtYXBwaW5nLiBBYnNvbHV0ZSBwYXRocyByZW1haW4gc3VwcG9ydGVkIGZvciBleGlzdGluZyBpbnRlZ3JhdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DaGFubmVsUGF0aChjaGFubmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY2hhbm5lbC5zdGFydHNXaXRoKCcvJykpIHJldHVybiBjaGFubmVsO1xuICBpZiAoIWlzQ2hhbm5lbE5hbWUoY2hhbm5lbCkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFubmVsIG5hbWUnKTtcbiAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUNoYW5uZWxQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBuYW1lID0gcGF0aC5zdGFydHNXaXRoKCcvY2hhbm5lbHMvJykgPyBwYXRoLnNsaWNlKCcvY2hhbm5lbHMvJy5sZW5ndGgpIDogbnVsbDtcbiAgcmV0dXJuIGlzQ2hhbm5lbE5hbWUobmFtZSkgPyBuYW1lIDogbnVsbDtcbn1cblxuLyoqIEJhY2tlbmQtc3VwcGxpZWQgb3BhcXVlIGF0dHJpYnV0aW9uLCBuZXZlciBhbiBhdXRob3JpemF0aW9uIGdyYW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXR0cmlidXRpb25JZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gdmFsdWUgJiYgL15bXFx4MjEtXFx4N2VdezEsMTI4fSQvLnRlc3QodmFsdWUpO1xufVxuIl19
|
package/dist/realtime/connect.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.connect = connect;
|
|
4
4
|
exports.jitteredBackoff = jitteredBackoff;
|
|
5
|
+
const channel_1 = require("./channel");
|
|
5
6
|
const envelope_1 = require("./envelope");
|
|
6
7
|
const endpoints_1 = require("./endpoints");
|
|
7
8
|
const protocol_1 = require("./protocol");
|
|
@@ -319,7 +320,7 @@ function connect(options) {
|
|
|
319
320
|
return;
|
|
320
321
|
record.sent = true;
|
|
321
322
|
try {
|
|
322
|
-
socket.send((0, protocol_1.subscribeFrame)(record.id, record.channel, (0, protocol_1.authHeader)(endpoints.httpDomain, token)));
|
|
323
|
+
socket.send((0, protocol_1.subscribeFrame)(record.id, (0, channel_1.toChannelPath)(record.channel), (0, protocol_1.authHeader)(endpoints.httpDomain, token)));
|
|
323
324
|
}
|
|
324
325
|
catch (err) {
|
|
325
326
|
record.sent = false;
|
|
@@ -352,6 +353,7 @@ function connect(options) {
|
|
|
352
353
|
}
|
|
353
354
|
return {
|
|
354
355
|
subscribe(channel, subscribeOptions) {
|
|
356
|
+
(0, channel_1.toChannelPath)(channel);
|
|
355
357
|
const record = {
|
|
356
358
|
id: randomId(),
|
|
357
359
|
channel,
|
|
@@ -447,4 +449,4 @@ function unref(timer) {
|
|
|
447
449
|
if (typeof t.unref === 'function')
|
|
448
450
|
t.unref();
|
|
449
451
|
}
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWFsdGltZS9jb25uZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNEpBLDBCQXVXQztBQTZCRCwwQ0FHQztBQW5pQkQseUNBQTBFO0FBQzFFLDJDQUErRjtBQUMvRix5Q0FZb0I7QUFxQnBCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztBQTRGbEIsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDcEMsTUFBTSw4QkFBOEIsR0FBRyxNQUFNLENBQUM7QUFDOUMsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLENBQUM7QUFDNUM7Ozs7O0dBS0c7QUFDSCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztBQUVuQyxTQUFnQixPQUFPLENBQUMsT0FBK0I7SUFDckQsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFLLFVBQVUsQ0FBQyxLQUFzQixDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLDhCQUE4QixDQUFDO0lBRTFGLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0lBRTVELElBQUksTUFBb0MsQ0FBQztJQUN6QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztJQUMzQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLGNBQXlELENBQUM7SUFDOUQsSUFBSSxjQUF5RCxD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LE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVE7SUFDZixNQUFNLENBQUMsR0FBSSxVQUF5RCxDQUFDLE1BQU0sQ0FBQztJQUM1RSxJQUFJLENBQUMsRUFBRSxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQVksRUFBRSxlQUF1QjtJQUNwRCxJQUFJLEdBQUcsWUFBWSxLQUFLO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckMsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGVBQWUsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFvQztJQUNqRCxNQUFNLENBQUMsR0FBRyxLQUErQixDQUFDO0lBQzFDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzUmVhbHRpbWVFdmVudCwgaXNOZXdlciwgdHlwZSBSZWFsdGltZUV2ZW50IH0gZnJvbSAnLi9lbnZlbG9wZSc7XG5pbXBvcnQgeyBBUElfQkFTRSwgZW5kcG9pbnRzRm9yLCB0eXBlIFJlYWx0aW1lRW5kcG9pbnRzLCB0eXBlIFJlYWx0aW1lRW52IH0gZnJvbSAnLi9lbmRwb2ludHMnO1xuaW1wb3J0IHtcbiAgRVZFTlRfV1NfU1VCUFJPVE9DT0wsXG4gIGF1dGhIZWFkZXIsXG4gIGF1dGhTdWJwcm90b2NvbCxcbiAgY29ubmVjdGlvbkluaXRGcmFtZSxcbiAgZXJyb3JGcmFtZU1lc3NhZ2UsXG4gIHBhcnNlRGF0YUZyYW1lRXZlbnQsXG4gIHBhcnNlU2VydmVyRnJhbWUsXG4gIHN1YnNjcmliZUZyYW1lLFxuICB1bnN1YnNjcmliZUZyYW1lLFxuICB0eXBlIERhdGFGcmFtZSxcbiAgdHlwZSBFcnJvckZyYW1lLFxufSBmcm9tICcuL3Byb3RvY29sJztcblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgdGhlIFdlYlNvY2tldCBBUEkgdGhpcyBjbGllbnQgdXNlcy5cbiAqXG4gKiBEZWNsYXJlZCBzdHJ1Y3R1cmFsbHkgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBhIERPTSBsaWI6IHRoZSBTREtcbiAqIGNvbXBpbGVzIGFnYWluc3QgYGxpYjogRVMyMDIyYCBvbmx5LCBhbmQgdGhpcyBrZWVwcyB0aGUgY2xpZW50XG4gKiBpbmplY3RhYmxlIHNvIHRlc3RzIGNhbiBkcml2ZSB0aGUgcHJvdG9jb2wgd2l0aCBhIGZha2Ugc29ja2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbmltYWxXZWJTb2NrZXQge1xuICByZWFkeVN0YXRlOiBudW1iZXI7XG4gIHNlbmQoZGF0YTogc3RyaW5nKTogdm9pZDtcbiAgY2xvc2UoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZDtcbiAgb25vcGVuOiAoKGV2OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGw7XG4gIG9ubWVzc2FnZTogKChldjogeyBkYXRhOiB1bmtub3duIH0pID0+IHZvaWQpIHwgbnVsbDtcbiAgb25lcnJvcjogKChldjogdW5rbm93bikgPT4gdm9pZCkgfCBudWxsO1xuICBvbmNsb3NlOiAoKGV2OiB7IGNvZGU/OiBudW1iZXI7IHJlYXNvbj86IHN0cmluZyB9KSA9PiB2b2lkKSB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldEN0b3IgPSBuZXcgKHVybDogc3RyaW5nLCBwcm90b2NvbHM/OiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4gTWluaW1hbFdlYlNvY2tldDtcblxuY29uc3QgV1NfT1BFTiA9IDE7XG5cbi8qKiBXaGVyZSBhbiBldmVudCBoYW5kZWQgdG8gYG9uVXBkYXRlYCBjYW1lIGZyb20uICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU1ldGEge1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgJ3NuYXBzaG90J2Ag4oCUIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZSwgZmV0Y2hlZCBmcm9tIHRoZSBsYXN0LXZhbHVlXG4gICAqIGNhY2hlIG9uIHN1YnNjcmliZSBvciBhZnRlciBhIHJlY29ubmVjdC4gYCdsaXZlJ2Ag4oCUIGRlbGl2ZXJlZCBvdmVyXG4gICAqIHRoZSBzb2NrZXQuXG4gICAqXG4gICAqIEFwcHMgZ2VuZXJhbGx5IGRvbid0IG5lZWQgdG8gYnJhbmNoIG9uIHRoaXM7IHRoZSBTREsgaGFzIGFscmVhZHlcbiAgICogb3JkZXJlZCBhbmQgZGUtZHVwbGljYXRlZCBib3RoIHNvdXJjZXMgYnkgVUxJRC4gSXQncyB0aGVyZSBmb3JcbiAgICogdGVsZW1ldHJ5IGFuZCBmb3IgVUlzIHRoYXQgd2FudCB0byBkaXN0aW5ndWlzaCBcInJlc3RvcmVkXCIgZnJvbVxuICAgKiBcImp1c3QgaGFwcGVuZWRcIi5cbiAgICovXG4gIG9yaWdpbjogJ3NuYXBzaG90JyB8ICdsaXZlJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpYmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZpcmVzIG9uY2Ugd2l0aCB0aGUgY2hhbm5lbCdzIGxhdGVzdCBrbm93biB2YWx1ZSAoaWYgYW55KSwgdGhlbiBvblxuICAgKiBldmVyeSBsaXZlIGV2ZW50LiBOZXZlciBmaXJlcyB3aXRoIGFuIGV2ZW50IG9sZGVyIHRoYW4gb25lIGFscmVhZHlcbiAgICogZGVsaXZlcmVkIG9uIHRoaXMgc3Vic2NyaXB0aW9uLlxuICAgKi9cbiAgb25VcGRhdGUoZXZlbnQ6IFJlYWx0aW1lRXZlbnQsIG1ldGE6IFVwZGF0ZU1ldGEpOiB2b2lkO1xuICAvKipcbiAgICogU3Vic2NyaXB0aW9uLWxldmVsIGZhaWx1cmVzOiBhIHJlamVjdGVkIHN1YnNjcmliZSwgYSBtYWxmb3JtZWRcbiAgICogZnJhbWUsIGEgZmFpbGVkIHNuYXBzaG90IGZldGNoLiBUcmFuc2llbnQgc29ja2V0IGRyb3BzIGFyZSBoYW5kbGVkXG4gICAqIGludGVybmFsbHkgYnkgdGhlIHJlY29ubmVjdCBsb29wIGFuZCBhcmUgbm90IHN1cmZhY2VkIGhlcmUuXG4gICAqL1xuICBvbkVycm9yPyhlcnJvcjogRXJyb3IpOiB2b2lkO1xuICAvKipcbiAgICogUmVwbGFjZSB0aGUgYnVpbHQtaW4gbGFzdC12YWx1ZSBmZXRjaCBmb3IgdGhpcyBjaGFubmVsLiBSZXR1cm4gbnVsbFxuICAgKiB3aGVuIHRoZXJlIGlzIG5vIHNuYXBzaG90LiBVc2VmdWwgd2hlbiBhIGRvbWFpbiBoYXMgYSBiZXR0ZXIgc291cmNlXG4gICAqIG9mIHRydXRoIHRoYW4gdGhlIGNhY2hlIOKAlCBlLmcuIGZhbGxpbmcgYmFjayB0byB0aGUgb3JkZXItZGV0YWlscyBBUElcbiAgICogZm9yIGFuIG9yZGVyIHdob3NlIHRyYW5zaXRpb25zIHByZWRhdGUgYnVzIGluc3RydW1lbnRhdGlvbi5cbiAgICovXG4gIGdldFNuYXBzaG90PyhjaGFubmVsOiBzdHJpbmcpOiBQcm9taXNlPFJlYWx0aW1lRXZlbnQgfCBudWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpcHRpb24ge1xuICByZWFkb25seSBjaGFubmVsOiBzdHJpbmc7XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhbHRpbWVDbGllbnQge1xuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGEgY2hhbm5lbC4gQ2hhbm5lbHMgYXJlIHRoZSBvbmx5IGNvbmNlcHQgaGVyZSDigJQgdGhlXG4gICAqIHJlYWx0aW1lIGxheWVyIGtub3dzIG5vdGhpbmcgYWJvdXQgb3JkZXJzOyBgL29yZGVycy97aWR9YCBpcyBhXG4gICAqIG5hbWluZyBjb252ZW50aW9uIGVuZm9yY2VkIGJ5IHRoZSBzZXJ2aWNlJ3MgbmFtZXNwYWNlIHBvbGljeSwgbm90IGJ5XG4gICAqIHRoaXMgY2xpZW50LlxuICAgKlxuICAgKiBPbiB0aGlzIGNhbGwsIGFuZCBhZ2FpbiBhZnRlciBldmVyeSByZWNvbm5lY3QsIHRoZSBTREsgb3BlbnMgdGhlXG4gICAqIHN1YnNjcmlwdGlvbiAqZmlyc3QqIGFuZCBvbmx5IHRoZW4gZmV0Y2hlcyB0aGUgY2hhbm5lbCdzIGxhc3QgdmFsdWUsXG4gICAqIHNvIG5vIGV2ZW50IGNhbiBmYWxsIGJldHdlZW4gdGhlIHNuYXBzaG90IGFuZCB0aGUgc3RyZWFtLlxuICAgKi9cbiAgc3Vic2NyaWJlKGNoYW5uZWw6IHN0cmluZywgb3B0aW9uczogU3Vic2NyaWJlT3B0aW9ucyk6IFN1YnNjcmlwdGlvbjtcbiAgLyoqIENsb3NlIHRoZSBzaGFyZWQgc29ja2V0IGFuZCBzdG9wIHJlY29ubmVjdGluZy4gKi9cbiAgY2xvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZUNvbm5lY3RPcHRpb25zIHtcbiAgLyoqIFJlc29sdmVzIGVuZHBvaW50cyBmcm9tIHRoZSBidWlsdC1pbiB0YWJsZS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGVuZHBvaW50c2AuICovXG4gIGVudj86IFJlYWx0aW1lRW52O1xuICAvKiogRXhwbGljaXQgZW5kcG9pbnRzLCBmb3IgZW52aXJvbm1lbnRzIG5vdCBpbiB0aGUgdGFibGUuICovXG4gIGVuZHBvaW50cz86IFJlYWx0aW1lRW5kcG9pbnRzO1xuICAvKipcbiAgICogU3VwcGxpZXMgdGhlIHBsYXRmb3JtIEpXVC4gQ2FsbGVkIG9uIGNvbm5lY3QsIG9uIGV2ZXJ5IChyZSlzdWJzY3JpYmUsXG4gICAqIGFuZCBhZ2FpbiBhZnRlciBhIHRva2VuLWV4cGlyeSByZWNvbm5lY3Qg4oCUIHNvIHJldHVybmluZyBhIGZyZXNoIHRva2VuXG4gICAqIGZyb20geW91ciBzZXNzaW9uIHN0b3JlIGlzIGVub3VnaCB0byBrZWVwIGEgbG9uZy1saXZlZCBjb25uZWN0aW9uXG4gICAqIGF1dGhlbnRpY2F0ZWQuXG4gICAqL1xuICBnZXRUb2tlbigpOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBJbmplY3QgYSBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb24uIERlZmF1bHRzIHRvIGBnbG9iYWxUaGlzLldlYlNvY2tldGAuICovXG4gIHdlYlNvY2tldEltcGw/OiBXZWJTb2NrZXRDdG9yO1xuICAvKiogSW5qZWN0IGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gZm9yIHNuYXBzaG90IGZldGNoZXMuIERlZmF1bHRzIHRvIGBnbG9iYWxUaGlzLmZldGNoYC4gKi9cbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbiAgLyoqIEJhY2tvZmYgY2VpbGluZyBmb3IgcmVjb25uZWN0cy4gRGVmYXVsdCAzMF8wMDAuICovXG4gIG1heFJlY29ubmVjdERlbGF5TXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTdWJzY3JpcHRpb25SZWNvcmQge1xuICBpZDogc3RyaW5nO1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IFN1YnNjcmliZU9wdGlvbnM7XG4gIC8qKiBIaWdoZXN0IGVudmVsb3BlIGlkIGRlbGl2ZXJlZCBzbyBmYXIg4oCUIHRoZSBvcmRlcmluZy9kZWR1cGUgZ3VhcmQuICovXG4gIGxhc3RFdmVudElkPzogc3RyaW5nO1xuICAvKiogQ2xlYXJlZCBvbiBzb2NrZXQgbG9zcywgc2V0IG9uY2UgdGhlIHNlcnZlciBhY2tzIHRoZSBzdWJzY3JpYmUuICovXG4gIHNlbnQ6IGJvb2xlYW47XG4gIGNsb3NlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgQkFTRV9SRUNPTk5FQ1RfREVMQVlfTVMgPSA1MDA7XG5jb25zdCBERUZBVUxUX01BWF9SRUNPTk5FQ1RfREVMQVlfTVMgPSAzMF8wMDA7XG5jb25zdCBERUZBVUxUX0tFRVBBTElWRV9USU1FT1VUX01TID0gNjBfMDAwO1xuLyoqXG4gKiBHcmFjZSBvbiB0b3Agb2YgdGhlIHNlcnZlcidzIGFkdmVydGlzZWQga2VlcGFsaXZlIGludGVydmFsIGJlZm9yZSB3ZVxuICogY2FsbCB0aGUgY29ubmVjdGlvbiBkZWFkLiBBIGBrYWAgaXMgZHVlIGV2ZXJ5IGBjb25uZWN0aW9uVGltZW91dE1zYDtcbiAqIHdhaXRpbmcgMS41w5cgYWJzb3JicyBub3JtYWwgaml0dGVyIHdpdGhvdXQgbGV0dGluZyBhIGJsYWNrLWhvbGVkXG4gKiBzb2NrZXQgc2l0IHRoZXJlIGxvb2tpbmcgaGVhbHRoeS5cbiAqL1xuY29uc3QgS0VFUEFMSVZFX0dSQUNFID0gMS41O1xuLyoqXG4gKiBIb3cgbG9uZyBhIHNvY2tldCBtYXkgc2l0IGJldHdlZW4gXCJ3ZSBzdGFydGVkIG9wZW5pbmcgaXRcIiBhbmRcbiAqIGBjb25uZWN0aW9uX2Fja2AgYmVmb3JlIHdlIGdpdmUgdXAgb24gaXQuXG4gKlxuICogVGhlIGtlZXBhbGl2ZSB3YXRjaGRvZyBjYW4gb25seSBzdGFydCBvbmNlIGEgZnJhbWUgaGFzIGFycml2ZWQsIHNvIGl0XG4gKiBjYW5ub3QgY292ZXIgdGhlIGhhbmRzaGFrZSBpdHNlbGYuIEEgc29ja2V0IHdob3NlIFRDUC9XUyBvcGVuIHN1Y2NlZWRzXG4gKiBidXQgd2hpY2ggdGhlbiBnb2VzIHNpbGVudCAtIGJsYWNrLWhvbGVkIGNvbm5lY3Rpb24sIE5BVCBtYXBwaW5nXG4gKiBkcm9wcGVkIHJpZ2h0IGFmdGVyIG9wZW4sIHJhZGlvIGRvemluZyAtIHdvdWxkIG90aGVyd2lzZSBuZXZlciBmaXJlXG4gKiBgb25jbG9zZWAsIG5ldmVyIGFybSB0aGUga2VlcGFsaXZlLCBhbmQgbGVhdmUgYGNvbm5lY3RpbmdgIHRydWUgc29cbiAqIGBlbnN1cmVTb2NrZXQoKWAgc2hvcnQtY2lyY3VpdHMgZm9yZXZlci4gRXZlcnkgc3Vic2NyaXB0aW9uIHdvdWxkIGJlXG4gKiBzaWxlbnRseSBkZWFkIHdpdGggbm90aGluZyBzdXJmYWNlZC5cbiAqXG4gKiBJdCBjb3ZlcnMgdGhlIHRva2VuIHN0ZXAgdG9vLCB3aGljaCBpcyB3aHkgaXQgaXMgYXJtZWQgYmVmb3JlXG4gKiBgZ2V0VG9rZW4oKWAgaXMgYXdhaXRlZCByYXRoZXIgdGhhbiBhZnRlciB0aGUgc29ja2V0IGV4aXN0czogYW5cbiAqIGFwcC1zdXBwbGllZCB0b2tlbiByZWZyZXNoIGlzIHVzdWFsbHkgYSBgZmV0Y2hgLCBhbmQgYSBgZmV0Y2hgIHRoYXQgbmV2ZXJcbiAqIHNldHRsZXMgcHJvZHVjZXMgdGhlIHNhbWUgcGVybWFuZW50IHdlZGdlIHdpdGhvdXQgZXZlciBjcmVhdGluZyBhIHNvY2tldC5cbiAqL1xuY29uc3QgQ09OTkVDVF9ERUFETElORV9NUyA9IDE1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3Qob3B0aW9uczogUmVhbHRpbWVDb25uZWN0T3B0aW9ucyk6IFJlYWx0aW1lQ2xpZW50IHtcbiAgY29uc3QgZW5kcG9pbnRzID0gcmVzb2x2ZUVuZHBvaW50cyhvcHRpb25zKTtcbiAgY29uc3QgV2ViU29ja2V0SW1wbCA9IG9wdGlvbnMud2ViU29ja2V0SW1wbCA/PyBnbG9iYWxXZWJTb2NrZXQoKTtcbiAgY29uc3QgZmV0Y2hGbiA9IG9wdGlvbnMuZmV0Y2hGbiA/PyAoZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gpO1xuICBjb25zdCBtYXhSZWNvbm5lY3REZWxheU1zID0gb3B0aW9ucy5tYXhSZWNvbm5lY3REZWxheU1zID8/IERFRkFVTFRfTUFYX1JFQ09OTkVDVF9ERUxBWV9NUztcblxuICBjb25zdCBzdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIFN1YnNjcmlwdGlvblJlY29yZD4oKTtcblxuICBsZXQgc29ja2V0OiBNaW5pbWFsV2ViU29ja2V0IHwgdW5kZWZpbmVkO1xuICBsZXQgYWNrZWQgPSBmYWxzZTtcbiAgbGV0IGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgbGV0IGNsb3NlZEJ5Q2FsbGVyID0gZmFsc2U7XG4gIGxldCByZWNvbm5lY3RBdHRlbXB0ID0gMDtcbiAgbGV0IHJlY29ubmVjdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGtlZXBhbGl2ZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGNvbm5lY3RUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gIGxldCBrZWVwYWxpdmVUaW1lb3V0TXMgPSBERUZBVUxUX0tFRVBBTElWRV9USU1FT1VUX01TO1xuICAvKipcbiAgICogQnVtcGVkIGZvciBldmVyeSBjb25uZWN0IGF0dGVtcHQsIGFuZCBhZ2FpbiB3aGVuIHRoZSBjb25uZWN0IGRlYWRsaW5lXG4gICAqIGFiYW5kb25zIG9uZS4gYGVuc3VyZVNvY2tldGAncyBhc3luYyBib2R5IGNoZWNrcyBpdCBhZnRlciBldmVyeSBgYXdhaXRgXG4gICAqIHNvIGEgc2xvdyBgZ2V0VG9rZW4oKWAgdGhhdCBzZXR0bGVzIGxhdGUgY2Fubm90IGFkb3B0IGl0cyBzb2NrZXQgb3ZlciBhXG4gICAqIG5ld2VyIGF0dGVtcHQncy5cbiAgICovXG4gIGxldCBjb25uZWN0R2VuZXJhdGlvbiA9IDA7XG5cbiAgLy8g4pSA4pSA4pSAIFNvY2tldCBsaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZnVuY3Rpb24gZW5zdXJlU29ja2V0KCk6IHZvaWQge1xuICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCBjb25uZWN0aW5nIHx8IHNvY2tldCkgcmV0dXJuO1xuICAgIGNvbm5lY3RpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGdlbmVyYXRpb24gPSArK2Nvbm5lY3RHZW5lcmF0aW9uO1xuXG4gICAgLy8gQXJtZWQgQkVGT1JFIHRoZSB0b2tlbiBhd2FpdCwgbm90IGFmdGVyIHRoZSBzb2NrZXQgZXhpc3RzLiBgZ2V0VG9rZW4oKWBcbiAgICAvLyBpcyBhcHAtc3VwcGxpZWQgYW5kIHRoZSBub3JtYWwgaW1wbGVtZW50YXRpb24gaXMgYSBgZmV0Y2hgLCB3aGljaCBjYW5cbiAgICAvLyBoYW5nIGluZGVmaW5pdGVseSBhY3Jvc3MgYSBuZXR3b3JrIHRyYW5zaXRpb24uIElmIGl0IG5ldmVyIHNldHRsZXMgYW5kXG4gICAgLy8gdGhlIGRlYWRsaW5lIHdlcmUgYXJtZWQgbGF0ZXIsIGBjb25uZWN0aW5nYCB3b3VsZCBzdGF5IHRydWUgd2l0aCBub1xuICAgIC8vIHNvY2tldCBhbmQgbm8gdGltZXIsIGBzY2hlZHVsZVJlY29ubmVjdCgpYCB3b3VsZCBuZXZlciBydW4sIGFuZCBldmVyeVxuICAgIC8vIHN1YnNlcXVlbnQgYHN1YnNjcmliZSgpYCB3b3VsZCBzaG9ydC1jaXJjdWl0IG9uIGBjb25uZWN0aW5nYCAtIHRoZVxuICAgIC8vIGNsaWVudCBkZWFkIGZvciB0aGUgcGFnZSdzIGxpZmV0aW1lIHdpdGggbm90aGluZyBvbiBgb25FcnJvcmAuXG4gICAgYXJtQ29ubmVjdERlYWRsaW5lKGdlbmVyYXRpb24pO1xuXG4gICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHdzOiBNaW5pbWFsV2ViU29ja2V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBvcHRpb25zLmdldFRva2VuKCk7XG4gICAgICAgIC8vIFRoZSBkZWFkbGluZSBtYXkgaGF2ZSBhYmFuZG9uZWQgdGhpcyBhdHRlbXB0IHdoaWxlIHRoZSB0b2tlbiB3YXNcbiAgICAgICAgLy8gcGVuZGluZy4gQmFpbCBiZWZvcmUgYnVpbGRpbmcgYSBzb2NrZXQgbm9ib2R5IHdpbGwgb3duLlxuICAgICAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHJldHVybjtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gYXV0aEhlYWRlcihlbmRwb2ludHMuaHR0cERvbWFpbiwgdG9rZW4pO1xuICAgICAgICB3cyA9IG5ldyBXZWJTb2NrZXRJbXBsKGB3c3M6Ly8ke2VuZHBvaW50cy5yZWFsdGltZURvbWFpbn0vZXZlbnQvcmVhbHRpbWVgLCBbXG4gICAgICAgICAgRVZFTlRfV1NfU1VCUFJPVE9DT0wsXG4gICAgICAgICAgYXV0aFN1YnByb3RvY29sKGhlYWRlciksXG4gICAgICAgIF0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSBjb25uZWN0R2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgICAgIGJyb2FkY2FzdEVycm9yKHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IGZhaWxlZCB0byBvcGVuIGNvbm5lY3Rpb24nKSk7XG4gICAgICAgIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb3NlZEJ5Q2FsbGVyIHx8IGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSB7XG4gICAgICAgIC8vIFN1cGVyc2VkZWQgYmV0d2VlbiB0aGUgdG9rZW4gcmVzb2x2aW5nIGFuZCB0aGUgc29ja2V0IG9wZW5pbmcuXG4gICAgICAgIC8vIENsb3NlIHRoZSBvcnBoYW4gcmF0aGVyIHRoYW4gbGVha2luZyBpdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3cy5jbG9zZSgxMDAwLCAnc3VwZXJzZWRlZCcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbzsgaXQgd2FzIG5ldmVyIGFkb3B0ZWQuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzb2NrZXQgPSB3cztcbiAgICAgIHdzLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgICAgd3Muc2VuZChjb25uZWN0aW9uSW5pdEZyYW1lKCkpO1xuICAgICAgfTtcbiAgICAgIHdzLm9ubWVzc2FnZSA9IChldikgPT4ge1xuICAgICAgICBhcm1LZWVwYWxpdmUoKTtcbiAgICAgICAgaGFuZGxlRnJhbWUodHlwZW9mIGV2LmRhdGEgPT09ICdzdHJpbmcnID8gZXYuZGF0YSA6IFN0cmluZyhldi5kYXRhKSk7XG4gICAgICB9O1xuICAgICAgd3Mub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgLy8gYG9uY2xvc2VgIGFsd2F5cyBmb2xsb3dzOyByZWNvbm5lY3QgaXMgZHJpdmVuIGZyb20gdGhlcmUgc28gdGhlXG4gICAgICAgIC8vIHR3byBwYXRocyBjYW4ndCBib3RoIHNjaGVkdWxlIGEgcmV0cnkuXG4gICAgICB9O1xuICAgICAgd3Mub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGVhcmRvd25Tb2NrZXQoKTtcbiAgICAgICAgaWYgKCFjbG9zZWRCeUNhbGxlcikgc2NoZWR1bGVSZWNvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlYXJkb3duU29ja2V0KCk6IHZvaWQge1xuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgIHNvY2tldC5vbm9wZW4gPSBudWxsO1xuICAgICAgc29ja2V0Lm9ubWVzc2FnZSA9IG51bGw7XG4gICAgICBzb2NrZXQub25lcnJvciA9IG51bGw7XG4gICAgICBzb2NrZXQub25jbG9zZSA9IG51bGw7XG4gICAgfVxuICAgIHNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgYWNrZWQgPSBmYWxzZTtcbiAgICBjbGVhcktlZXBhbGl2ZSgpO1xuICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgcmVjb3JkLnNlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWlsIGEgaGFuZHNoYWtlIHRoYXQgbmV2ZXIgY29tcGxldGVzLiBDbGVhcmVkIGJ5IGBjb25uZWN0aW9uX2Fja2AsXG4gICAqIGFmdGVyIHdoaWNoIHRoZSBrZWVwYWxpdmUgd2F0Y2hkb2cgdGFrZXMgb3Zlci5cbiAgICovXG4gIGZ1bmN0aW9uIGFybUNvbm5lY3REZWFkbGluZShnZW5lcmF0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjbGVhckNvbm5lY3REZWFkbGluZSgpO1xuICAgIGNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29ubmVjdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSByZXR1cm47XG4gICAgICAvLyBBYmFuZG9uIHRoaXMgYXR0ZW1wdCBieSByZXRpcmluZyBpdHMgZ2VuZXJhdGlvbi4gQSBgZ2V0VG9rZW4oKWAgc3RpbGxcbiAgICAgIC8vIHBlbmRpbmcgd2hlbiB0aGlzIGZpcmVzIGNhbiB0aGVuIG5vIGxvbmdlciBpbnN0YWxsIGl0cyBzb2NrZXQsIHdoaWNoXG4gICAgICAvLyB3b3VsZCBvdGhlcndpc2UgbGFuZCB1bi1kZWFkbGluZWQgYW5kIHVuLWFja2VkIG9uIHRvcCBvZiB0aGUgZnJlc2hcbiAgICAgIC8vIGF0dGVtcHQgc2NoZWR1bGVkIGJlbG93LlxuICAgICAgY29ubmVjdEdlbmVyYXRpb24rKztcbiAgICAgIGNvbnN0IHN0YWxsZWQgPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgYnJvYWRjYXN0RXJyb3IobmV3IEVycm9yKCdyZWFsdGltZTogY29ubmVjdGlvbiB0aW1lZCBvdXQgYmVmb3JlIGNvbm5lY3Rpb25fYWNrJykpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhbGxlZD8uY2xvc2UoNDAwMSwgJ2Nvbm5lY3QgdGltZW91dCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFscmVhZHkgZ29uZTsgdGhlIHJlY29ubmVjdCBiZWxvdyBpcyB3aGF0IG1hdHRlcnMuXG4gICAgICB9XG4gICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgIH0sIENPTk5FQ1RfREVBRExJTkVfTVMpO1xuICAgIHVucmVmKGNvbm5lY3RUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckNvbm5lY3REZWFkbGluZSgpOiB2b2lkIHtcbiAgICBpZiAoY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQoY29ubmVjdFRpbWVyKTtcbiAgICBjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBzY2hlZHVsZVJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgcmVjb25uZWN0VGltZXIpIHJldHVybjtcbiAgICBpZiAoc3Vic2NyaXB0aW9ucy5zaXplID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZGVsYXkgPSBqaXR0ZXJlZEJhY2tvZmYocmVjb25uZWN0QXR0ZW1wdCwgbWF4UmVjb25uZWN0RGVsYXlNcyk7XG4gICAgcmVjb25uZWN0QXR0ZW1wdCsrO1xuICAgIHJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIGVuc3VyZVNvY2tldCgpO1xuICAgIH0sIGRlbGF5KTtcbiAgICB1bnJlZihyZWNvbm5lY3RUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBhcm1LZWVwYWxpdmUoKTogdm9pZCB7XG4gICAgY2xlYXJLZWVwYWxpdmUoKTtcbiAgICBrZWVwYWxpdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gTm8gZnJhbWUg4oCUIG5vdCBldmVuIGEgYGthYCDigJQgd2l0aGluIHRoZSBncmFjZSB3aW5kb3cuIFRoZSBzb2NrZXRcbiAgICAgIC8vIG1heSBsb29rIG9wZW4gd2hpbGUgZGVsaXZlcmluZyBub3RoaW5nIChiYWNrZ3JvdW5kZWQgdGFiLCBkb3ppbmdcbiAgICAgIC8vIHJhZGlvLCBzaWxlbnRseSBkcm9wcGVkIE5BVCBtYXBwaW5nKTsgZm9yY2UgaXQgY2xvc2VkIHNvIHRoZVxuICAgICAgLy8gbm9ybWFsIHJlY29ubmVjdCBwYXRoIHJ1bnMuXG4gICAgICBjb25zdCBkZWFkID0gc29ja2V0O1xuICAgICAgdGVhcmRvd25Tb2NrZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRlYWQ/LmNsb3NlKDQwMDAsICdrZWVwYWxpdmUgdGltZW91dCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFscmVhZHkgZ29uZTsgdGhlIHJlY29ubmVjdCBiZWxvdyBpcyB3aGF0IG1hdHRlcnMuXG4gICAgICB9XG4gICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgIH0sIGtlZXBhbGl2ZVRpbWVvdXRNcyAqIEtFRVBBTElWRV9HUkFDRSk7XG4gICAgdW5yZWYoa2VlcGFsaXZlVGltZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJLZWVwYWxpdmUoKTogdm9pZCB7XG4gICAgaWYgKGtlZXBhbGl2ZVRpbWVyKSBjbGVhclRpbWVvdXQoa2VlcGFsaXZlVGltZXIpO1xuICAgIGtlZXBhbGl2ZVRpbWVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSAIEZyYW1lIGhhbmRsaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGZ1bmN0aW9uIGhhbmRsZUZyYW1lKHJhdzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZnJhbWUgPSBwYXJzZVNlcnZlckZyYW1lKHJhdyk7XG4gICAgaWYgKCFmcmFtZSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChmcmFtZS50eXBlKSB7XG4gICAgICBjYXNlICdjb25uZWN0aW9uX2Fjayc6IHtcbiAgICAgICAgYWNrZWQgPSB0cnVlO1xuICAgICAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHJlY29ubmVjdEF0dGVtcHQgPSAwO1xuICAgICAgICBjbGVhckNvbm5lY3REZWFkbGluZSgpO1xuICAgICAgICBjb25zdCBhZHZlcnRpc2VkID0gKGZyYW1lIGFzIHsgY29ubmVjdGlvblRpbWVvdXRNcz86IG51bWJlciB9KS5jb25uZWN0aW9uVGltZW91dE1zO1xuICAgICAgICBpZiAodHlwZW9mIGFkdmVydGlzZWQgPT09ICdudW1iZXInICYmIGFkdmVydGlzZWQgPiAwKSBrZWVwYWxpdmVUaW1lb3V0TXMgPSBhZHZlcnRpc2VkO1xuICAgICAgICBhcm1LZWVwYWxpdmUoKTtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgdm9pZCBvcGVuU3Vic2NyaXB0aW9uKHJlY29yZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2thJzpcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnc3Vic2NyaWJlX3N1Y2Nlc3MnOiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RhdGEnOiB7XG4gICAgICAgIGNvbnN0IGRhdGFGcmFtZSA9IGZyYW1lIGFzIERhdGFGcmFtZTtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gc3Vic2NyaXB0aW9ucy5nZXQoZGF0YUZyYW1lLmlkKTtcbiAgICAgICAgaWYgKCFyZWNvcmQgfHwgcmVjb3JkLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gcGFyc2VEYXRhRnJhbWVFdmVudChkYXRhRnJhbWUpO1xuICAgICAgICBjb25zdCBldmVudCA9IGFzUmVhbHRpbWVFdmVudChwYXlsb2FkKTtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgbmV3IEVycm9yKGByZWFsdGltZTogZHJvcHBlZCBtYWxmb3JtZWQgZXZlbnQgb24gJHtyZWNvcmQuY2hhbm5lbH1gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGl2ZXIocmVjb3JkLCBldmVudCwgJ2xpdmUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnc3Vic2NyaWJlX2Vycm9yJzpcbiAgICAgIGNhc2UgJ2Nvbm5lY3Rpb25fZXJyb3InOlxuICAgICAgY2FzZSAncHVibGlzaF9lcnJvcic6IHtcbiAgICAgICAgY29uc3QgZXJyb3JGcmFtZSA9IGZyYW1lIGFzIEVycm9yRnJhbWU7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgcmVhbHRpbWU6ICR7ZXJyb3JGcmFtZU1lc3NhZ2UoZXJyb3JGcmFtZSl9YDtcbiAgICAgICAgaWYgKGVycm9yRnJhbWUuaWQpIHtcbiAgICAgICAgICBjb25zdCByZWNvcmQgPSBzdWJzY3JpcHRpb25zLmdldChlcnJvckZyYW1lLmlkKTtcbiAgICAgICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgICAgICByZXBvcnRFcnJvcihyZWNvcmQsIG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyb2FkY2FzdEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWxpdmVyKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCBldmVudDogUmVhbHRpbWVFdmVudCwgb3JpZ2luOiBVcGRhdGVNZXRhWydvcmlnaW4nXSkge1xuICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKCFpc05ld2VyKGV2ZW50LmlkLCByZWNvcmQubGFzdEV2ZW50SWQpKSByZXR1cm47XG4gICAgcmVjb3JkLmxhc3RFdmVudElkID0gZXZlbnQuaWQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlY29yZC5vcHRpb25zLm9uVXBkYXRlKGV2ZW50LCB7IGNoYW5uZWw6IHJlY29yZC5jaGFubmVsLCBvcmlnaW4gfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXBvcnRFcnJvcihyZWNvcmQsIHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IG9uVXBkYXRlIHRocmV3JykpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcG9ydEVycm9yKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCBlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBpZiAoIXJlY29yZC5vcHRpb25zLm9uRXJyb3IpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgcmVjb3JkLm9wdGlvbnMub25FcnJvcihlcnJvcik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBBIHRocm93aW5nIGVycm9yIGhhbmRsZXIgbXVzdCBub3QgdGFrZSBkb3duIHRoZSBzb2NrZXQuXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYnJvYWRjYXN0RXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgcmVwb3J0RXJyb3IocmVjb3JkLCBlcnJvcik7XG4gIH1cblxuICAvLyDilIDilIDilIAgU3Vic2NyaXB0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogT3BlbiAob3IgcmUtb3Blbikgb25lIHN1YnNjcmlwdGlvbjogc2VuZCB0aGUgc3Vic2NyaWJlIGZyYW1lIGZpcnN0LFxuICAgKiB0aGVuIGZldGNoIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZS5cbiAgICpcbiAgICogT3JkZXIgbWF0dGVycy4gQXBwU3luYyBFdmVudHMgaGFzIG5vIHJldGVudGlvbiwgc28gYW55dGhpbmcgcHVibGlzaGVkXG4gICAqIGJldHdlZW4gXCJ3ZSBhc2tlZCBmb3IgdGhlIHNuYXBzaG90XCIgYW5kIFwidGhlIHN0cmVhbSBpcyBsaXZlXCIgd291bGQgYmVcbiAgICogbG9zdCBmb3JldmVyLiBTdWJzY3JpYmluZyBmaXJzdCBtZWFucyB0aGUgd29yc3QgY2FzZSBpcyBhIGR1cGxpY2F0ZSxcbiAgICogd2hpY2ggdGhlIFVMSUQgZ3VhcmQgaW4gYGRlbGl2ZXJgIGFic29yYnMuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBvcGVuU3Vic2NyaXB0aW9uKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHJlY29yZC5jbG9zZWQgfHwgIXNvY2tldCB8fCAhYWNrZWQgfHwgcmVjb3JkLnNlbnQpIHJldHVybjtcbiAgICBsZXQgdG9rZW46IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgdG9rZW4gPSBhd2FpdCBvcHRpb25zLmdldFRva2VuKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXBvcnRFcnJvcihyZWNvcmQsIHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IGdldFRva2VuIGZhaWxlZCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlY29yZC5jbG9zZWQgfHwgIXNvY2tldCB8fCBzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV1NfT1BFTikgcmV0dXJuO1xuICAgIHJlY29yZC5zZW50ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgc29ja2V0LnNlbmQoXG4gICAgICAgIHN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCwgcmVjb3JkLmNoYW5uZWwsIGF1dGhIZWFkZXIoZW5kcG9pbnRzLmh0dHBEb21haW4sIHRva2VuKSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVjb3JkLnNlbnQgPSBmYWxzZTtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogc3Vic2NyaWJlIGZyYW1lIGZhaWxlZCB0byBzZW5kJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBoeWRyYXRlKHJlY29yZCwgdG9rZW4pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZShyZWNvcmQ6IFN1YnNjcmlwdGlvblJlY29yZCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IHJlY29yZC5vcHRpb25zLmdldFNuYXBzaG90XG4gICAgICAgID8gYXdhaXQgcmVjb3JkLm9wdGlvbnMuZ2V0U25hcHNob3QocmVjb3JkLmNoYW5uZWwpXG4gICAgICAgIDogYXdhaXQgZmV0Y2hMYXRlc3QocmVjb3JkLmNoYW5uZWwsIHRva2VuKTtcbiAgICAgIGlmIChzbmFwc2hvdCkgZGVsaXZlcihyZWNvcmQsIHNuYXBzaG90LCAnc25hcHNob3QnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsIGByZWFsdGltZTogc25hcHNob3QgZmV0Y2ggZmFpbGVkIGZvciAke3JlY29yZC5jaGFubmVsfWApKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdChjaGFubmVsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFJlYWx0aW1lRXZlbnQgfCBudWxsPiB7XG4gICAgY29uc3QgdXJsID0gYCR7ZW5kcG9pbnRzLmFwaUJhc2V9L3YxL3JlYWx0aW1lL2xhdGVzdD9jaGFubmVsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNoYW5uZWwpfWA7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hGbih1cmwsIHsgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCB9IH0pO1xuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHJldHVybiBudWxsO1xuICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYHNuYXBzaG90IGZldGNoIHJldHVybmVkIEhUVFAgJHtyZXMuc3RhdHVzfWApO1xuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgeyBldmVudD86IHVua25vd24gfTtcbiAgICByZXR1cm4gYXNSZWFsdGltZUV2ZW50KGJvZHk/LmV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3Vic2NyaWJlKGNoYW5uZWwsIHN1YnNjcmliZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkID0ge1xuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgb3B0aW9uczogc3Vic2NyaWJlT3B0aW9ucyxcbiAgICAgICAgc2VudDogZmFsc2UsXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVjb3JkLmlkLCByZWNvcmQpO1xuXG4gICAgICBpZiAoYWNrZWQgJiYgc29ja2V0KSB7XG4gICAgICAgIHZvaWQgb3BlblN1YnNjcmlwdGlvbihyZWNvcmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgcmVjb3JkLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUocmVjb3JkLmlkKTtcbiAgICAgICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5yZWFkeVN0YXRlID09PSBXU19PUEVOICYmIHJlY29yZC5zZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzb2NrZXQuc2VuZCh1bnN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIFNvY2tldCBpcyBnb2luZyBhd2F5IGFueXdheTsgdGhlIHNlcnZlciBkcm9wcyB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgY2xvc2VkQnlDYWxsZXIgPSB0cnVlO1xuICAgICAgaWYgKHJlY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQocmVjb25uZWN0VGltZXIpO1xuICAgICAgcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG9wZW4gPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3Blbj8uY2xvc2UoMTAwMCwgJ2NsaWVudCBjbG9zZWQnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbyBpZiB0aGUgc29ja2V0IGlzIGFscmVhZHkgdG9ybiBkb3duLlxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnM6IFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMpOiBSZWFsdGltZUVuZHBvaW50cyB7XG4gIGlmIChvcHRpb25zLmVuZHBvaW50cykgcmV0dXJuIG9wdGlvbnMuZW5kcG9pbnRzO1xuICBpZiAoIW9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFsdGltZS5jb25uZWN0OiBwYXNzIGVpdGhlciB7ZW52fSBvciB7ZW5kcG9pbnRzfScpO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gZW5kcG9pbnRzRm9yKG9wdGlvbnMuZW52KTtcbiAgcmV0dXJuIHsgLi4ucmVzb2x2ZWQsIGFwaUJhc2U6IHJlc29sdmVkLmFwaUJhc2UgfHwgQVBJX0JBU0Vbb3B0aW9ucy5lbnZdIH07XG59XG5cbmZ1bmN0aW9uIGdsb2JhbFdlYlNvY2tldCgpOiBXZWJTb2NrZXRDdG9yIHtcbiAgY29uc3QgY3RvciA9IChnbG9iYWxUaGlzIGFzIHsgV2ViU29ja2V0PzogV2ViU29ja2V0Q3RvciB9KS5XZWJTb2NrZXQ7XG4gIGlmICghY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZWFsdGltZS5jb25uZWN0OiBubyBnbG9iYWwgV2ViU29ja2V0LiBQYXNzIHt3ZWJTb2NrZXRJbXBsfSAoTm9kZSA8IDIyLCBvciBhIHRlc3QgZG91YmxlKS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0b3I7XG59XG5cbi8qKlxuICogRnVsbC1qaXR0ZXIgZXhwb25lbnRpYWwgYmFja29mZi4gRnVsbCBqaXR0ZXIgKHJhdGhlciB0aGFuXG4gKiBkZWxheSDCsSBqaXR0ZXIpIG1hdHRlcnMgaGVyZSBiZWNhdXNlIGV2ZXJ5IHRhYiB3YXRjaGluZyBhbiBvcmRlclxuICogcmVjb25uZWN0cyBvbiB0aGUgc2FtZSBzZXJ2ZXItc2lkZSBldmVudDsgd2l0aG91dCBpdCB0aGV5IHJldHJ5IGluXG4gKiBsb2Nrc3RlcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGppdHRlcmVkQmFja29mZihhdHRlbXB0OiBudW1iZXIsIG1heERlbGF5TXM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGNlaWxpbmcgPSBNYXRoLm1pbihtYXhEZWxheU1zLCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyAqIDIgKiogYXR0ZW1wdCk7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjZWlsaW5nKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IChnbG9iYWxUaGlzIGFzIHsgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nIH0gfSkuY3J5cHRvO1xuICBpZiAoYz8ucmFuZG9tVVVJRCkgcmV0dXJuIGMucmFuZG9tVVVJRCgpO1xuICByZXR1cm4gYHN1Yi0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yKGVycjogdW5rbm93biwgZmFsbGJhY2tNZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGVycjtcbiAgcmV0dXJuIG5ldyBFcnJvcihgJHtmYWxsYmFja01lc3NhZ2V9OiAke1N0cmluZyhlcnIpfWApO1xufVxuXG5mdW5jdGlvbiB1bnJlZih0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4pOiB2b2lkIHtcbiAgY29uc3QgdCA9IHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH07XG4gIGlmICh0eXBlb2YgdC51bnJlZiA9PT0gJ2Z1bmN0aW9uJykgdC51bnJlZigpO1xufVxuIl19
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWFsdGltZS9jb25uZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNkpBLDBCQTRXQztBQTZCRCwwQ0FHQztBQXppQkQsdUNBQTBDO0FBQzFDLHlDQUEwRTtBQUMxRSwyQ0FBK0Y7QUFDL0YseUNBWW9CO0FBcUJwQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7QUE0RmxCLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sOEJBQThCLEdBQUcsTUFBTSxDQUFDO0FBQzlDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDO0FBQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDO0FBQzVCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUM7QUFFbkMsU0FBZ0IsT0FBTyxDQUFDLE9BQStCO0lBQ3JELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksZUFBZSxFQUFFLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSyxVQUFVLENBQUMsS0FBc0IsQ0FBQztJQUN0RSxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSw4QkFBOEIsQ0FBQztJQUUxRixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztJQUU1RCxJQUFJLE1BQW9DLENBQUM7SUFDekMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN2QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDM0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxjQUF5RCxDQUFDO0lBQzlE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QixHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUM3RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVE7SUFDZixNQUFNLENBQUMsR0FBSSxVQUF5RCxDQUFDLE1BQU0sQ0FBQztJQUM1RSxJQUFJLENBQUMsRUFBRSxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQVksRUFBRSxlQUF1QjtJQUNwRCxJQUFJLEdBQUcsWUFBWSxLQUFLO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckMsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGVBQWUsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFvQztJQUNqRCxNQUFNLENBQUMsR0FBRyxLQUErQixDQUFDO0lBQzFDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvQ2hhbm5lbFBhdGggfSBmcm9tICcuL2NoYW5uZWwnO1xuaW1wb3J0IHsgYXNSZWFsdGltZUV2ZW50LCBpc05ld2VyLCB0eXBlIFJlYWx0aW1lRXZlbnQgfSBmcm9tICcuL2VudmVsb3BlJztcbmltcG9ydCB7IEFQSV9CQVNFLCBlbmRwb2ludHNGb3IsIHR5cGUgUmVhbHRpbWVFbmRwb2ludHMsIHR5cGUgUmVhbHRpbWVFbnYgfSBmcm9tICcuL2VuZHBvaW50cyc7XG5pbXBvcnQge1xuICBFVkVOVF9XU19TVUJQUk9UT0NPTCxcbiAgYXV0aEhlYWRlcixcbiAgYXV0aFN1YnByb3RvY29sLFxuICBjb25uZWN0aW9uSW5pdEZyYW1lLFxuICBlcnJvckZyYW1lTWVzc2FnZSxcbiAgcGFyc2VEYXRhRnJhbWVFdmVudCxcbiAgcGFyc2VTZXJ2ZXJGcmFtZSxcbiAgc3Vic2NyaWJlRnJhbWUsXG4gIHVuc3Vic2NyaWJlRnJhbWUsXG4gIHR5cGUgRGF0YUZyYW1lLFxuICB0eXBlIEVycm9yRnJhbWUsXG59IGZyb20gJy4vcHJvdG9jb2wnO1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgV2ViU29ja2V0IEFQSSB0aGlzIGNsaWVudCB1c2VzLlxuICpcbiAqIERlY2xhcmVkIHN0cnVjdHVyYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGEgRE9NIGxpYjogdGhlIFNES1xuICogY29tcGlsZXMgYWdhaW5zdCBgbGliOiBFUzIwMjJgIG9ubHksIGFuZCB0aGlzIGtlZXBzIHRoZSBjbGllbnRcbiAqIGluamVjdGFibGUgc28gdGVzdHMgY2FuIGRyaXZlIHRoZSBwcm90b2NvbCB3aXRoIGEgZmFrZSBzb2NrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWluaW1hbFdlYlNvY2tldCB7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgc2VuZChkYXRhOiBzdHJpbmcpOiB2b2lkO1xuICBjbG9zZShjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkO1xuICBvbm9wZW46ICgoZXY6IHVua25vd24pID0+IHZvaWQpIHwgbnVsbDtcbiAgb25tZXNzYWdlOiAoKGV2OiB7IGRhdGE6IHVua25vd24gfSkgPT4gdm9pZCkgfCBudWxsO1xuICBvbmVycm9yOiAoKGV2OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGw7XG4gIG9uY2xvc2U6ICgoZXY6IHsgY29kZT86IG51bWJlcjsgcmVhc29uPzogc3RyaW5nIH0pID0+IHZvaWQpIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q3RvciA9IG5ldyAodXJsOiBzdHJpbmcsIHByb3RvY29scz86IHN0cmluZyB8IHN0cmluZ1tdKSA9PiBNaW5pbWFsV2ViU29ja2V0O1xuXG5jb25zdCBXU19PUEVOID0gMTtcblxuLyoqIFdoZXJlIGFuIGV2ZW50IGhhbmRlZCB0byBgb25VcGRhdGVgIGNhbWUgZnJvbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTWV0YSB7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIGAnc25hcHNob3QnYCDigJQgdGhlIGNoYW5uZWwncyBsYXN0IHZhbHVlLCBmZXRjaGVkIGZyb20gdGhlIGxhc3QtdmFsdWVcbiAgICogY2FjaGUgb24gc3Vic2NyaWJlIG9yIGFmdGVyIGEgcmVjb25uZWN0LiBgJ2xpdmUnYCDigJQgZGVsaXZlcmVkIG92ZXJcbiAgICogdGhlIHNvY2tldC5cbiAgICpcbiAgICogQXBwcyBnZW5lcmFsbHkgZG9uJ3QgbmVlZCB0byBicmFuY2ggb24gdGhpczsgdGhlIFNESyBoYXMgYWxyZWFkeVxuICAgKiBvcmRlcmVkIGFuZCBkZS1kdXBsaWNhdGVkIGJvdGggc291cmNlcyBieSBVTElELiBJdCdzIHRoZXJlIGZvclxuICAgKiB0ZWxlbWV0cnkgYW5kIGZvciBVSXMgdGhhdCB3YW50IHRvIGRpc3Rpbmd1aXNoIFwicmVzdG9yZWRcIiBmcm9tXG4gICAqIFwianVzdCBoYXBwZW5lZFwiLlxuICAgKi9cbiAgb3JpZ2luOiAnc25hcHNob3QnIHwgJ2xpdmUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmliZU9wdGlvbnMge1xuICAvKipcbiAgICogRmlyZXMgb25jZSB3aXRoIHRoZSBjaGFubmVsJ3MgbGF0ZXN0IGtub3duIHZhbHVlIChpZiBhbnkpLCB0aGVuIG9uXG4gICAqIGV2ZXJ5IGxpdmUgZXZlbnQuIE5ldmVyIGZpcmVzIHdpdGggYW4gZXZlbnQgb2xkZXIgdGhhbiBvbmUgYWxyZWFkeVxuICAgKiBkZWxpdmVyZWQgb24gdGhpcyBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBvblVwZGF0ZShldmVudDogUmVhbHRpbWVFdmVudCwgbWV0YTogVXBkYXRlTWV0YSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24tbGV2ZWwgZmFpbHVyZXM6IGEgcmVqZWN0ZWQgc3Vic2NyaWJlLCBhIG1hbGZvcm1lZFxuICAgKiBmcmFtZSwgYSBmYWlsZWQgc25hcHNob3QgZmV0Y2guIFRyYW5zaWVudCBzb2NrZXQgZHJvcHMgYXJlIGhhbmRsZWRcbiAgICogaW50ZXJuYWxseSBieSB0aGUgcmVjb25uZWN0IGxvb3AgYW5kIGFyZSBub3Qgc3VyZmFjZWQgaGVyZS5cbiAgICovXG4gIG9uRXJyb3I/KGVycm9yOiBFcnJvcik6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBidWlsdC1pbiBsYXN0LXZhbHVlIGZldGNoIGZvciB0aGlzIGNoYW5uZWwuIFJldHVybiBudWxsXG4gICAqIHdoZW4gdGhlcmUgaXMgbm8gc25hcHNob3QuIFVzZWZ1bCB3aGVuIGEgZG9tYWluIGhhcyBhIGJldHRlciBzb3VyY2VcbiAgICogb2YgdHJ1dGggdGhhbiB0aGUgY2FjaGUg4oCUIGUuZy4gZmFsbGluZyBiYWNrIHRvIHRoZSBvcmRlci1kZXRhaWxzIEFQSVxuICAgKiBmb3IgYW4gb3JkZXIgd2hvc2UgdHJhbnNpdGlvbnMgcHJlZGF0ZSBidXMgaW5zdHJ1bWVudGF0aW9uLlxuICAgKi9cbiAgZ2V0U25hcHNob3Q/KGNoYW5uZWw6IHN0cmluZyk6IFByb21pc2U8UmVhbHRpbWVFdmVudCB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbiB7XG4gIHJlYWRvbmx5IGNoYW5uZWw6IHN0cmluZztcbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZUNsaWVudCB7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYSBjaGFubmVsLiBDaGFubmVscyBhcmUgdGhlIG9ubHkgY29uY2VwdCBoZXJlIOKAlCB0aGVcbiAgICogcmVhbHRpbWUgbGF5ZXIga25vd3Mgbm90aGluZyBhYm91dCBvcmRlcnM7IGAvb3JkZXJzL3tpZH1gIGlzIGFcbiAgICogbmFtaW5nIGNvbnZlbnRpb24gZW5mb3JjZWQgYnkgdGhlIHNlcnZpY2UncyBuYW1lc3BhY2UgcG9saWN5LCBub3QgYnlcbiAgICogdGhpcyBjbGllbnQuXG4gICAqXG4gICAqIE9uIHRoaXMgY2FsbCwgYW5kIGFnYWluIGFmdGVyIGV2ZXJ5IHJlY29ubmVjdCwgdGhlIFNESyBvcGVucyB0aGVcbiAgICogc3Vic2NyaXB0aW9uICpmaXJzdCogYW5kIG9ubHkgdGhlbiBmZXRjaGVzIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZSxcbiAgICogc28gbm8gZXZlbnQgY2FuIGZhbGwgYmV0d2VlbiB0aGUgc25hcHNob3QgYW5kIHRoZSBzdHJlYW0uXG4gICAqL1xuICBzdWJzY3JpYmUoY2hhbm5lbDogc3RyaW5nLCBvcHRpb25zOiBTdWJzY3JpYmVPcHRpb25zKTogU3Vic2NyaXB0aW9uO1xuICAvKiogQ2xvc2UgdGhlIHNoYXJlZCBzb2NrZXQgYW5kIHN0b3AgcmVjb25uZWN0aW5nLiAqL1xuICBjbG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMge1xuICAvKiogUmVzb2x2ZXMgZW5kcG9pbnRzIGZyb20gdGhlIGJ1aWx0LWluIHRhYmxlLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgZW5kcG9pbnRzYC4gKi9cbiAgZW52PzogUmVhbHRpbWVFbnY7XG4gIC8qKiBFeHBsaWNpdCBlbmRwb2ludHMsIGZvciBlbnZpcm9ubWVudHMgbm90IGluIHRoZSB0YWJsZS4gKi9cbiAgZW5kcG9pbnRzPzogUmVhbHRpbWVFbmRwb2ludHM7XG4gIC8qKlxuICAgKiBTdXBwbGllcyB0aGUgcGxhdGZvcm0gSldULiBDYWxsZWQgb24gY29ubmVjdCwgb24gZXZlcnkgKHJlKXN1YnNjcmliZSxcbiAgICogYW5kIGFnYWluIGFmdGVyIGEgdG9rZW4tZXhwaXJ5IHJlY29ubmVjdCDigJQgc28gcmV0dXJuaW5nIGEgZnJlc2ggdG9rZW5cbiAgICogZnJvbSB5b3VyIHNlc3Npb24gc3RvcmUgaXMgZW5vdWdoIHRvIGtlZXAgYSBsb25nLWxpdmVkIGNvbm5lY3Rpb25cbiAgICogYXV0aGVudGljYXRlZC5cbiAgICovXG4gIGdldFRva2VuKCk6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgLyoqIEluamVjdCBhIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbi4gRGVmYXVsdHMgdG8gYGdsb2JhbFRoaXMuV2ViU29ja2V0YC4gKi9cbiAgd2ViU29ja2V0SW1wbD86IFdlYlNvY2tldEN0b3I7XG4gIC8qKiBJbmplY3QgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBmb3Igc25hcHNob3QgZmV0Y2hlcy4gRGVmYXVsdHMgdG8gYGdsb2JhbFRoaXMuZmV0Y2hgLiAqL1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xuICAvKiogQmFja29mZiBjZWlsaW5nIGZvciByZWNvbm5lY3RzLiBEZWZhdWx0IDMwXzAwMC4gKi9cbiAgbWF4UmVjb25uZWN0RGVsYXlNcz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFN1YnNjcmlwdGlvblJlY29yZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgb3B0aW9uczogU3Vic2NyaWJlT3B0aW9ucztcbiAgLyoqIEhpZ2hlc3QgZW52ZWxvcGUgaWQgZGVsaXZlcmVkIHNvIGZhciDigJQgdGhlIG9yZGVyaW5nL2RlZHVwZSBndWFyZC4gKi9cbiAgbGFzdEV2ZW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBDbGVhcmVkIG9uIHNvY2tldCBsb3NzLCBzZXQgb25jZSB0aGUgc2VydmVyIGFja3MgdGhlIHN1YnNjcmliZS4gKi9cbiAgc2VudDogYm9vbGVhbjtcbiAgY2xvc2VkOiBib29sZWFuO1xufVxuXG5jb25zdCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyA9IDUwMDtcbmNvbnN0IERFRkFVTFRfTUFYX1JFQ09OTkVDVF9ERUxBWV9NUyA9IDMwXzAwMDtcbmNvbnN0IERFRkFVTFRfS0VFUEFMSVZFX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG4vKipcbiAqIEdyYWNlIG9uIHRvcCBvZiB0aGUgc2VydmVyJ3MgYWR2ZXJ0aXNlZCBrZWVwYWxpdmUgaW50ZXJ2YWwgYmVmb3JlIHdlXG4gKiBjYWxsIHRoZSBjb25uZWN0aW9uIGRlYWQuIEEgYGthYCBpcyBkdWUgZXZlcnkgYGNvbm5lY3Rpb25UaW1lb3V0TXNgO1xuICogd2FpdGluZyAxLjXDlyBhYnNvcmJzIG5vcm1hbCBqaXR0ZXIgd2l0aG91dCBsZXR0aW5nIGEgYmxhY2staG9sZWRcbiAqIHNvY2tldCBzaXQgdGhlcmUgbG9va2luZyBoZWFsdGh5LlxuICovXG5jb25zdCBLRUVQQUxJVkVfR1JBQ0UgPSAxLjU7XG4vKipcbiAqIEhvdyBsb25nIGEgc29ja2V0IG1heSBzaXQgYmV0d2VlbiBcIndlIHN0YXJ0ZWQgb3BlbmluZyBpdFwiIGFuZFxuICogYGNvbm5lY3Rpb25fYWNrYCBiZWZvcmUgd2UgZ2l2ZSB1cCBvbiBpdC5cbiAqXG4gKiBUaGUga2VlcGFsaXZlIHdhdGNoZG9nIGNhbiBvbmx5IHN0YXJ0IG9uY2UgYSBmcmFtZSBoYXMgYXJyaXZlZCwgc28gaXRcbiAqIGNhbm5vdCBjb3ZlciB0aGUgaGFuZHNoYWtlIGl0c2VsZi4gQSBzb2NrZXQgd2hvc2UgVENQL1dTIG9wZW4gc3VjY2VlZHNcbiAqIGJ1dCB3aGljaCB0aGVuIGdvZXMgc2lsZW50IC0gYmxhY2staG9sZWQgY29ubmVjdGlvbiwgTkFUIG1hcHBpbmdcbiAqIGRyb3BwZWQgcmlnaHQgYWZ0ZXIgb3BlbiwgcmFkaW8gZG96aW5nIC0gd291bGQgb3RoZXJ3aXNlIG5ldmVyIGZpcmVcbiAqIGBvbmNsb3NlYCwgbmV2ZXIgYXJtIHRoZSBrZWVwYWxpdmUsIGFuZCBsZWF2ZSBgY29ubmVjdGluZ2AgdHJ1ZSBzb1xuICogYGVuc3VyZVNvY2tldCgpYCBzaG9ydC1jaXJjdWl0cyBmb3JldmVyLiBFdmVyeSBzdWJzY3JpcHRpb24gd291bGQgYmVcbiAqIHNpbGVudGx5IGRlYWQgd2l0aCBub3RoaW5nIHN1cmZhY2VkLlxuICpcbiAqIEl0IGNvdmVycyB0aGUgdG9rZW4gc3RlcCB0b28sIHdoaWNoIGlzIHdoeSBpdCBpcyBhcm1lZCBiZWZvcmVcbiAqIGBnZXRUb2tlbigpYCBpcyBhd2FpdGVkIHJhdGhlciB0aGFuIGFmdGVyIHRoZSBzb2NrZXQgZXhpc3RzOiBhblxuICogYXBwLXN1cHBsaWVkIHRva2VuIHJlZnJlc2ggaXMgdXN1YWxseSBhIGBmZXRjaGAsIGFuZCBhIGBmZXRjaGAgdGhhdCBuZXZlclxuICogc2V0dGxlcyBwcm9kdWNlcyB0aGUgc2FtZSBwZXJtYW5lbnQgd2VkZ2Ugd2l0aG91dCBldmVyIGNyZWF0aW5nIGEgc29ja2V0LlxuICovXG5jb25zdCBDT05ORUNUX0RFQURMSU5FX01TID0gMTVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdChvcHRpb25zOiBSZWFsdGltZUNvbm5lY3RPcHRpb25zKTogUmVhbHRpbWVDbGllbnQge1xuICBjb25zdCBlbmRwb2ludHMgPSByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnMpO1xuICBjb25zdCBXZWJTb2NrZXRJbXBsID0gb3B0aW9ucy53ZWJTb2NrZXRJbXBsID8/IGdsb2JhbFdlYlNvY2tldCgpO1xuICBjb25zdCBmZXRjaEZuID0gb3B0aW9ucy5mZXRjaEZuID8/IChnbG9iYWxUaGlzLmZldGNoIGFzIHR5cGVvZiBmZXRjaCk7XG4gIGNvbnN0IG1heFJlY29ubmVjdERlbGF5TXMgPSBvcHRpb25zLm1heFJlY29ubmVjdERlbGF5TXMgPz8gREVGQVVMVF9NQVhfUkVDT05ORUNUX0RFTEFZX01TO1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgU3Vic2NyaXB0aW9uUmVjb3JkPigpO1xuXG4gIGxldCBzb2NrZXQ6IE1pbmltYWxXZWJTb2NrZXQgfCB1bmRlZmluZWQ7XG4gIGxldCBhY2tlZCA9IGZhbHNlO1xuICBsZXQgY29ubmVjdGluZyA9IGZhbHNlO1xuICBsZXQgY2xvc2VkQnlDYWxsZXIgPSBmYWxzZTtcbiAgbGV0IHJlY29ubmVjdEF0dGVtcHQgPSAwO1xuICBsZXQgcmVjb25uZWN0VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICBsZXQga2VlcGFsaXZlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICBsZXQgY29ubmVjdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGtlZXBhbGl2ZVRpbWVvdXRNcyA9IERFRkFVTFRfS0VFUEFMSVZFX1RJTUVPVVRfTVM7XG4gIC8qKlxuICAgKiBCdW1wZWQgZm9yIGV2ZXJ5IGNvbm5lY3QgYXR0ZW1wdCwgYW5kIGFnYWluIHdoZW4gdGhlIGNvbm5lY3QgZGVhZGxpbmVcbiAgICogYWJhbmRvbnMgb25lLiBgZW5zdXJlU29ja2V0YCdzIGFzeW5jIGJvZHkgY2hlY2tzIGl0IGFmdGVyIGV2ZXJ5IGBhd2FpdGBcbiAgICogc28gYSBzbG93IGBnZXRUb2tlbigpYCB0aGF0IHNldHRsZXMgbGF0ZSBjYW5ub3QgYWRvcHQgaXRzIHNvY2tldCBvdmVyIGFcbiAgICogbmV3ZXIgYXR0ZW1wdCdzLlxuICAgKi9cbiAgbGV0IGNvbm5lY3RHZW5lcmF0aW9uID0gMDtcblxuICAvLyDilIDilIDilIAgU29ja2V0IGxpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBmdW5jdGlvbiBlbnN1cmVTb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKGNsb3NlZEJ5Q2FsbGVyIHx8IGNvbm5lY3RpbmcgfHwgc29ja2V0KSByZXR1cm47XG4gICAgY29ubmVjdGluZyA9IHRydWU7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9ICsrY29ubmVjdEdlbmVyYXRpb247XG5cbiAgICAvLyBBcm1lZCBCRUZPUkUgdGhlIHRva2VuIGF3YWl0LCBub3QgYWZ0ZXIgdGhlIHNvY2tldCBleGlzdHMuIGBnZXRUb2tlbigpYFxuICAgIC8vIGlzIGFwcC1zdXBwbGllZCBhbmQgdGhlIG5vcm1hbCBpbXBsZW1lbnRhdGlvbiBpcyBhIGBmZXRjaGAsIHdoaWNoIGNhblxuICAgIC8vIGhhbmcgaW5kZWZpbml0ZWx5IGFjcm9zcyBhIG5ldHdvcmsgdHJhbnNpdGlvbi4gSWYgaXQgbmV2ZXIgc2V0dGxlcyBhbmRcbiAgICAvLyB0aGUgZGVhZGxpbmUgd2VyZSBhcm1lZCBsYXRlciwgYGNvbm5lY3RpbmdgIHdvdWxkIHN0YXkgdHJ1ZSB3aXRoIG5vXG4gICAgLy8gc29ja2V0IGFuZCBubyB0aW1lciwgYHNjaGVkdWxlUmVjb25uZWN0KClgIHdvdWxkIG5ldmVyIHJ1biwgYW5kIGV2ZXJ5XG4gICAgLy8gc3Vic2VxdWVudCBgc3Vic2NyaWJlKClgIHdvdWxkIHNob3J0LWNpcmN1aXQgb24gYGNvbm5lY3RpbmdgIC0gdGhlXG4gICAgLy8gY2xpZW50IGRlYWQgZm9yIHRoZSBwYWdlJ3MgbGlmZXRpbWUgd2l0aCBub3RoaW5nIG9uIGBvbkVycm9yYC5cbiAgICBhcm1Db25uZWN0RGVhZGxpbmUoZ2VuZXJhdGlvbik7XG5cbiAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgd3M6IE1pbmltYWxXZWJTb2NrZXQ7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IG9wdGlvbnMuZ2V0VG9rZW4oKTtcbiAgICAgICAgLy8gVGhlIGRlYWRsaW5lIG1heSBoYXZlIGFiYW5kb25lZCB0aGlzIGF0dGVtcHQgd2hpbGUgdGhlIHRva2VuIHdhc1xuICAgICAgICAvLyBwZW5kaW5nLiBCYWlsIGJlZm9yZSBidWlsZGluZyBhIHNvY2tldCBub2JvZHkgd2lsbCBvd24uXG4gICAgICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCBnZW5lcmF0aW9uICE9PSBjb25uZWN0R2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBhdXRoSGVhZGVyKGVuZHBvaW50cy5odHRwRG9tYWluLCB0b2tlbik7XG4gICAgICAgIHdzID0gbmV3IFdlYlNvY2tldEltcGwoYHdzczovLyR7ZW5kcG9pbnRzLnJlYWx0aW1lRG9tYWlufS9ldmVudC9yZWFsdGltZWAsIFtcbiAgICAgICAgICBFVkVOVF9XU19TVUJQUk9UT0NPTCxcbiAgICAgICAgICBhdXRoU3VicHJvdG9jb2woaGVhZGVyKSxcbiAgICAgICAgXSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSByZXR1cm47XG4gICAgICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb25uZWN0RGVhZGxpbmUoKTtcbiAgICAgICAgYnJvYWRjYXN0RXJyb3IodG9FcnJvcihlcnIsICdyZWFsdGltZTogZmFpbGVkIHRvIG9wZW4gY29ubmVjdGlvbicpKTtcbiAgICAgICAgc2NoZWR1bGVSZWNvbm5lY3QoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHtcbiAgICAgICAgLy8gU3VwZXJzZWRlZCBiZXR3ZWVuIHRoZSB0b2tlbiByZXNvbHZpbmcgYW5kIHRoZSBzb2NrZXQgb3BlbmluZy5cbiAgICAgICAgLy8gQ2xvc2UgdGhlIG9ycGhhbiByYXRoZXIgdGhhbiBsZWFraW5nIGl0LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHdzLmNsb3NlKDEwMDAsICdzdXBlcnNlZGVkJyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIE5vdGhpbmcgdXNlZnVsIHRvIGRvOyBpdCB3YXMgbmV2ZXIgYWRvcHRlZC5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNvY2tldCA9IHdzO1xuICAgICAgd3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgICB3cy5zZW5kKGNvbm5lY3Rpb25Jbml0RnJhbWUoKSk7XG4gICAgICB9O1xuICAgICAgd3Mub25tZXNzYWdlID0gKGV2KSA9PiB7XG4gICAgICAgIGFybUtlZXBhbGl2ZSgpO1xuICAgICAgICBoYW5kbGVGcmFtZSh0eXBlb2YgZXYuZGF0YSA9PT0gJ3N0cmluZycgPyBldi5kYXRhIDogU3RyaW5nKGV2LmRhdGEpKTtcbiAgICAgIH07XG4gICAgICB3cy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAvLyBgb25jbG9zZWAgYWx3YXlzIGZvbGxvd3M7IHJlY29ubmVjdCBpcyBkcml2ZW4gZnJvbSB0aGVyZSBzbyB0aGVcbiAgICAgICAgLy8gdHdvIHBhdGhzIGNhbid0IGJvdGggc2NoZWR1bGUgYSByZXRyeS5cbiAgICAgIH07XG4gICAgICB3cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVhcmRvd25Tb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgc29ja2V0Lm9ub3BlbiA9IG51bGw7XG4gICAgICBzb2NrZXQub25tZXNzYWdlID0gbnVsbDtcbiAgICAgIHNvY2tldC5vbmVycm9yID0gbnVsbDtcbiAgICAgIHNvY2tldC5vbmNsb3NlID0gbnVsbDtcbiAgICB9XG4gICAgc29ja2V0ID0gdW5kZWZpbmVkO1xuICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICBhY2tlZCA9IGZhbHNlO1xuICAgIGNsZWFyS2VlcGFsaXZlKCk7XG4gICAgY2xlYXJDb25uZWN0RGVhZGxpbmUoKTtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhaWwgYSBoYW5kc2hha2UgdGhhdCBuZXZlciBjb21wbGV0ZXMuIENsZWFyZWQgYnkgYGNvbm5lY3Rpb25fYWNrYCxcbiAgICogYWZ0ZXIgd2hpY2ggdGhlIGtlZXBhbGl2ZSB3YXRjaGRvZyB0YWtlcyBvdmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJtQ29ubmVjdERlYWRsaW5lKGdlbmVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHJldHVybjtcbiAgICAgIC8vIEFiYW5kb24gdGhpcyBhdHRlbXB0IGJ5IHJldGlyaW5nIGl0cyBnZW5lcmF0aW9uLiBBIGBnZXRUb2tlbigpYCBzdGlsbFxuICAgICAgLy8gcGVuZGluZyB3aGVuIHRoaXMgZmlyZXMgY2FuIHRoZW4gbm8gbG9uZ2VyIGluc3RhbGwgaXRzIHNvY2tldCwgd2hpY2hcbiAgICAgIC8vIHdvdWxkIG90aGVyd2lzZSBsYW5kIHVuLWRlYWRsaW5lZCBhbmQgdW4tYWNrZWQgb24gdG9wIG9mIHRoZSBmcmVzaFxuICAgICAgLy8gYXR0ZW1wdCBzY2hlZHVsZWQgYmVsb3cuXG4gICAgICBjb25uZWN0R2VuZXJhdGlvbisrO1xuICAgICAgY29uc3Qgc3RhbGxlZCA9IHNvY2tldDtcbiAgICAgIHRlYXJkb3duU29ja2V0KCk7XG4gICAgICBicm9hZGNhc3RFcnJvcihuZXcgRXJyb3IoJ3JlYWx0aW1lOiBjb25uZWN0aW9uIHRpbWVkIG91dCBiZWZvcmUgY29ubmVjdGlvbl9hY2snKSk7XG4gICAgICB0cnkge1xuICAgICAgICBzdGFsbGVkPy5jbG9zZSg0MDAxLCAnY29ubmVjdCB0aW1lb3V0Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQWxyZWFkeSBnb25lOyB0aGUgcmVjb25uZWN0IGJlbG93IGlzIHdoYXQgbWF0dGVycy5cbiAgICAgIH1cbiAgICAgIGlmICghY2xvc2VkQnlDYWxsZXIpIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgfSwgQ09OTkVDVF9ERUFETElORV9NUyk7XG4gICAgdW5yZWYoY29ubmVjdFRpbWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk6IHZvaWQge1xuICAgIGlmIChjb25uZWN0VGltZXIpIGNsZWFyVGltZW91dChjb25uZWN0VGltZXIpO1xuICAgIGNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlUmVjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCByZWNvbm5lY3RUaW1lcikgcmV0dXJuO1xuICAgIGlmIChzdWJzY3JpcHRpb25zLnNpemUgPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWxheSA9IGppdHRlcmVkQmFja29mZihyZWNvbm5lY3RBdHRlbXB0LCBtYXhSZWNvbm5lY3REZWxheU1zKTtcbiAgICByZWNvbm5lY3RBdHRlbXB0Kys7XG4gICAgcmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlY29ubmVjdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgfSwgZGVsYXkpO1xuICAgIHVucmVmKHJlY29ubmVjdFRpbWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFybUtlZXBhbGl2ZSgpOiB2b2lkIHtcbiAgICBjbGVhcktlZXBhbGl2ZSgpO1xuICAgIGtlZXBhbGl2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBObyBmcmFtZSDigJQgbm90IGV2ZW4gYSBga2FgIOKAlCB3aXRoaW4gdGhlIGdyYWNlIHdpbmRvdy4gVGhlIHNvY2tldFxuICAgICAgLy8gbWF5IGxvb2sgb3BlbiB3aGlsZSBkZWxpdmVyaW5nIG5vdGhpbmcgKGJhY2tncm91bmRlZCB0YWIsIGRvemluZ1xuICAgICAgLy8gcmFkaW8sIHNpbGVudGx5IGRyb3BwZWQgTkFUIG1hcHBpbmcpOyBmb3JjZSBpdCBjbG9zZWQgc28gdGhlXG4gICAgICAvLyBub3JtYWwgcmVjb25uZWN0IHBhdGggcnVucy5cbiAgICAgIGNvbnN0IGRlYWQgPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGVhZD8uY2xvc2UoNDAwMCwgJ2tlZXBhbGl2ZSB0aW1lb3V0Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQWxyZWFkeSBnb25lOyB0aGUgcmVjb25uZWN0IGJlbG93IGlzIHdoYXQgbWF0dGVycy5cbiAgICAgIH1cbiAgICAgIGlmICghY2xvc2VkQnlDYWxsZXIpIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgfSwga2VlcGFsaXZlVGltZW91dE1zICogS0VFUEFMSVZFX0dSQUNFKTtcbiAgICB1bnJlZihrZWVwYWxpdmVUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhcktlZXBhbGl2ZSgpOiB2b2lkIHtcbiAgICBpZiAoa2VlcGFsaXZlVGltZXIpIGNsZWFyVGltZW91dChrZWVwYWxpdmVUaW1lcik7XG4gICAga2VlcGFsaXZlVGltZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyDilIDilIDilIAgRnJhbWUgaGFuZGxpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZnVuY3Rpb24gaGFuZGxlRnJhbWUocmF3OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmcmFtZSA9IHBhcnNlU2VydmVyRnJhbWUocmF3KTtcbiAgICBpZiAoIWZyYW1lKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKGZyYW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Nvbm5lY3Rpb25fYWNrJzoge1xuICAgICAgICBhY2tlZCA9IHRydWU7XG4gICAgICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVjb25uZWN0QXR0ZW1wdCA9IDA7XG4gICAgICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgICAgIGNvbnN0IGFkdmVydGlzZWQgPSAoZnJhbWUgYXMgeyBjb25uZWN0aW9uVGltZW91dE1zPzogbnVtYmVyIH0pLmNvbm5lY3Rpb25UaW1lb3V0TXM7XG4gICAgICAgIGlmICh0eXBlb2YgYWR2ZXJ0aXNlZCA9PT0gJ251bWJlcicgJiYgYWR2ZXJ0aXNlZCA+IDApIGtlZXBhbGl2ZVRpbWVvdXRNcyA9IGFkdmVydGlzZWQ7XG4gICAgICAgIGFybUtlZXBhbGl2ZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSB2b2lkIG9wZW5TdWJzY3JpcHRpb24ocmVjb3JkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAna2EnOlxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdzdWJzY3JpYmVfc3VjY2Vzcyc6IHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnZGF0YSc6IHtcbiAgICAgICAgY29uc3QgZGF0YUZyYW1lID0gZnJhbWUgYXMgRGF0YUZyYW1lO1xuICAgICAgICBjb25zdCByZWNvcmQgPSBzdWJzY3JpcHRpb25zLmdldChkYXRhRnJhbWUuaWQpO1xuICAgICAgICBpZiAoIXJlY29yZCB8fCByZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXJzZURhdGFGcmFtZUV2ZW50KGRhdGFGcmFtZSk7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gYXNSZWFsdGltZUV2ZW50KHBheWxvYWQpO1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCBuZXcgRXJyb3IoYHJlYWx0aW1lOiBkcm9wcGVkIG1hbGZvcm1lZCBldmVudCBvbiAke3JlY29yZC5jaGFubmVsfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsaXZlcihyZWNvcmQsIGV2ZW50LCAnbGl2ZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdzdWJzY3JpYmVfZXJyb3InOlxuICAgICAgY2FzZSAnY29ubmVjdGlvbl9lcnJvcic6XG4gICAgICBjYXNlICdwdWJsaXNoX2Vycm9yJzoge1xuICAgICAgICBjb25zdCBlcnJvckZyYW1lID0gZnJhbWUgYXMgRXJyb3JGcmFtZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGByZWFsdGltZTogJHtlcnJvckZyYW1lTWVzc2FnZShlcnJvckZyYW1lKX1gO1xuICAgICAgICBpZiAoZXJyb3JGcmFtZS5pZCkge1xuICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHN1YnNjcmlwdGlvbnMuZ2V0KGVycm9yRnJhbWUuaWQpO1xuICAgICAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJvYWRjYXN0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGl2ZXIocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQsIGV2ZW50OiBSZWFsdGltZUV2ZW50LCBvcmlnaW46IFVwZGF0ZU1ldGFbJ29yaWdpbiddKSB7XG4gICAgaWYgKHJlY29yZC5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIWlzTmV3ZXIoZXZlbnQuaWQsIHJlY29yZC5sYXN0RXZlbnRJZCkpIHJldHVybjtcbiAgICByZWNvcmQubGFzdEV2ZW50SWQgPSBldmVudC5pZDtcbiAgICB0cnkge1xuICAgICAgcmVjb3JkLm9wdGlvbnMub25VcGRhdGUoZXZlbnQsIHsgY2hhbm5lbDogcmVjb3JkLmNoYW5uZWwsIG9yaWdpbiB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogb25VcGRhdGUgdGhyZXcnKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVwb3J0RXJyb3IocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQsIGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGlmICghcmVjb3JkLm9wdGlvbnMub25FcnJvcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICByZWNvcmQub3B0aW9ucy5vbkVycm9yKGVycm9yKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEEgdGhyb3dpbmcgZXJyb3IgaGFuZGxlciBtdXN0IG5vdCB0YWtlIGRvd24gdGhlIHNvY2tldC5cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBicm9hZGNhc3RFcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZXBvcnRFcnJvcihyZWNvcmQsIGVycm9yKTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBTdWJzY3JpcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBPcGVuIChvciByZS1vcGVuKSBvbmUgc3Vic2NyaXB0aW9uOiBzZW5kIHRoZSBzdWJzY3JpYmUgZnJhbWUgZmlyc3QsXG4gICAqIHRoZW4gZmV0Y2ggdGhlIGNoYW5uZWwncyBsYXN0IHZhbHVlLlxuICAgKlxuICAgKiBPcmRlciBtYXR0ZXJzLiBBcHBTeW5jIEV2ZW50cyBoYXMgbm8gcmV0ZW50aW9uLCBzbyBhbnl0aGluZyBwdWJsaXNoZWRcbiAgICogYmV0d2VlbiBcIndlIGFza2VkIGZvciB0aGUgc25hcHNob3RcIiBhbmQgXCJ0aGUgc3RyZWFtIGlzIGxpdmVcIiB3b3VsZCBiZVxuICAgKiBsb3N0IGZvcmV2ZXIuIFN1YnNjcmliaW5nIGZpcnN0IG1lYW5zIHRoZSB3b3JzdCBjYXNlIGlzIGEgZHVwbGljYXRlLFxuICAgKiB3aGljaCB0aGUgVUxJRCBndWFyZCBpbiBgZGVsaXZlcmAgYWJzb3Jicy5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5TdWJzY3JpcHRpb24ocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocmVjb3JkLmNsb3NlZCB8fCAhc29ja2V0IHx8ICFhY2tlZCB8fCByZWNvcmQuc2VudCkgcmV0dXJuO1xuICAgIGxldCB0b2tlbjogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICB0b2tlbiA9IGF3YWl0IG9wdGlvbnMuZ2V0VG9rZW4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogZ2V0VG9rZW4gZmFpbGVkJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVjb3JkLmNsb3NlZCB8fCAhc29ja2V0IHx8IHNvY2tldC5yZWFkeVN0YXRlICE9PSBXU19PUEVOKSByZXR1cm47XG4gICAgcmVjb3JkLnNlbnQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBzb2NrZXQuc2VuZChcbiAgICAgICAgc3Vic2NyaWJlRnJhbWUoXG4gICAgICAgICAgcmVjb3JkLmlkLFxuICAgICAgICAgIHRvQ2hhbm5lbFBhdGgocmVjb3JkLmNoYW5uZWwpLFxuICAgICAgICAgIGF1dGhIZWFkZXIoZW5kcG9pbnRzLmh0dHBEb21haW4sIHRva2VuKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZWNvcmQuc2VudCA9IGZhbHNlO1xuICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCB0b0Vycm9yKGVyciwgJ3JlYWx0aW1lOiBzdWJzY3JpYmUgZnJhbWUgZmFpbGVkIHRvIHNlbmQnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IGh5ZHJhdGUocmVjb3JkLCB0b2tlbik7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBoeWRyYXRlKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gcmVjb3JkLm9wdGlvbnMuZ2V0U25hcHNob3RcbiAgICAgICAgPyBhd2FpdCByZWNvcmQub3B0aW9ucy5nZXRTbmFwc2hvdChyZWNvcmQuY2hhbm5lbClcbiAgICAgICAgOiBhd2FpdCBmZXRjaExhdGVzdChyZWNvcmQuY2hhbm5lbCwgdG9rZW4pO1xuICAgICAgaWYgKHNuYXBzaG90KSBkZWxpdmVyKHJlY29yZCwgc25hcHNob3QsICdzbmFwc2hvdCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCB0b0Vycm9yKGVyciwgYHJlYWx0aW1lOiBzbmFwc2hvdCBmZXRjaCBmYWlsZWQgZm9yICR7cmVjb3JkLmNoYW5uZWx9YCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoTGF0ZXN0KGNoYW5uZWw6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFByb21pc2U8UmVhbHRpbWVFdmVudCB8IG51bGw+IHtcbiAgICBjb25zdCB1cmwgPSBgJHtlbmRwb2ludHMuYXBpQmFzZX0vdjEvcmVhbHRpbWUvbGF0ZXN0P2NoYW5uZWw9JHtlbmNvZGVVUklDb21wb25lbnQoY2hhbm5lbCl9YDtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEZuKHVybCwgeyBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gfSk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPT09IDQwNCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgc25hcHNob3QgZmV0Y2ggcmV0dXJuZWQgSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gICAgY29uc3QgYm9keSA9IChhd2FpdCByZXMuanNvbigpKSBhcyB7IGV2ZW50PzogdW5rbm93biB9O1xuICAgIHJldHVybiBhc1JlYWx0aW1lRXZlbnQoYm9keT8uZXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdWJzY3JpYmUoY2hhbm5lbCwgc3Vic2NyaWJlT3B0aW9ucykge1xuICAgICAgdG9DaGFubmVsUGF0aChjaGFubmVsKTtcbiAgICAgIGNvbnN0IHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkID0ge1xuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgb3B0aW9uczogc3Vic2NyaWJlT3B0aW9ucyxcbiAgICAgICAgc2VudDogZmFsc2UsXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVjb3JkLmlkLCByZWNvcmQpO1xuXG4gICAgICBpZiAoYWNrZWQgJiYgc29ja2V0KSB7XG4gICAgICAgIHZvaWQgb3BlblN1YnNjcmlwdGlvbihyZWNvcmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgcmVjb3JkLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUocmVjb3JkLmlkKTtcbiAgICAgICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5yZWFkeVN0YXRlID09PSBXU19PUEVOICYmIHJlY29yZC5zZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzb2NrZXQuc2VuZCh1bnN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIFNvY2tldCBpcyBnb2luZyBhd2F5IGFueXdheTsgdGhlIHNlcnZlciBkcm9wcyB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgY2xvc2VkQnlDYWxsZXIgPSB0cnVlO1xuICAgICAgaWYgKHJlY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQocmVjb25uZWN0VGltZXIpO1xuICAgICAgcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG9wZW4gPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3Blbj8uY2xvc2UoMTAwMCwgJ2NsaWVudCBjbG9zZWQnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbyBpZiB0aGUgc29ja2V0IGlzIGFscmVhZHkgdG9ybiBkb3duLlxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnM6IFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMpOiBSZWFsdGltZUVuZHBvaW50cyB7XG4gIGlmIChvcHRpb25zLmVuZHBvaW50cykgcmV0dXJuIG9wdGlvbnMuZW5kcG9pbnRzO1xuICBpZiAoIW9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFsdGltZS5jb25uZWN0OiBwYXNzIGVpdGhlciB7ZW52fSBvciB7ZW5kcG9pbnRzfScpO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gZW5kcG9pbnRzRm9yKG9wdGlvbnMuZW52KTtcbiAgcmV0dXJuIHsgLi4ucmVzb2x2ZWQsIGFwaUJhc2U6IHJlc29sdmVkLmFwaUJhc2UgfHwgQVBJX0JBU0Vbb3B0aW9ucy5lbnZdIH07XG59XG5cbmZ1bmN0aW9uIGdsb2JhbFdlYlNvY2tldCgpOiBXZWJTb2NrZXRDdG9yIHtcbiAgY29uc3QgY3RvciA9IChnbG9iYWxUaGlzIGFzIHsgV2ViU29ja2V0PzogV2ViU29ja2V0Q3RvciB9KS5XZWJTb2NrZXQ7XG4gIGlmICghY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZWFsdGltZS5jb25uZWN0OiBubyBnbG9iYWwgV2ViU29ja2V0LiBQYXNzIHt3ZWJTb2NrZXRJbXBsfSAoTm9kZSA8IDIyLCBvciBhIHRlc3QgZG91YmxlKS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0b3I7XG59XG5cbi8qKlxuICogRnVsbC1qaXR0ZXIgZXhwb25lbnRpYWwgYmFja29mZi4gRnVsbCBqaXR0ZXIgKHJhdGhlciB0aGFuXG4gKiBkZWxheSDCsSBqaXR0ZXIpIG1hdHRlcnMgaGVyZSBiZWNhdXNlIGV2ZXJ5IHRhYiB3YXRjaGluZyBhbiBvcmRlclxuICogcmVjb25uZWN0cyBvbiB0aGUgc2FtZSBzZXJ2ZXItc2lkZSBldmVudDsgd2l0aG91dCBpdCB0aGV5IHJldHJ5IGluXG4gKiBsb2Nrc3RlcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGppdHRlcmVkQmFja29mZihhdHRlbXB0OiBudW1iZXIsIG1heERlbGF5TXM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGNlaWxpbmcgPSBNYXRoLm1pbihtYXhEZWxheU1zLCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyAqIDIgKiogYXR0ZW1wdCk7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjZWlsaW5nKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IChnbG9iYWxUaGlzIGFzIHsgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nIH0gfSkuY3J5cHRvO1xuICBpZiAoYz8ucmFuZG9tVVVJRCkgcmV0dXJuIGMucmFuZG9tVVVJRCgpO1xuICByZXR1cm4gYHN1Yi0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yKGVycjogdW5rbm93biwgZmFsbGJhY2tNZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGVycjtcbiAgcmV0dXJuIG5ldyBFcnJvcihgJHtmYWxsYmFja01lc3NhZ2V9OiAke1N0cmluZyhlcnIpfWApO1xufVxuXG5mdW5jdGlvbiB1bnJlZih0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4pOiB2b2lkIHtcbiAgY29uc3QgdCA9IHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH07XG4gIGlmICh0eXBlb2YgdC51bnJlZiA9PT0gJ2Z1bmN0aW9uJykgdC51bnJlZigpO1xufVxuIl19
|
package/dist/realtime/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* getToken: () => session.jwt(),
|
|
15
15
|
* });
|
|
16
16
|
*
|
|
17
|
-
* const sub = client.subscribe(
|
|
17
|
+
* const sub = client.subscribe('delivery-updates', {
|
|
18
18
|
* onUpdate(event, meta) { render(event.data); },
|
|
19
19
|
* onError(err) { showOffline(err); },
|
|
20
20
|
* });
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
* stays a few KB in a frontend bundle and works unchanged in React
|
|
28
28
|
* Native. Do not import from `../` here.
|
|
29
29
|
*/
|
|
30
|
+
export { isChannelName, toChannelPath, nameFromChannelPath } from './channel';
|
|
30
31
|
import { connect } from './connect';
|
|
31
32
|
export declare const realtime: {
|
|
32
33
|
connect: typeof connect;
|
package/dist/realtime/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports.EVENT_WS_SUBPROTOCOL = exports.endpointsFor = exports.API_BASE = exports.isNewer = exports.asRealtimeEvent = exports.jitteredBackoff = exports.connect = exports.realtime = void 0;
|
|
3
|
+
exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports.EVENT_WS_SUBPROTOCOL = exports.endpointsFor = exports.API_BASE = exports.isNewer = exports.asRealtimeEvent = exports.jitteredBackoff = exports.connect = exports.realtime = exports.nameFromChannelPath = exports.toChannelPath = exports.isChannelName = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* `@uengage.io/platform-sdk/realtime` — browser-safe realtime client.
|
|
6
6
|
*
|
|
@@ -17,7 +17,7 @@ exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports
|
|
|
17
17
|
* getToken: () => session.jwt(),
|
|
18
18
|
* });
|
|
19
19
|
*
|
|
20
|
-
* const sub = client.subscribe(
|
|
20
|
+
* const sub = client.subscribe('delivery-updates', {
|
|
21
21
|
* onUpdate(event, meta) { render(event.data); },
|
|
22
22
|
* onError(err) { showOffline(err); },
|
|
23
23
|
* });
|
|
@@ -30,6 +30,10 @@ exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports
|
|
|
30
30
|
* stays a few KB in a frontend bundle and works unchanged in React
|
|
31
31
|
* Native. Do not import from `../` here.
|
|
32
32
|
*/
|
|
33
|
+
var channel_1 = require("./channel");
|
|
34
|
+
Object.defineProperty(exports, "isChannelName", { enumerable: true, get: function () { return channel_1.isChannelName; } });
|
|
35
|
+
Object.defineProperty(exports, "toChannelPath", { enumerable: true, get: function () { return channel_1.toChannelPath; } });
|
|
36
|
+
Object.defineProperty(exports, "nameFromChannelPath", { enumerable: true, get: function () { return channel_1.nameFromChannelPath; } });
|
|
33
37
|
const connect_1 = require("./connect");
|
|
34
38
|
exports.realtime = { connect: connect_1.connect };
|
|
35
39
|
var connect_2 = require("./connect");
|
|
@@ -46,4 +50,4 @@ Object.defineProperty(exports, "EVENT_WS_SUBPROTOCOL", { enumerable: true, get:
|
|
|
46
50
|
Object.defineProperty(exports, "authHeader", { enumerable: true, get: function () { return protocol_1.authHeader; } });
|
|
47
51
|
Object.defineProperty(exports, "authSubprotocol", { enumerable: true, get: function () { return protocol_1.authSubprotocol; } });
|
|
48
52
|
Object.defineProperty(exports, "base64UrlEncode", { enumerable: true, get: function () { return protocol_1.base64UrlEncode; } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVhbHRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxxQ0FBOEU7QUFBckUsd0dBQUEsYUFBYSxPQUFBO0FBQUUsd0dBQUEsYUFBYSxPQUFBO0FBQUUsOEdBQUEsbUJBQW1CLE9BQUE7QUFDMUQsdUNBQW9DO0FBRXZCLFFBQUEsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFQLGlCQUFPLEVBQUUsQ0FBQztBQUVwQyxxQ0FVbUI7QUFUakIsa0dBQUEsT0FBTyxPQUFBO0FBQ1AsMEdBQUEsZUFBZSxPQUFBO0FBU2pCLHVDQUEwRTtBQUFqRSwyR0FBQSxlQUFlLE9BQUE7QUFBRSxtR0FBQSxPQUFPLE9BQUE7QUFDakMseUNBQStGO0FBQXRGLHFHQUFBLFFBQVEsT0FBQTtBQUFFLHlHQUFBLFlBQVksT0FBQTtBQUMvQix1Q0FBZ0c7QUFBdkYsZ0hBQUEsb0JBQW9CLE9BQUE7QUFBRSxzR0FBQSxVQUFVLE9BQUE7QUFBRSwyR0FBQSxlQUFlLE9BQUE7QUFBRSwyR0FBQSxlQUFlLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBAdWVuZ2FnZS5pby9wbGF0Zm9ybS1zZGsvcmVhbHRpbWVgIOKAlCBicm93c2VyLXNhZmUgcmVhbHRpbWUgY2xpZW50LlxuICpcbiAqIEEgdGhpbiBjbGllbnQgZm9yIHRoZSBwbGF0Zm9ybSdzIEFwcFN5bmMgRXZlbnRzIEFQSTogaXQgb3ducyB0aGUgd2lyZVxuICogcHJvdG9jb2wsIHRoZSBrZWVwYWxpdmUgd2F0Y2hkb2csIHJlY29ubmVjdCB3aXRoIGppdHRlcmVkIGJhY2tvZmYsXG4gKiByZXN1YnNjcmliZSwgdG9rZW4gcmVmcmVzaCwgc25hcHNob3QgY2F0Y2gtdXAgb24gZXZlcnkgKHJlKWNvbm5lY3QsXG4gKiBhbmQgVUxJRC1iYXNlZCBvcmRlcmluZy9kZWR1cGUuIEFwcHMgb3duIHJlbmRlcmluZyBhbmQgY2hhbm5lbCBuYW1lcy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVhbHRpbWUgfSBmcm9tICdAdWVuZ2FnZS5pby9wbGF0Zm9ybS1zZGsvcmVhbHRpbWUnO1xuICpcbiAqIGNvbnN0IGNsaWVudCA9IHJlYWx0aW1lLmNvbm5lY3Qoe1xuICogICBlbnY6ICdwcm9kJyxcbiAqICAgZ2V0VG9rZW46ICgpID0+IHNlc3Npb24uand0KCksXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBzdWIgPSBjbGllbnQuc3Vic2NyaWJlKCdkZWxpdmVyeS11cGRhdGVzJywge1xuICogICBvblVwZGF0ZShldmVudCwgbWV0YSkgeyByZW5kZXIoZXZlbnQuZGF0YSk7IH0sXG4gKiAgIG9uRXJyb3IoZXJyKSB7IHNob3dPZmZsaW5lKGVycik7IH0sXG4gKiB9KTtcbiAqXG4gKiBzdWIudW5zdWJzY3JpYmUoKTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgc3VicGF0aCBpcyBkZWxpYmVyYXRlbHkgaXNvbGF0ZWQgZnJvbSB0aGUgU0RLJ3MgbWFpbiBlbnRyeTogemVyb1xuICogcnVudGltZSBkZXBlbmRlbmNpZXMsIG5vIE5vZGUgYnVpbHQtaW5zLCBubyBzZXJ2ZXIgYXV0aCBjb2RlLCBzbyBpdFxuICogc3RheXMgYSBmZXcgS0IgaW4gYSBmcm9udGVuZCBidW5kbGUgYW5kIHdvcmtzIHVuY2hhbmdlZCBpbiBSZWFjdFxuICogTmF0aXZlLiBEbyBub3QgaW1wb3J0IGZyb20gYC4uL2AgaGVyZS5cbiAqL1xuZXhwb3J0IHsgaXNDaGFubmVsTmFtZSwgdG9DaGFubmVsUGF0aCwgbmFtZUZyb21DaGFubmVsUGF0aCB9IGZyb20gJy4vY2hhbm5lbCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAnLi9jb25uZWN0JztcblxuZXhwb3J0IGNvbnN0IHJlYWx0aW1lID0geyBjb25uZWN0IH07XG5cbmV4cG9ydCB7XG4gIGNvbm5lY3QsXG4gIGppdHRlcmVkQmFja29mZixcbiAgdHlwZSBSZWFsdGltZUNsaWVudCxcbiAgdHlwZSBSZWFsdGltZUNvbm5lY3RPcHRpb25zLFxuICB0eXBlIFN1YnNjcmlwdGlvbixcbiAgdHlwZSBTdWJzY3JpYmVPcHRpb25zLFxuICB0eXBlIFVwZGF0ZU1ldGEsXG4gIHR5cGUgTWluaW1hbFdlYlNvY2tldCxcbiAgdHlwZSBXZWJTb2NrZXRDdG9yLFxufSBmcm9tICcuL2Nvbm5lY3QnO1xuZXhwb3J0IHsgYXNSZWFsdGltZUV2ZW50LCBpc05ld2VyLCB0eXBlIFJlYWx0aW1lRXZlbnQgfSBmcm9tICcuL2VudmVsb3BlJztcbmV4cG9ydCB7IEFQSV9CQVNFLCBlbmRwb2ludHNGb3IsIHR5cGUgUmVhbHRpbWVFbmRwb2ludHMsIHR5cGUgUmVhbHRpbWVFbnYgfSBmcm9tICcuL2VuZHBvaW50cyc7XG5leHBvcnQgeyBFVkVOVF9XU19TVUJQUk9UT0NPTCwgYXV0aEhlYWRlciwgYXV0aFN1YnByb3RvY29sLCBiYXNlNjRVcmxFbmNvZGUgfSBmcm9tICcuL3Byb3RvY29sJztcbiJdfQ==
|
package/dist/upsell/client.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export interface UpsellClient {
|
|
|
18
18
|
/** GET /v1/upsell/admin/placements - raw config rows (service-actor only). */
|
|
19
19
|
adminListPlacements(opts?: {
|
|
20
20
|
parentId?: number;
|
|
21
|
+
businessId?: number;
|
|
21
22
|
}): Promise<PlacementRecord[]>;
|
|
22
23
|
/** PUT /v1/upsell/admin/placements - create/replace a config row (service-actor only). */
|
|
23
24
|
adminUpsertPlacement(input: PlacementUpsertInput): Promise<PlacementRecord>;
|
package/dist/upsell/client.js
CHANGED
|
@@ -174,9 +174,14 @@ function createUpsellClientInternal(input = {}) {
|
|
|
174
174
|
return expectJson(res);
|
|
175
175
|
},
|
|
176
176
|
async adminListPlacements(opts = {}) {
|
|
177
|
+
assertTenantIds('adminListPlacements', opts);
|
|
178
|
+
const params = new URLSearchParams();
|
|
177
179
|
if (opts.parentId !== undefined)
|
|
178
|
-
|
|
179
|
-
|
|
180
|
+
params.set('parentId', String(opts.parentId));
|
|
181
|
+
if (opts.businessId !== undefined)
|
|
182
|
+
params.set('businessId', String(opts.businessId));
|
|
183
|
+
const query = params.toString();
|
|
184
|
+
const qs = query ? `?${query}` : undefined;
|
|
180
185
|
const res = await send('GET', '/v1/upsell/admin/placements', qs);
|
|
181
186
|
const body = await expectJson(res);
|
|
182
187
|
return body.placements;
|
|
@@ -208,4 +213,4 @@ function createUpsellClientInternal(input = {}) {
|
|
|
208
213
|
};
|
|
209
214
|
return client;
|
|
210
215
|
}
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Vwc2VsbC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBa01BLGdEQUVDO0FBcE1ELHNDQUttQjtBQUNuQixzQ0FBd0M7QUFDeEMsa0NBQTRDO0FBQzVDLGtEQUF1RDtBQW1DdkQsTUFBYSxjQUFlLFNBQVEsS0FBSztJQUM5QixNQUFNLENBQVM7SUFDZixJQUFJLENBQVM7SUFFdEIsWUFBWSxNQUFjLEVBQUUsSUFBWTtRQUN0QyxLQUFLLENBQUMsY0FBYyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQVZELHdDQVVDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsS0FBYTtJQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssc0NBQXNDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsS0FBYSxFQUFFLEtBQWlEO0lBQ3ZGLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTO1FBQUUsaUJBQWlCLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekYsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ25DLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxhQUFhLEVBQUUsS0FBSyxDQUFD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QkFBb0I7Z0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzRSxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsNkJBQTZCLEVBQUUsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHO2dCQUFFLE9BQU87WUFDL0IsTUFBTSxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztLQUNGLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uZmlnU3RhdGUsXG4gIHR5cGUgUGxhdGZvcm1BdXRoLFxuICB0eXBlIFBsYXRmb3JtQXV0aElucHV0LFxuICB0eXBlIFBsYXRmb3JtQ29uZmlnSW5wdXQsXG59IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBzZW5kV2l0aEF1dGhSZXRyeSB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgbWFrZVRva2VuU291cmNlU3RhdGUgfSBmcm9tICcuLi90b2tlbi1zb3VyY2UnO1xuaW1wb3J0IHR5cGUge1xuICBQbGFjZW1lbnQsXG4gIFBsYWNlbWVudERlbGV0ZUlucHV0LFxuICBQbGFjZW1lbnRSZWNvcmQsXG4gIFBsYWNlbWVudFVwc2VydElucHV0LFxuICBQbGFjZW1lbnRzUXVlcnksXG4gIFN1Z2dlc3Rpb25zSW5wdXQsXG4gIFN1Z2dlc3Rpb25zUmVzdWx0LFxuICBVcHNlbGxFdmVudHNJbnB1dCxcbn0gZnJvbSAnLi9zY2hlbWEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VsbENsaWVudCB7XG4gIGNvbmZpZyhpbnB1dDogUGxhdGZvcm1Db25maWdJbnB1dCk6IFVwc2VsbENsaWVudDtcbiAgYXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiBVcHNlbGxDbGllbnQ7XG5cbiAgLyoqIEdFVCAvdjEvdXBzZWxsL3BsYWNlbWVudHMgLSByZXNvbHZlZCBwbGFjZW1lbnRzIGZvciBhIGNoYW5uZWwgKyB0ZW5hbnQuICovXG4gIHBsYWNlbWVudHMocXVlcnk6IFBsYWNlbWVudHNRdWVyeSk6IFByb21pc2U8UGxhY2VtZW50W10+O1xuICAvKiogUE9TVCAvdjEvdXBzZWxsL3N1Z2dlc3Rpb25zIC0gaXRlbXMgZm9yIG9uZSBwbGFjZW1lbnQgZ2l2ZW4gdGhlIGxpdmUgY2FydC4gKi9cbiAgc3VnZ2VzdChpbnB1dDogU3VnZ2VzdGlvbnNJbnB1dCk6IFByb21pc2U8U3VnZ2VzdGlvbnNSZXN1bHQ+O1xuICAvKipcbiAgICogUE9TVCAvdjEvdXBzZWxsL2V2ZW50cyAtIHJlcG9ydCBzaG93biAvIGFkZGVkIC8gaWdub3JlZCBmb3IgYVxuICAgKiByZW5kZXJlZCBwbGFjZW1lbnQuIEZpcmUtYW5kLWZvcmdldDsgZmVlZHMgYXR0YWNoLXJhdGUgbWVhc3VyZW1lbnRcbiAgICogYW5kIHRoZSB3ZWlnaHQgdHVuaW5nIHRoYXQgZm9sbG93cyBpdC5cbiAgICovXG4gIHJlcG9ydEV2ZW50cyhpbnB1dDogVXBzZWxsRXZlbnRzSW5wdXQpOiBQcm9taXNlPHsgYWNjZXB0ZWQ6IG51bWJlciB9PjtcblxuICAvKiogR0VUIC92MS91cHNlbGwvYWRtaW4vcGxhY2VtZW50cyAtIHJhdyBjb25maWcgcm93cyAoc2VydmljZS1hY3RvciBvbmx5KS4gKi9cbiAgYWRtaW5MaXN0UGxhY2VtZW50cyhvcHRzPzogeyBwYXJlbnRJZD86IG51bWJlciB9KTogUHJvbWlzZTxQbGFjZW1lbnRSZWNvcmRbXT47XG4gIC8qKiBQVVQgL3YxL3Vwc2VsbC9hZG1pbi9wbGFjZW1lbnRzIC0gY3JlYXRlL3JlcGxhY2UgYSBjb25maWcgcm93IChzZXJ2aWNlLWFjdG9yIG9ubHkpLiAqL1xuICBhZG1pblVwc2VydFBsYWNlbWVudChpbnB1dDogUGxhY2VtZW50VXBzZXJ0SW5wdXQpOiBQcm9taXNlPFBsYWNlbWVudFJlY29yZD47XG4gIC8qKiBERUxFVEUgL3YxL3Vwc2VsbC9hZG1pbi9wbGFjZW1lbnRzIC0gdGhyb3dzIFVwc2VsbEFwaUVycm9yKDQwNCkgaWYgYWJzZW50LiAqL1xuICBhZG1pbkRlbGV0ZVBsYWNlbWVudChpbnB1dDogUGxhY2VtZW50RGVsZXRlSW5wdXQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgVXBzZWxsQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xuICByZWFkb25seSBib2R5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc3RhdHVzOiBudW1iZXIsIGJvZHk6IHN0cmluZykge1xuICAgIHN1cGVyKGB1cHNlbGwgQVBJICR7c3RhdHVzfTogJHtib2R5fWApO1xuICAgIHRoaXMubmFtZSA9ICdVcHNlbGxBcGlFcnJvcic7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRQb3NpdGl2ZUludChsYWJlbDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzZWxsLiR7bGFiZWx9OiBleHBlY3RlZCBhIHBvc2l0aXZlIGludGVnZXIgKGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0pYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VGVuYW50SWRzKGxhYmVsOiBzdHJpbmcsIGlucHV0OiB7IHBhcmVudElkPzogbnVtYmVyOyBidXNpbmVzc0lkPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgaWYgKGlucHV0LnBhcmVudElkICE9PSB1bmRlZmluZWQpIGFzc2VydFBvc2l0aXZlSW50KGAke2xhYmVsfS5wYXJlbnRJZGAsIGlucHV0LnBhcmVudElkKTtcbiAgaWYgKGlucHV0LmJ1c2luZXNzSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydFBvc2l0aXZlSW50KGAke2xhYmVsfS5idXNpbmVzc0lkYCwgaW5wdXQuYnVzaW5lc3NJZCk7XG4gICAgaWYgKGlucHV0LnBhcmVudElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzZWxsLiR7bGFiZWx9OiBidXNpbmVzc0lkIHJlcXVpcmVzIHBhcmVudElkYCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGB1cHNlbGxgIG5hbWVzcGFjZS5cbiAqXG4gKiBTaGFwZSBhbmQgY29udHJhY3QgbWlycm9yIHtAbGluayBjcmVhdGVab25lc0NsaWVudH0gLSBsYXp5IGNvbmZpZ1xuICogcmVzb2x1dGlvbiB2aWEge0BsaW5rIENvbmZpZ1N0YXRlfSwgc2hhcmVkIDQwMS1yZXRyeSB2aWFcbiAqIHtAbGluayBzZW5kV2l0aEF1dGhSZXRyeX0sIGltbXV0YWJsZSBwZXItY2FsbCBjb25maWc7IG5vIGdsb2JhbHMuXG4gKlxuICogUmVhZHMgKGBwbGFjZW1lbnRzYCwgYHN1Z2dlc3RgKSBhY2NlcHQgdXNlciBvciBzZXJ2aWNlIHRva2VucyDigJRcbiAqIGNoYW5uZWwgYXBwcyBjYWxsIHRoZW0gd2l0aCBjdXN0b21lciBzZXNzaW9uIEpXVHMuIEFkbWluIG1ldGhvZHNcbiAqIHJlcXVpcmUgYSBzZXJ2aWNlLWFjdG9yIHRva2VuOyB0aGUgc2VydmVyIGFuc3dlcnMgNDAzIG90aGVyd2lzZSBhbmRcbiAqIHdlIHN1cmZhY2UgaXQgYXMge0BsaW5rIFVwc2VsbEFwaUVycm9yfS5cbiAqL1xuLyoqXG4gKiBFbnZpcm9ubWVudHMgdGhlIFNESyBrbm93cywgbWlycm9yaW5nIHRoZSByZWFsdGltZSBTREsncyBgZW52YCBvcHRpb24uXG4gKiBgYXBpQmFzZWAgb3ZlcnJpZGVzIHRoZXNlIGZvciBhIGNhbGxlciBwb2ludGluZyBhdCBzb21ldGhpbmcgZWxzZS5cbiAqL1xuY29uc3QgRU5WX0JBU0VTID0ge1xuICBwcm9kOiAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbycsXG4gIHVhdDogJ2h0dHBzOi8vYXBpLnVhdC5wbGF0Zm9ybS51ZW5nYWdlLmlvJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFVwc2VsbEVudiA9IGtleW9mIHR5cGVvZiBFTlZfQkFTRVM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHVwc2VsbC5jcmVhdGVDbGllbnQoLi4uKWAuXG4gKlxuICogRGVsaWJlcmF0ZWx5IHRoZSBTQU1FIG9wdGlvbiBuYW1lcyBhcyB0aGUgcmVhbHRpbWUgYnJvd3NlciBTREtcbiAqIChgVWVuZ2FnZS5yZWFsdGltZS5jcmVhdGVDbGllbnRgKSwgc28gYW4gZW5naW5lZXIgd2hvIGhhcyBpbnRlZ3JhdGVkXG4gKiByZWFsdGltZSBkb2VzIG5vdCBoYXZlIHRvIGxlYXJuIGEgc2Vjb25kIHNoYXBlOlxuICpcbiAqICAgZW52ICAgICAgICAgICAgJ3Byb2QnIHwgJ3VhdCcgICAgICAgICAgICAgICAgICDigJQgd2hpY2ggc2VydmVycyB0byB0YWxrIHRvXG4gKiAgIHNlcnZpY2VJZCAgICAgICsgc2VydmljZVNlY3JldCAgICAgICAgICAgICAgICAg4oCUIHBsYXRmb3JtIGNyZWRlbnRpYWxzXG4gKiAgIHRva2VuVXJsICAgICAgIGEgcm91dGUgb24gWU9VUiBzZXJ2ZXIgICAgICAgICAg4oCUIHJldHVybnMgeyB0b2tlbiwgZXhwaXJlc0luIH1cbiAqICAgYXBpQmFzZSAgICAgICAgb3ZlcnJpZGUgdGhlIHNlcnZlcnMgZGlyZWN0bHlcbiAqXG4gKiBQYXNzIGNyZWRlbnRpYWxzIE9SIHRva2VuVXJsLCBuZXZlciBib3RoLiBUb2tlbiBtaW50aW5nIGlzIGxhenk6IG5vdGhpbmcgaXNcbiAqIGZldGNoZWQgdW50aWwgdGhlIGZpcnN0IGNhbGwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzZWxsQ2xpZW50T3B0aW9ucyB7XG4gIGVudj86IFVwc2VsbEVudjtcbiAgc2VydmljZUlkPzogc3RyaW5nO1xuICBzZXJ2aWNlU2VjcmV0Pzogc3RyaW5nO1xuICAvKiogU3BhY2Utc2VwYXJhdGVkIHNjb3BlcyB0byByZXF1ZXN0IHdoZW4gbWludGluZyB3aXRoIGNyZWRlbnRpYWxzLiAqL1xuICBzY29wZT86IHN0cmluZztcbiAgLyoqIEEgcm91dGUgb24gdGhlIGNhbGxlcidzIG93biBzZXJ2ZXIgcmV0dXJuaW5nIGB7IHRva2VuLCBleHBpcmVzSW4gfWAuICovXG4gIHRva2VuVXJsPzogc3RyaW5nO1xuICAvKiogT3ZlcnJpZGUgdGhlIHJlc29sdmVkIGVudmlyb25tZW50IGhvc3QuICovXG4gIGFwaUJhc2U/OiBzdHJpbmc7XG4gIGZldGNoRm4/OiB0eXBlb2YgZmV0Y2g7XG4gIGxvZ2dlcj86IFBsYXRmb3JtQ29uZmlnSW5wdXRbJ2xvZ2dlciddO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHJlYWx0aW1lLXNoYXBlZCBvcHRpb25zIGludG8gdGhlIGludGVybmFsIGNvbmZpZy5cbiAqXG4gKiBFdmVyeSByZWplY3Rpb24gaGVyZSBoYXBwZW5zIGF0IENPTlNUUlVDVElPTiByYXRoZXIgdGhhbiBvbiB0aGUgZmlyc3RcbiAqIHJlcXVlc3QsIG1hdGNoaW5nIHJlYWx0aW1lOiBhIG1pc2NvbmZpZ3VyZWQgY2xpZW50IHNob3VsZCBmYWlsIHdoZXJlIHRoZVxuICogbWlzdGFrZSBpcywgbm90IGxhdGVyIGluc2lkZSBhIGNhcnQgcmVuZGVyLlxuICovXG5mdW5jdGlvbiByZXNvbHZlT3B0aW9ucyhvcHRpb25zOiBVcHNlbGxDbGllbnRPcHRpb25zKTogUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIGNvbnN0IHsgZW52LCBhcGlCYXNlLCBzZXJ2aWNlSWQsIHNlcnZpY2VTZWNyZXQsIHRva2VuVXJsLCBzY29wZSwgZmV0Y2hGbiwgbG9nZ2VyIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGJhc2VVcmwgPSBhcGlCYXNlID8/IChlbnYgPyBFTlZfQkFTRVNbZW52XSA6IHVuZGVmaW5lZCk7XG4gIGlmICghYmFzZVVybCkge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcihcImNyZWF0ZUNsaWVudDogZW52IGlzIHJlcXVpcmVkICgncHJvZCcgb3IgJ3VhdCcpLCBvciBwYXNzIGFwaUJhc2VcIik7XG4gIH1cbiAgaWYgKGVudiAhPT0gdW5kZWZpbmVkICYmIEVOVl9CQVNFU1tlbnZdID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoYGNyZWF0ZUNsaWVudDogdW5rbm93biBlbnYgJyR7ZW52fScg4oCUIGV4cGVjdGVkICdwcm9kJyBvciAndWF0J2ApO1xuICB9XG5cbiAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBzZXJ2aWNlSWQgIT09IHVuZGVmaW5lZCB8fCBzZXJ2aWNlU2VjcmV0ICE9PSB1bmRlZmluZWQ7XG4gIGlmIChoYXNDcmVkZW50aWFscyAmJiB0b2tlblVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdjcmVhdGVDbGllbnQ6IHBhc3Mgc2VydmljZUlkICsgc2VydmljZVNlY3JldCwgb3IgdG9rZW5Vcmwg4oCUIG5vdCBib3RoJyk7XG4gIH1cbiAgaWYgKGhhc0NyZWRlbnRpYWxzICYmIChzZXJ2aWNlSWQgPT09IHVuZGVmaW5lZCB8fCBzZXJ2aWNlU2VjcmV0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdjcmVhdGVDbGllbnQ6IHNlcnZpY2VJZCBhbmQgc2VydmljZVNlY3JldCBtdXN0IGJlIHBhc3NlZCB0b2dldGhlcicpO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWQ6IFBsYXRmb3JtQ29uZmlnSW5wdXQgPSB7IGJhc2VVcmwsIGZldGNoRm4sIGxvZ2dlciB9O1xuXG4gIGlmIChzZXJ2aWNlSWQgIT09IHVuZGVmaW5lZCAmJiBzZXJ2aWNlU2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNvbHZlZC5hdXRoID0ge1xuICAgICAgdHlwZTogJ3Rva2VuLXNvdXJjZScsXG4gICAgICBzdGF0ZTogbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiAnc2VydmljZS1jcmVkZW50aWFscycsXG4gICAgICAgICAgY2xpZW50SWQ6IHNlcnZpY2VJZCxcbiAgICAgICAgICBjbGllbnRTZWNyZXQ6IHNlcnZpY2VTZWNyZXQsXG4gICAgICAgICAgYXV0aEJhc2VVcmw6IGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgLFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICB9LFxuICAgICAgICB7IGZldGNoRm4gfSxcbiAgICAgICksXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0b2tlblVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzb2x2ZWQuYXV0aCA9IHtcbiAgICAgIHR5cGU6ICd0b2tlbi1zb3VyY2UnLFxuICAgICAgc3RhdGU6IG1ha2VUb2tlblNvdXJjZVN0YXRlKHsga2luZDogJ3Rva2VuLXVybCcsIHRva2VuVXJsIH0sIHsgZmV0Y2hGbiB9KSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFRoZSB1cHNlbGwgbmFtZXNwYWNlLCBtaXJyb3JpbmcgYFVlbmdhZ2UucmVhbHRpbWVgLlxuICpcbiAqICAgdXBzZWxsLmNyZWF0ZUNsaWVudCh7IGVudjogJ3Byb2QnLCBzZXJ2aWNlSWQsIHNlcnZpY2VTZWNyZXQgfSlcbiAqICAgdXBzZWxsLmNyZWF0ZUNsaWVudCh7IGVudjogJ3Byb2QnLCB0b2tlblVybDogJy9hcGkvdXBzZWxsLXRva2VuJyB9KVxuICovXG5leHBvcnQgY29uc3QgdXBzZWxsID0ge1xuICBjcmVhdGVDbGllbnQob3B0aW9uczogVXBzZWxsQ2xpZW50T3B0aW9ucyA9IHt9KTogVXBzZWxsQ2xpZW50IHtcbiAgICByZXR1cm4gY3JlYXRlVXBzZWxsQ2xpZW50SW50ZXJuYWwocmVzb2x2ZU9wdGlvbnMob3B0aW9ucykpO1xuICB9LFxufTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYHVwc2VsbC5jcmVhdGVDbGllbnQoeyBlbnYsIHNlcnZpY2VJZCwgc2VydmljZVNlY3JldCB9KWAuXG4gKlxuICogUHVibGlzaGVkIGluIDIuMC4wIGFuZCAyLjEuMCwgc28gaXQgc3RheXMgYXMgYSB0aGluIGFsaWFzIHJhdGhlciB0aGFuIGFcbiAqIGJyZWFraW5nIHJlbW92YWwuIEl0IHRha2VzIHRoZSByYXcgaW50ZXJuYWwgY29uZmlnIChgYmFzZVVybGAsIGBhdXRoYCkgYW5kXG4gKiBkb2VzIG5vIGVudiByZXNvbHV0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXBzZWxsQ2xpZW50KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0ID0ge30pOiBVcHNlbGxDbGllbnQge1xuICByZXR1cm4gY3JlYXRlVXBzZWxsQ2xpZW50SW50ZXJuYWwoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVcHNlbGxDbGllbnRJbnRlcm5hbChpbnB1dDogUGxhdGZvcm1Db25maWdJbnB1dCA9IHt9KTogVXBzZWxsQ2xpZW50IHtcbiAgY29uc3Qgc3RhdGUgPSBuZXcgQ29uZmlnU3RhdGUoKTtcbiAgc3RhdGUuYXBwbHkoaW5wdXQpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmQoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHF1ZXJ5Pzogc3RyaW5nLFxuICAgIGJvZHk/OiB1bmtub3duLFxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgY29uZmlnID0gc3RhdGUucmVzb2x2ZSgpO1xuICAgIGNvbnN0IHVybCA9IGAke2NvbmZpZy5iYXNlVXJsfSR7cGF0aH0ke3F1ZXJ5ID8/ICcnfWA7XG4gICAgY29uc3QgcGF5bG9hZCA9IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIHJldHVybiBzZW5kV2l0aEF1dGhSZXRyeShjb25maWcsIHsgbWV0aG9kLCBwYXRoLCB1cmwsIGJvZHk6IHBheWxvYWQgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBleHBlY3RKc29uPFQ+KHJlczogUmVzcG9uc2UpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IFVwc2VsbEFwaUVycm9yKHJlcy5zdGF0dXMsIGF3YWl0IHJlcy50ZXh0KCkpO1xuICAgIHJldHVybiAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudDogVXBzZWxsQ2xpZW50ID0ge1xuICAgIGNvbmZpZyhvcHRzKSB7XG4gICAgICBzdGF0ZS5hcHBseShvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICBhdXRoKG9wdHMpIHtcbiAgICAgIHN0YXRlLnNldEF1dGgob3B0cyk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0sXG5cbiAgICBhc3luYyBwbGFjZW1lbnRzKHF1ZXJ5KSB7XG4gICAgICBhc3NlcnRQb3NpdGl2ZUludCgncGxhY2VtZW50cy5wYXJlbnRJZCcsIHF1ZXJ5LnBhcmVudElkKTtcbiAgICAgIGFzc2VydFBvc2l0aXZlSW50KCdwbGFjZW1lbnRzLmJ1c2luZXNzSWQnLCBxdWVyeS5idXNpbmVzc0lkKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBjaGFubmVsOiBxdWVyeS5jaGFubmVsLFxuICAgICAgICBwYXJlbnRJZDogU3RyaW5nKHF1ZXJ5LnBhcmVudElkKSxcbiAgICAgICAgYnVzaW5lc3NJZDogU3RyaW5nKHF1ZXJ5LmJ1c2luZXNzSWQpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzZW5kKCdHRVQnLCAnL3YxL3Vwc2VsbC9wbGFjZW1lbnRzJywgYD8ke3BhcmFtcy50b1N0cmluZygpfWApO1xuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGV4cGVjdEpzb248eyBwbGFjZW1lbnRzOiBQbGFjZW1lbnRbXSB9PihyZXMpO1xuICAgICAgcmV0dXJuIGJvZHkucGxhY2VtZW50cztcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VnZ2VzdChpbnB1dCkge1xuICAgICAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnIHx8ICFpbnB1dC50ZW5hbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cHNlbGwuc3VnZ2VzdDogaW5wdXQgbXVzdCBpbmNsdWRlIGB0ZW5hbnRgIGFuZCBgY29udGV4dC5jYXJ0YCcpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0UG9zaXRpdmVJbnQoJ3N1Z2dlc3QudGVuYW50LnBhcmVudElkJywgaW5wdXQudGVuYW50LnBhcmVudElkKTtcbiAgICAgIGFzc2VydFBvc2l0aXZlSW50KCdzdWdnZXN0LnRlbmFudC5idXNpbmVzc0lkJywgaW5wdXQudGVuYW50LmJ1c2luZXNzSWQpO1xuICAgICAgaWYgKCFpbnB1dC5jb250ZXh0Py5jYXJ0IHx8ICFBcnJheS5pc0FycmF5KGlucHV0LmNvbnRleHQuY2FydC5pdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cHNlbGwuc3VnZ2VzdDogY29udGV4dC5jYXJ0Lml0ZW1zIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmQoJ1BPU1QnLCAnL3YxL3Vwc2VsbC9zdWdnZXN0aW9ucycsIHVuZGVmaW5lZCwgaW5wdXQpO1xuICAgICAgcmV0dXJuIGV4cGVjdEpzb248U3VnZ2VzdGlvbnNSZXN1bHQ+KHJlcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcG9ydEV2ZW50cyhpbnB1dCkge1xuICAgICAgaWYgKCFpbnB1dD8uZXZlbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cHNlbGwucmVwb3J0RXZlbnRzOiBldmVudHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheScpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0UG9zaXRpdmVJbnQoJ3JlcG9ydEV2ZW50cy50ZW5hbnQucGFyZW50SWQnLCBpbnB1dC50ZW5hbnQucGFyZW50SWQpO1xuICAgICAgYXNzZXJ0UG9zaXRpdmVJbnQoJ3JlcG9ydEV2ZW50cy50ZW5hbnQuYnVzaW5lc3NJZCcsIGlucHV0LnRlbmFudC5idXNpbmVzc0lkKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmQoJ1BPU1QnLCAnL3YxL3Vwc2VsbC9ldmVudHMnLCB1bmRlZmluZWQsIGlucHV0KTtcbiAgICAgIHJldHVybiBleHBlY3RKc29uPHsgYWNjZXB0ZWQ6IG51bWJlciB9PihyZXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBhZG1pbkxpc3RQbGFjZW1lbnRzKG9wdHMgPSB7fSkge1xuICAgICAgaWYgKG9wdHMucGFyZW50SWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgYXNzZXJ0UG9zaXRpdmVJbnQoJ2FkbWluTGlzdFBsYWNlbWVudHMucGFyZW50SWQnLCBvcHRzLnBhcmVudElkKTtcbiAgICAgIGNvbnN0IHFzID0gb3B0cy5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gYD9wYXJlbnRJZD0ke29wdHMucGFyZW50SWR9YCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmQoJ0dFVCcsICcvdjEvdXBzZWxsL2FkbWluL3BsYWNlbWVudHMnLCBxcyk7XG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgZXhwZWN0SnNvbjx7IHBsYWNlbWVudHM6IFBsYWNlbWVudFJlY29yZFtdIH0+KHJlcyk7XG4gICAgICByZXR1cm4gYm9keS5wbGFjZW1lbnRzO1xuICAgIH0sXG5cbiAgICBhc3luYyBhZG1pblVwc2VydFBsYWNlbWVudChpbnB1dCkge1xuICAgICAgYXNzZXJ0VGVuYW50SWRzKCdhZG1pblVwc2VydFBsYWNlbWVudCcsIGlucHV0KTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmQoJ1BVVCcsICcvdjEvdXBzZWxsL2FkbWluL3BsYWNlbWVudHMnLCB1bmRlZmluZWQsIGlucHV0KTtcbiAgICAgIHJldHVybiBleHBlY3RKc29uPFBsYWNlbWVudFJlY29yZD4ocmVzKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRtaW5EZWxldGVQbGFjZW1lbnQoaW5wdXQpIHtcbiAgICAgIGFzc2VydFRlbmFudElkcygnYWRtaW5EZWxldGVQbGFjZW1lbnQnLCBpbnB1dCk7XG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgY2hhbm5lbDogaW5wdXQuY2hhbm5lbCwga2V5OiBpbnB1dC5rZXkgfSk7XG4gICAgICBpZiAoaW5wdXQucGFyZW50SWQgIT09IHVuZGVmaW5lZCkgcGFyYW1zLnNldCgncGFyZW50SWQnLCBTdHJpbmcoaW5wdXQucGFyZW50SWQpKTtcbiAgICAgIGlmIChpbnB1dC5idXNpbmVzc0lkICE9PSB1bmRlZmluZWQpIHBhcmFtcy5zZXQoJ2J1c2luZXNzSWQnLCBTdHJpbmcoaW5wdXQuYnVzaW5lc3NJZCkpO1xuICAgICAgLy8gT21pdHRpbmcgcGFyZW50SWQgdGFyZ2V0cyB0aGUgcGxhdGZvcm0gZGVmYXVsdCByb3csIHdoaWNoIHRoZVxuICAgICAgLy8gc2VydmVyIHJlZnVzZXMgdG8gZGVsZXRlIHdpdGhvdXQgYW4gZXhwbGljaXQgY29uZmlybWF0aW9uLiBTZW5kXG4gICAgICAvLyB0aGUgZmxhZyB0aHJvdWdoIHJhdGhlciB0aGFuIGluZmVycmluZyBpdCwgc28gYSBjYWxsZXIgdGhhdCBtZWFudFxuICAgICAgLy8gdG8gc2NvcGUgdGhlIGRlbGV0ZSBzdGlsbCBnZXRzIHRoZSA0MDAgaW5zdGVhZCBvZiBzaWxlbnRseVxuICAgICAgLy8gd2lwaW5nIHRoZSBkZWZhdWx0IGZvciBldmVyeSB0ZW5hbnQuXG4gICAgICBpZiAoaW5wdXQuY29uZmlybURlbGV0ZURlZmF1bHQpIHBhcmFtcy5zZXQoJ2NvbmZpcm1EZWxldGVEZWZhdWx0JywgJ3RydWUnKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmQoJ0RFTEVURScsICcvdjEvdXBzZWxsL2FkbWluL3BsYWNlbWVudHMnLCBgPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCk7XG4gICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjA0KSByZXR1cm47XG4gICAgICB0aHJvdyBuZXcgVXBzZWxsQXBpRXJyb3IocmVzLnN0YXR1cywgYXdhaXQgcmVzLnRleHQoKSk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gY2xpZW50O1xufVxuIl19
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Vwc2VsbC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcU1BLGdEQUVDO0FBdk1ELHNDQUttQjtBQUNuQixzQ0FBd0M7QUFDeEMsa0NBQTRDO0FBQzVDLGtEQUF1RDtBQXNDdkQsTUFBYSxjQUFlLFNBQVEsS0FBSztJQUM5QixNQUFNLENBQVM7SUFDZixJQUFJLENBQVM7SUFFdEIsWUFBWSxNQUFjLEVBQUUsSUFBWTtRQUN0QyxLQUFLLENBQUMsY0FBYyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQVZELHdDQVVDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsS0FBYTtJQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssc0NBQXNDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsS0FBYSxFQUFFLEtBQWlEO0lBQ3ZGLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTO1FBQUUsaUJBQWlCLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekYsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ25DLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxhQUFhLEVBQUUsS0FBSyxDQUFD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QUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDakYsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVM7Z0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLGdFQUFnRTtZQUNoRSxrRUFBa0U7WUFDbEUsb0VBQW9FO1lBQ3BFLDZEQUE2RDtZQUM3RCx1Q0FBdUM7WUFDdkMsSUFBSSxLQUFLLENBQUMsb0JBQW9CO2dCQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDM0UsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLDZCQUE2QixFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRztnQkFBRSxPQUFPO1lBQy9CLE1BQU0sSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7S0FDRixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbmZpZ1N0YXRlLFxuICB0eXBlIFBsYXRmb3JtQXV0aCxcbiAgdHlwZSBQbGF0Zm9ybUF1dGhJbnB1dCxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZ0lucHV0LFxufSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQ29uZmlnRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgc2VuZFdpdGhBdXRoUmV0cnkgfSBmcm9tICcuLi9odHRwJztcbmltcG9ydCB7IG1ha2VUb2tlblNvdXJjZVN0YXRlIH0gZnJvbSAnLi4vdG9rZW4tc291cmNlJztcbmltcG9ydCB0eXBlIHtcbiAgUGxhY2VtZW50LFxuICBQbGFjZW1lbnREZWxldGVJbnB1dCxcbiAgUGxhY2VtZW50UmVjb3JkLFxuICBQbGFjZW1lbnRVcHNlcnRJbnB1dCxcbiAgUGxhY2VtZW50c1F1ZXJ5LFxuICBTdWdnZXN0aW9uc0lucHV0LFxuICBTdWdnZXN0aW9uc1Jlc3VsdCxcbiAgVXBzZWxsRXZlbnRzSW5wdXQsXG59IGZyb20gJy4vc2NoZW1hJztcblxuZXhwb3J0IGludGVyZmFjZSBVcHNlbGxDbGllbnQge1xuICBjb25maWcoaW5wdXQ6IFBsYXRmb3JtQ29uZmlnSW5wdXQpOiBVcHNlbGxDbGllbnQ7XG4gIGF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogVXBzZWxsQ2xpZW50O1xuXG4gIC8qKiBHRVQgL3YxL3Vwc2VsbC9wbGFjZW1lbnRzIC0gcmVzb2x2ZWQgcGxhY2VtZW50cyBmb3IgYSBjaGFubmVsICsgdGVuYW50LiAqL1xuICBwbGFjZW1lbnRzKHF1ZXJ5OiBQbGFjZW1lbnRzUXVlcnkpOiBQcm9taXNlPFBsYWNlbWVudFtdPjtcbiAgLyoqIFBPU1QgL3YxL3Vwc2VsbC9zdWdnZXN0aW9ucyAtIGl0ZW1zIGZvciBvbmUgcGxhY2VtZW50IGdpdmVuIHRoZSBsaXZlIGNhcnQuICovXG4gIHN1Z2dlc3QoaW5wdXQ6IFN1Z2dlc3Rpb25zSW5wdXQpOiBQcm9taXNlPFN1Z2dlc3Rpb25zUmVzdWx0PjtcbiAgLyoqXG4gICAqIFBPU1QgL3YxL3Vwc2VsbC9ldmVudHMgLSByZXBvcnQgc2hvd24gLyBhZGRlZCAvIGlnbm9yZWQgZm9yIGFcbiAgICogcmVuZGVyZWQgcGxhY2VtZW50LiBGaXJlLWFuZC1mb3JnZXQ7IGZlZWRzIGF0dGFjaC1yYXRlIG1lYXN1cmVtZW50XG4gICAqIGFuZCB0aGUgd2VpZ2h0IHR1bmluZyB0aGF0IGZvbGxvd3MgaXQuXG4gICAqL1xuICByZXBvcnRFdmVudHMoaW5wdXQ6IFVwc2VsbEV2ZW50c0lucHV0KTogUHJvbWlzZTx7IGFjY2VwdGVkOiBudW1iZXIgfT47XG5cbiAgLyoqIEdFVCAvdjEvdXBzZWxsL2FkbWluL3BsYWNlbWVudHMgLSByYXcgY29uZmlnIHJvd3MgKHNlcnZpY2UtYWN0b3Igb25seSkuICovXG4gIGFkbWluTGlzdFBsYWNlbWVudHMob3B0cz86IHtcbiAgICBwYXJlbnRJZD86IG51bWJlcjtcbiAgICBidXNpbmVzc0lkPzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxQbGFjZW1lbnRSZWNvcmRbXT47XG4gIC8qKiBQVVQgL3YxL3Vwc2VsbC9hZG1pbi9wbGFjZW1lbnRzIC0gY3JlYXRlL3JlcGxhY2UgYSBjb25maWcgcm93IChzZXJ2aWNlLWFjdG9yIG9ubHkpLiAqL1xuICBhZG1pblVwc2VydFBsYWNlbWVudChpbnB1dDogUGxhY2VtZW50VXBzZXJ0SW5wdXQpOiBQcm9taXNlPFBsYWNlbWVudFJlY29yZD47XG4gIC8qKiBERUxFVEUgL3YxL3Vwc2VsbC9hZG1pbi9wbGFjZW1lbnRzIC0gdGhyb3dzIFVwc2VsbEFwaUVycm9yKDQwNCkgaWYgYWJzZW50LiAqL1xuICBhZG1pbkRlbGV0ZVBsYWNlbWVudChpbnB1dDogUGxhY2VtZW50RGVsZXRlSW5wdXQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgVXBzZWxsQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xuICByZWFkb25seSBib2R5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc3RhdHVzOiBudW1iZXIsIGJvZHk6IHN0cmluZykge1xuICAgIHN1cGVyKGB1cHNlbGwgQVBJICR7c3RhdHVzfTogJHtib2R5fWApO1xuICAgIHRoaXMubmFtZSA9ICdVcHNlbGxBcGlFcnJvcic7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRQb3NpdGl2ZUludChsYWJlbDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzZWxsLiR7bGFiZWx9OiBleHBlY3RlZCBhIHBvc2l0aXZlIGludGVnZXIgKGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0pYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VGVuYW50SWRzKGxhYmVsOiBzdHJpbmcsIGlucHV0OiB7IHBhcmVudElkPzogbnVtYmVyOyBidXNpbmVzc0lkPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgaWYgKGlucHV0LnBhcmVudElkICE9PSB1bmRlZmluZWQpIGFzc2VydFBvc2l0aXZlSW50KGAke2xhYmVsfS5wYXJlbnRJZGAsIGlucHV0LnBhcmVudElkKTtcbiAgaWYgKGlucHV0LmJ1c2luZXNzSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydFBvc2l0aXZlSW50KGAke2xhYmVsfS5idXNpbmVzc0lkYCwgaW5wdXQuYnVzaW5lc3NJZCk7XG4gICAgaWYgKGlucHV0LnBhcmVudElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzZWxsLiR7bGFiZWx9OiBidXNpbmVzc0lkIHJlcXVpcmVzIHBhcmVudElkYCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGB1cHNlbGxgIG5hbWVzcGFjZS5cbiAqXG4gKiBTaGFwZSBhbmQgY29udHJhY3QgbWlycm9yIHtAbGluayBjcmVhdGVab25lc0NsaWVudH0gLSBsYXp5IGNvbmZpZ1xuICogcmVzb2x1dGlvbiB2aWEge0BsaW5rIENvbmZpZ1N0YXRlfSwgc2hhcmVkIDQwMS1yZXRyeSB2aWFcbiAqIHtAbGluayBzZW5kV2l0aEF1dGhSZXRyeX0sIGltbXV0YWJsZSBwZXItY2FsbCBjb25maWc7IG5vIGdsb2JhbHMuXG4gKlxuICogUmVhZHMgKGBwbGFjZW1lbnRzYCwgYHN1Z2dlc3RgKSBhY2NlcHQgdXNlciBvciBzZXJ2aWNlIHRva2VucyDigJRcbiAqIGNoYW5uZWwgYXBwcyBjYWxsIHRoZW0gd2l0aCBjdXN0b21lciBzZXNzaW9uIEpXVHMuIEFkbWluIG1ldGhvZHNcbiAqIHJlcXVpcmUgYSBzZXJ2aWNlLWFjdG9yIHRva2VuOyB0aGUgc2VydmVyIGFuc3dlcnMgNDAzIG90aGVyd2lzZSBhbmRcbiAqIHdlIHN1cmZhY2UgaXQgYXMge0BsaW5rIFVwc2VsbEFwaUVycm9yfS5cbiAqL1xuLyoqXG4gKiBFbnZpcm9ubWVudHMgdGhlIFNESyBrbm93cywgbWlycm9yaW5nIHRoZSByZWFsdGltZSBTREsncyBgZW52YCBvcHRpb24uXG4gKiBgYXBpQmFzZWAgb3ZlcnJpZGVzIHRoZXNlIGZvciBhIGNhbGxlciBwb2ludGluZyBhdCBzb21ldGhpbmcgZWxzZS5cbiAqL1xuY29uc3QgRU5WX0JBU0VTID0ge1xuICBwcm9kOiAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbycsXG4gIHVhdDogJ2h0dHBzOi8vYXBpLnVhdC5wbGF0Zm9ybS51ZW5nYWdlLmlvJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFVwc2VsbEVudiA9IGtleW9mIHR5cGVvZiBFTlZfQkFTRVM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHVwc2VsbC5jcmVhdGVDbGllbnQoLi4uKWAuXG4gKlxuICogRGVsaWJlcmF0ZWx5IHRoZSBTQU1FIG9wdGlvbiBuYW1lcyBhcyB0aGUgcmVhbHRpbWUgYnJvd3NlciBTREtcbiAqIChgVWVuZ2FnZS5yZWFsdGltZS5jcmVhdGVDbGllbnRgKSwgc28gYW4gZW5naW5lZXIgd2hvIGhhcyBpbnRlZ3JhdGVkXG4gKiByZWFsdGltZSBkb2VzIG5vdCBoYXZlIHRvIGxlYXJuIGEgc2Vjb25kIHNoYXBlOlxuICpcbiAqICAgZW52ICAgICAgICAgICAgJ3Byb2QnIHwgJ3VhdCcgICAgICAgICAgICAgICAgICDigJQgd2hpY2ggc2VydmVycyB0byB0YWxrIHRvXG4gKiAgIHNlcnZpY2VJZCAgICAgICsgc2VydmljZVNlY3JldCAgICAgICAgICAgICAgICAg4oCUIHBsYXRmb3JtIGNyZWRlbnRpYWxzXG4gKiAgIHRva2VuVXJsICAgICAgIGEgcm91dGUgb24gWU9VUiBzZXJ2ZXIgICAgICAgICAg4oCUIHJldHVybnMgeyB0b2tlbiwgZXhwaXJlc0luIH1cbiAqICAgYXBpQmFzZSAgICAgICAgb3ZlcnJpZGUgdGhlIHNlcnZlcnMgZGlyZWN0bHlcbiAqXG4gKiBQYXNzIGNyZWRlbnRpYWxzIE9SIHRva2VuVXJsLCBuZXZlciBib3RoLiBUb2tlbiBtaW50aW5nIGlzIGxhenk6IG5vdGhpbmcgaXNcbiAqIGZldGNoZWQgdW50aWwgdGhlIGZpcnN0IGNhbGwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzZWxsQ2xpZW50T3B0aW9ucyB7XG4gIGVudj86IFVwc2VsbEVudjtcbiAgc2VydmljZUlkPzogc3RyaW5nO1xuICBzZXJ2aWNlU2VjcmV0Pzogc3RyaW5nO1xuICAvKiogU3BhY2Utc2VwYXJhdGVkIHNjb3BlcyB0byByZXF1ZXN0IHdoZW4gbWludGluZyB3aXRoIGNyZWRlbnRpYWxzLiAqL1xuICBzY29wZT86IHN0cmluZztcbiAgLyoqIEEgcm91dGUgb24gdGhlIGNhbGxlcidzIG93biBzZXJ2ZXIgcmV0dXJuaW5nIGB7IHRva2VuLCBleHBpcmVzSW4gfWAuICovXG4gIHRva2VuVXJsPzogc3RyaW5nO1xuICAvKiogT3ZlcnJpZGUgdGhlIHJlc29sdmVkIGVudmlyb25tZW50IGhvc3QuICovXG4gIGFwaUJhc2U/OiBzdHJpbmc7XG4gIGZldGNoRm4/OiB0eXBlb2YgZmV0Y2g7XG4gIGxvZ2dlcj86IFBsYXRmb3JtQ29uZmlnSW5wdXRbJ2xvZ2dlciddO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHJlYWx0aW1lLXNoYXBlZCBvcHRpb25zIGludG8gdGhlIGludGVybmFsIGNvbmZpZy5cbiAqXG4gKiBFdmVyeSByZWplY3Rpb24gaGVyZSBoYXBwZW5zIGF0IENPTlNUUlVDVElPTiByYXRoZXIgdGhhbiBvbiB0aGUgZmlyc3RcbiAqIHJlcXVlc3QsIG1hdGNoaW5nIHJlYWx0aW1lOiBhIG1pc2NvbmZpZ3VyZWQgY2xpZW50IHNob3VsZCBmYWlsIHdoZXJlIHRoZVxuICogbWlzdGFrZSBpcywgbm90IGxhdGVyIGluc2lkZSBhIGNhcnQgcmVuZGVyLlxuICovXG5mdW5jdGlvbiByZXNvbHZlT3B0aW9ucyhvcHRpb25zOiBVcHNlbGxDbGllbnRPcHRpb25zKTogUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIGNvbnN0IHsgZW52LCBhcGlCYXNlLCBzZXJ2aWNlSWQsIHNlcnZpY2VTZWNyZXQsIHRva2VuVXJsLCBzY29wZSwgZmV0Y2hGbiwgbG9nZ2VyIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGJhc2VVcmwgPSBhcGlCYXNlID8/IChlbnYgPyBFTlZfQkFTRVNbZW52XSA6IHVuZGVmaW5lZCk7XG4gIGlmICghYmFzZVVybCkge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcihcImNyZWF0ZUNsaWVudDogZW52IGlzIHJlcXVpcmVkICgncHJvZCcgb3IgJ3VhdCcpLCBvciBwYXNzIGFwaUJhc2VcIik7XG4gIH1cbiAgaWYgKGVudiAhPT0gdW5kZWZpbmVkICYmIEVOVl9CQVNFU1tlbnZdID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoYGNyZWF0ZUNsaWVudDogdW5rbm93biBlbnYgJyR7ZW52fScg4oCUIGV4cGVjdGVkICdwcm9kJyBvciAndWF0J2ApO1xuICB9XG5cbiAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBzZXJ2aWNlSWQgIT09IHVuZGVmaW5lZCB8fCBzZXJ2aWNlU2VjcmV0ICE9PSB1bmRlZmluZWQ7XG4gIGlmIChoYXNDcmVkZW50aWFscyAmJiB0b2tlblVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdjcmVhdGVDbGllbnQ6IHBhc3Mgc2VydmljZUlkICsgc2VydmljZVNlY3JldCwgb3IgdG9rZW5Vcmwg4oCUIG5vdCBib3RoJyk7XG4gIH1cbiAgaWYgKGhhc0NyZWRlbnRpYWxzICYmIChzZXJ2aWNlSWQgPT09IHVuZGVmaW5lZCB8fCBzZXJ2aWNlU2VjcmV0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdjcmVhdGVDbGllbnQ6IHNlcnZpY2VJZCBhbmQgc2VydmljZVNlY3JldCBtdXN0IGJlIHBhc3NlZCB0b2dldGhlcicpO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWQ6IFBsYXRmb3JtQ29uZmlnSW5wdXQgPSB7IGJhc2VVcmwsIGZldGNoRm4sIGxvZ2dlciB9O1xuXG4gIGlmIChzZXJ2aWNlSWQgIT09IHVuZGVmaW5lZCAmJiBzZXJ2aWNlU2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNvbHZlZC5hdXRoID0ge1xuICAgICAgdHlwZTogJ3Rva2VuLXNvdXJjZScsXG4gICAgICBzdGF0ZTogbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiAnc2VydmljZS1jcmVkZW50aWFscycsXG4gICAgICAgICAgY2xpZW50SWQ6IHNlcnZpY2VJZCxcbiAgICAgICAgICBjbGllbnRTZWNyZXQ6IHNlcnZpY2VTZWNyZXQsXG4gICAgICAgICAgYXV0aEJhc2VVcmw6IGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgLFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICB9LFxuICAgICAgICB7IGZldGNoRm4gfSxcbiAgICAgICksXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0b2tlblVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzb2x2ZWQuYXV0aCA9IHtcbiAgICAgIHR5cGU6ICd0b2tlbi1zb3VyY2UnLFxuICAgICAgc3RhdGU6IG1ha2VUb2tlblNvdXJjZVN0YXRlKHsga2luZDogJ3Rva2VuLXVybCcsIHRva2VuVXJsIH0sIHsgZmV0Y2hGbiB9KSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFRoZSB1cHNlbGwgbmFtZXNwYWNlLCBtaXJyb3JpbmcgYFVlbmdhZ2UucmVhbHRpbWVgLlxuICpcbiAqICAgdXBzZWxsLmNyZWF0ZUNsaWVudCh7IGVudjogJ3Byb2QnLCBzZXJ2aWNlSWQsIHNlcnZpY2VTZWNyZXQgfSlcbiAqICAgdXBzZWxsLmNyZWF0ZUNsaWVudCh7IGVudjogJ3Byb2QnLCB0b2tlblVybDogJy9hcGkvdXBzZWxsLXRva2VuJyB9KVxuICovXG5leHBvcnQgY29uc3QgdXBzZWxsID0ge1xuICBjcmVhdGVDbGllbnQob3B0aW9uczogVXBzZWxsQ2xpZW50T3B0aW9ucyA9IHt9KTogVXBzZWxsQ2xpZW50IHtcbiAgICByZXR1cm4gY3JlYXRlVXBzZWxsQ2xpZW50SW50ZXJuYWwocmVzb2x2ZU9wdGlvbnMob3B0aW9ucykpO1xuICB9LFxufTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYHVwc2VsbC5jcmVhdGVDbGllbnQoeyBlbnYsIHNlcnZpY2VJZCwgc2VydmljZVNlY3JldCB9KWAuXG4gKlxuICogUHVibGlzaGVkIGluIDIuMC4wIGFuZCAyLjEuMCwgc28gaXQgc3RheXMgYXMgYSB0aGluIGFsaWFzIHJhdGhlciB0aGFuIGFcbiAqIGJyZWFraW5nIHJlbW92YWwuIEl0IHRha2VzIHRoZSByYXcgaW50ZXJuYWwgY29uZmlnIChgYmFzZVVybGAsIGBhdXRoYCkgYW5kXG4gKiBkb2VzIG5vIGVudiByZXNvbHV0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXBzZWxsQ2xpZW50KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0ID0ge30pOiBVcHNlbGxDbGllbnQge1xuICByZXR1cm4gY3JlYXRlVXBzZWxsQ2xpZW50SW50ZXJuYWwoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVcHNlbGxDbGllbnRJbnRlcm5hbChpbnB1dDogUGxhdGZvcm1Db25maWdJbnB1dCA9IHt9KTogVXBzZWxsQ2xpZW50IHtcbiAgY29uc3Qgc3RhdGUgPSBuZXcgQ29uZmlnU3RhdGUoKTtcbiAgc3RhdGUuYXBwbHkoaW5wdXQpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmQoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHF1ZXJ5Pzogc3RyaW5nLFxuICAgIGJvZHk/OiB1bmtub3duLFxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgY29uZmlnID0gc3RhdGUucmVzb2x2ZSgpO1xuICAgIGNvbnN0IHVybCA9IGAke2NvbmZpZy5iYXNlVXJsfSR7cGF0aH0ke3F1ZXJ5ID8/ICcnfWA7XG4gICAgY29uc3QgcGF5bG9hZCA9IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIHJldHVybiBzZW5kV2l0aEF1dGhSZXRyeShjb25maWcsIHsgbWV0aG9kLCBwYXRoLCB1cmwsIGJvZHk6IHBheWxvYWQgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBleHBlY3RKc29uPFQ+KHJlczogUmVzcG9uc2UpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IFVwc2VsbEFwaUVycm9yKHJlcy5zdGF0dXMsIGF3YWl0IHJlcy50ZXh0KCkpO1xuICAgIHJldHVybiAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudDogVXBzZWxsQ2xpZW50ID0ge1xuICAgIGNvbmZpZyhvcHRzKSB7XG4gICAgICBzdGF0ZS5hcHBseShvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICBhdXRoKG9wdHMpIHtcbiAgICAgIHN0YXRlLnNldEF1dGgob3B0cyk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0sXG5cbiAgICBhc3luYyBwbGFjZW1lbnRzKHF1ZXJ5KSB7XG4gICAgICBhc3NlcnRQb3NpdGl2ZUludCgncGxhY2VtZW50cy5wYXJlbnRJZCcsIHF1ZXJ5LnBhcmVudElkKTtcbiAgICAgIGFzc2VydFBvc2l0aXZlSW50KCdwbGFjZW1lbnRzLmJ1c2luZXNzSWQnLCBxdWVyeS5idXNpbmVzc0lkKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBjaGFubmVsOiBxdWVyeS5jaGFubmVsLFxuICAgICAgICBwYXJlbnRJZDogU3RyaW5nKHF1ZXJ5LnBhcmVudElkKSxcbiAgICAgICAgYnVzaW5lc3NJZDogU3RyaW5nKHF1ZXJ5LmJ1c2luZXNzSWQpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzZW5kKCdHRVQnLCAnL3YxL3Vwc2VsbC9wbGFjZW1lbnRzJywgYD8ke3BhcmFtcy50b1N0cmluZygpfWApO1xuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGV4cGVjdEpzb248eyBwbGFjZW1lbnRzOiBQbGFjZW1lbnRbXSB9PihyZXMpO1xuICAgICAgcmV0dXJuIGJvZHkucGxhY2VtZW50cztcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VnZ2VzdChpbnB1dCkge1xuICAgICAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnIHx8ICFpbnB1dC50ZW5hbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cHNlbGwuc3VnZ2VzdDogaW5wdXQgbXVzdCBpbmNsdWRlIGB0ZW5hbnRgIGFuZCBgY29udGV4dC5jYXJ0YCcpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0UG9zaXRpdmVJbnQoJ3N1Z2dlc3QudGVuYW50LnBhcmVudElkJywgaW5wdXQudGVuYW50LnBhcmVudElkKTtcbiAgICAgIGFzc2VydFBvc2l0aXZlSW50KCdzdWdnZXN0LnRlbmFudC5idXNpbmVzc0lkJywgaW5wdXQudGVuYW50LmJ1c2luZXNzSWQpO1xuICAgICAgaWYgKCFpbnB1dC5jb250ZXh0Py5jYXJ0IHx8ICFBcnJheS5pc0FycmF5KGlucHV0LmNvbnRleHQuY2FydC5pdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cHNlbGwuc3VnZ2VzdDogY29udGV4dC5jYXJ0Lml0ZW1zIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmQoJ1BPU1QnLCAnL3YxL3Vwc2VsbC9zdWdnZXN0aW9ucycsIHVuZGVmaW5lZCwgaW5wdXQpO1xuICAgICAgcmV0dXJuIGV4cGVjdEpzb248U3VnZ2VzdGlvbnNSZXN1bHQ+KHJlcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcG9ydEV2ZW50cyhpbnB1dCkge1xuICAgICAgaWYgKCFpbnB1dD8uZXZlbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cHNlbGwucmVwb3J0RXZlbnRzOiBldmVudHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheScpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0UG9zaXRpdmVJbnQoJ3JlcG9ydEV2ZW50cy50ZW5hbnQucGFyZW50SWQnLCBpbnB1dC50ZW5hbnQucGFyZW50SWQpO1xuICAgICAgYXNzZXJ0UG9zaXRpdmVJbnQoJ3JlcG9ydEV2ZW50cy50ZW5hbnQuYnVzaW5lc3NJZCcsIGlucHV0LnRlbmFudC5idXNpbmVzc0lkKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmQoJ1BPU1QnLCAnL3YxL3Vwc2VsbC9ldmVudHMnLCB1bmRlZmluZWQsIGlucHV0KTtcbiAgICAgIHJldHVybiBleHBlY3RKc29uPHsgYWNjZXB0ZWQ6IG51bWJlciB9PihyZXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBhZG1pbkxpc3RQbGFjZW1lbnRzKG9wdHMgPSB7fSkge1xuICAgICAgYXNzZXJ0VGVuYW50SWRzKCdhZG1pbkxpc3RQbGFjZW1lbnRzJywgb3B0cyk7XG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBpZiAob3B0cy5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSBwYXJhbXMuc2V0KCdwYXJlbnRJZCcsIFN0cmluZyhvcHRzLnBhcmVudElkKSk7XG4gICAgICBpZiAob3B0cy5idXNpbmVzc0lkICE9PSB1bmRlZmluZWQpIHBhcmFtcy5zZXQoJ2J1c2luZXNzSWQnLCBTdHJpbmcob3B0cy5idXNpbmVzc0lkKSk7XG4gICAgICBjb25zdCBxdWVyeSA9IHBhcmFtcy50b1N0cmluZygpO1xuICAgICAgY29uc3QgcXMgPSBxdWVyeSA/IGA/JHtxdWVyeX1gIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VuZCgnR0VUJywgJy92MS91cHNlbGwvYWRtaW4vcGxhY2VtZW50cycsIHFzKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBleHBlY3RKc29uPHsgcGxhY2VtZW50czogUGxhY2VtZW50UmVjb3JkW10gfT4ocmVzKTtcbiAgICAgIHJldHVybiBib2R5LnBsYWNlbWVudHM7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkbWluVXBzZXJ0UGxhY2VtZW50KGlucHV0KSB7XG4gICAgICBhc3NlcnRUZW5hbnRJZHMoJ2FkbWluVXBzZXJ0UGxhY2VtZW50JywgaW5wdXQpO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VuZCgnUFVUJywgJy92MS91cHNlbGwvYWRtaW4vcGxhY2VtZW50cycsIHVuZGVmaW5lZCwgaW5wdXQpO1xuICAgICAgcmV0dXJuIGV4cGVjdEpzb248UGxhY2VtZW50UmVjb3JkPihyZXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBhZG1pbkRlbGV0ZVBsYWNlbWVudChpbnB1dCkge1xuICAgICAgYXNzZXJ0VGVuYW50SWRzKCdhZG1pbkRlbGV0ZVBsYWNlbWVudCcsIGlucHV0KTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBjaGFubmVsOiBpbnB1dC5jaGFubmVsLCBrZXk6IGlucHV0LmtleSB9KTtcbiAgICAgIGlmIChpbnB1dC5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSBwYXJhbXMuc2V0KCdwYXJlbnRJZCcsIFN0cmluZyhpbnB1dC5wYXJlbnRJZCkpO1xuICAgICAgaWYgKGlucHV0LmJ1c2luZXNzSWQgIT09IHVuZGVmaW5lZCkgcGFyYW1zLnNldCgnYnVzaW5lc3NJZCcsIFN0cmluZyhpbnB1dC5idXNpbmVzc0lkKSk7XG4gICAgICAvLyBPbWl0dGluZyBwYXJlbnRJZCB0YXJnZXRzIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IHJvdywgd2hpY2ggdGhlXG4gICAgICAvLyBzZXJ2ZXIgcmVmdXNlcyB0byBkZWxldGUgd2l0aG91dCBhbiBleHBsaWNpdCBjb25maXJtYXRpb24uIFNlbmRcbiAgICAgIC8vIHRoZSBmbGFnIHRocm91Z2ggcmF0aGVyIHRoYW4gaW5mZXJyaW5nIGl0LCBzbyBhIGNhbGxlciB0aGF0IG1lYW50XG4gICAgICAvLyB0byBzY29wZSB0aGUgZGVsZXRlIHN0aWxsIGdldHMgdGhlIDQwMCBpbnN0ZWFkIG9mIHNpbGVudGx5XG4gICAgICAvLyB3aXBpbmcgdGhlIGRlZmF1bHQgZm9yIGV2ZXJ5IHRlbmFudC5cbiAgICAgIGlmIChpbnB1dC5jb25maXJtRGVsZXRlRGVmYXVsdCkgcGFyYW1zLnNldCgnY29uZmlybURlbGV0ZURlZmF1bHQnLCAndHJ1ZScpO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VuZCgnREVMRVRFJywgJy92MS91cHNlbGwvYWRtaW4vcGxhY2VtZW50cycsIGA/JHtwYXJhbXMudG9TdHJpbmcoKX1gKTtcbiAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDQpIHJldHVybjtcbiAgICAgIHRocm93IG5ldyBVcHNlbGxBcGlFcnJvcihyZXMuc3RhdHVzLCBhd2FpdCByZXMudGV4dCgpKTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBjbGllbnQ7XG59XG4iXX0=
|
package/dist/upsell/schema.d.ts
CHANGED
|
@@ -86,12 +86,16 @@ export interface SuggestionsInput {
|
|
|
86
86
|
cart: Cart;
|
|
87
87
|
fulfilmentMode?: 'delivery' | 'pickup' | 'dine_in';
|
|
88
88
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
89
|
+
* Private upsell tokens supply this identity when omitted; any supplied ID must match.
|
|
90
|
+
* `id` is the internal contact ID; contactMappingId is the per-outlet mapping PK.
|
|
91
|
+
* Neither field accepts a mobile number.
|
|
92
92
|
*/
|
|
93
93
|
customer?: {
|
|
94
94
|
id: string;
|
|
95
|
+
contactMappingId?: number;
|
|
96
|
+
} | {
|
|
97
|
+
contactMappingId: number;
|
|
98
|
+
id?: string;
|
|
95
99
|
};
|
|
96
100
|
/**
|
|
97
101
|
* Optional; not yet acted on. Impression fatigue is session-scoped
|
package/dist/upsell/schema.js
CHANGED
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
* admin methods.
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Vwc2VsbC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlIHN1cmZhY2UgZm9yIHRoZSBwbGF0Zm9ybSBVcHNlbGwgQVBJLlxuICpcbiAqIFR3byBjb25zdW1lci1mYWNpbmcgY2FsbHM6IGBwbGFjZW1lbnRzKC4uLilgICh3aGljaCB1cHNlbGwgc3VyZmFjZXMgYVxuICogY2hhbm5lbCBzaG91bGQgcmVuZGVyIGZvciBhIHRlbmFudCkgYW5kIGBzdWdnZXN0KC4uLilgIChpdGVtcyBmb3Igb25lXG4gKiBwbGFjZW1lbnQgZ2l2ZW4gdGhlIGxpdmUgY2FydCkuIGByZXBvcnRFdmVudHMoLi4uKWAgZmVlZHMgYXR0YWNoLXJhdGVcbiAqIHRlbGVtZXRyeS4gUGxhY2VtZW50IGNvbmZpZyBpcyBtYW5hZ2VkIHZpYSB0aGUgc2VydmljZS1hY3Rvci1vbmx5XG4gKiBhZG1pbiBtZXRob2RzLlxuICovXG5cbmV4cG9ydCB0eXBlIENoYW5uZWwgPSAnbW9iaWxlX2FwcCcgfCAna2lvc2snIHwgJ3doaXRlbGFiZWxfd2ViJyB8ICd3aGF0c2FwcCcgfCAndm9pY2UnO1xuXG4vKipcbiAqIEEgbW9tZW50IGluIHRoZSBjdXN0b21lciBqb3VybmV5IOKAlCB0aGUgdW5pdCBvZiBwbGF0Zm9ybSBwb2xpY3lcbiAqIChwcmljZSBiYW5kLCBtYXggaXRlbXMsIGFuZCBsYXRlciB0aGUgc2lnbmFsIHdlaWdodCBwcm9maWxlKS4gQVxuICogcGxhY2VtZW50IGlzIGEgY2hhbm5lbCdzIGpvdXJuZXkgbGFiZWwgcG9pbnRpbmcgYXQgb25lIG9mIHRoZXNlLlxuICovXG5leHBvcnQgdHlwZSBUb3VjaHBvaW50ID1cbiAgfCAnaG9tZSdcbiAgfCAnbWVudV9icm93c2luZydcbiAgfCAnbWVudV9jb21wb3NpbmcnXG4gIHwgJ3NlYXJjaF9ub19yZXN1bHQnXG4gIHwgJ2NhcnQnXG4gIHwgJ3ByZV9jaGVja291dCdcbiAgfCAncG9zdF9vcmRlcic7XG5cbi8qKlxuICogUmVuZGVyaW5nIGhpbnQsIG93bmVkIGJ5IHRoZSBjaGFubmVsIGZyb250ZW5kIOKAlCB0aGUgcGxhdGZvcm0gbmV2ZXJcbiAqIGludGVycHJldHMgaXQuIEtub3duIHZhbHVlcyBhcmUgbGlzdGVkIGZvciBlZGl0b3IgY29tcGxldGlvbiwgYnV0IGFueVxuICogbG93ZXJjYXNlIGlkZW50aWZpZXIgaXMgdmFsaWQgc28gbmV3IGxheW91dHMgbmVlZCBubyBTREsgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgS25vd25MYXlvdXQgPVxuICB8ICdjYXJvdXNlbF8ydXAnXG4gIHwgJ2hvcml6b250YWxfY2Fyb3VzZWwnXG4gIHwgJ2dyaWRfMnhuX21vZGFsJ1xuICB8ICdjYXJvdXNlbF8xdXAnXG4gIHwgJ3ZlcnRpY2FsX2xpc3QnXG4gIHwgJ2dyaWRfM3huJ1xuICB8ICdjb21wYWN0X2xpc3QnXG4gIHwgJ2hlcm9fYmFubmVyJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0ID0gS25vd25MYXlvdXQgfCAoc3RyaW5nICYge30pO1xuXG4vKiogV2h5IGFuIGl0ZW0gd2FzIHJlY29tbWVuZGVkLiBDaGFubmVscyByZW5kZXIgdGhlc2UgaW4gY3VzdG9tZXIgbGFuZ3VhZ2UuICovXG5leHBvcnQgdHlwZSBSZWFzb25Db2RlID1cbiAgfCAncG9wdWxhcl9ub3cnXG4gIHwgJ2NvbXBsZXRlc19tZWFsJ1xuICB8ICdvZnRlbl9vcmRlcmVkX3RvZ2V0aGVyJ1xuICB8ICd5b3VyX3VzdWFsJ1xuICB8ICdjaGVmc19waWNrJztcblxuLyoqXG4gKiBXaGljaCBsYXllciBwcm9kdWNlZCBhbiBpdGVtLlxuICpcbiAqIFNlcGFyYXRlIGZyb20gYHJlYXNvbkNvZGVgIG9uIHB1cnBvc2U6IGByZWFzb25Db2RlYCBpcyBjdXN0b21lci1mYWNpbmdcbiAqIGNvcHkgdGhlIGNoYW5uZWwgcmVuZGVycyAoXCJQb3B1bGFyIHJpZ2h0IG5vd1wiKSwgc28gb3ZlcmxvYWRpbmcgaXQgd2l0aFxuICogcHJvdmVuYW5jZSB3b3VsZCBjaGFuZ2UgdGhlIGN1c3RvbWVyJ3MgdmlzaWJsZSBsYWJlbCB3aGVuZXZlciB0aGVcbiAqIHNvdXJjZSBjaGFuZ2VkLlxuICpcbiAqICAgYWxnb3JpdGhtICAgICDigJQgc2NvcmVkIGJ5IHRoZSBlbmdpbmUsIHByaW9yaXR5IHBpbnMgaW5jbHVkZWRcbiAqICAgbWVyY2hhbnRfbGlzdCDigJQgdGhlIG1lcmNoYW50J3Mgb3duIGxpc3QgcmVwbGFjZWQgdGhlIGFsZ29yaXRobVxuICogICBmYWxsYmFjayAgICAgIOKAlCB0b3BwZWQgdXAgZnJvbSB0aGUgYmFja3VwIGxpc3QsIHNhZmV0eSBydWxlcyBvbmx5XG4gKi9cbmV4cG9ydCB0eXBlIEl0ZW1Tb3VyY2UgPSAnYWxnb3JpdGhtJyB8ICdtZXJjaGFudF9saXN0JyB8ICdmYWxsYmFjayc7XG5cbi8qKiBXaGljaCBydW5nIG9mIHRoZSByZXNvbHV0aW9uIGxhZGRlciBhbnN3ZXJlZCB0aGUgcmVxdWVzdC4gKi9cbmV4cG9ydCB0eXBlIExhZGRlclJ1bmcgPVxuICB8ICdmdWxsX2VuZ2luZSdcbiAgfCAnYmFuZF9yZWxheGF0aW9uJ1xuICB8ICdwb3B1bGFyaXR5X2Zsb29yJ1xuICB8ICdiYWNrdXBfc3VnZ2VzdGlvbnMnXG4gIHwgJ2VtcHR5X2RlZ3JhZGVkJztcblxuZXhwb3J0IHR5cGUgVXBzZWxsU3RyYXRlZ3kgPVxuICB8ICdtZW51LW9yZGVyLXBvcHVsYXJpdHknXG4gIHwgJ2xlZ2FjeS1jYXRhbG9nLXNhbXBsZSdcbiAgLyoqXG4gICAqIFRoZSBtZXJjaGFudCdzIG93biBsaXN0IHJlcGxhY2VzIHRoZSBhbGdvcml0aG0gYXQgdGhpcyBwbGFjZW1lbnQuXG4gICAqIFJlcXVpcmVzIGBzdHJhdGVneVBhcmFtcy5tZXJjaGFudExpc3RJdGVtU2x1Z3NgOyBhbiBlbXB0eSBsaXN0IGZhbGxzXG4gICAqIGJhY2sgdG8gYG1lbnUtb3JkZXItcG9wdWxhcml0eWAgcmF0aGVyIHRoYW4gc2VydmluZyBub3RoaW5nLlxuICAgKi9cbiAgfCAnbWVyY2hhbnQtbGlzdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50RGlzcGxheSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBSZXF1ZXN0ZWQgY291bnQuIFRvdWNocG9pbnQgcG9saWN5IG1heSBjYXAgaXQgbG93ZXIg4oCUIHNlZSBgbWV0YS5tYXhJdGVtc2AuICovXG4gIG1heEl0ZW1zOiBudW1iZXI7XG4gIGxheW91dDogTGF5b3V0O1xufVxuXG4vKiogUmVzb2x2ZWQgcHVibGljIHBsYWNlbWVudCAoYnVzaW5lc3Mgb3ZlcnJpZGUgPiBicmFuZCA+IHBsYXRmb3JtIGRlZmF1bHQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnQge1xuICBrZXk6IHN0cmluZztcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgdG91Y2hwb2ludDogVG91Y2hwb2ludDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzcGxheTogUGxhY2VtZW50RGlzcGxheTtcbiAgY29uZmlnVmVyc2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudCB7XG4gIHBhcmVudElkOiBudW1iZXI7XG4gIGJ1c2luZXNzSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJ0SXRlbSB7XG4gIGl0ZW1JZDogbnVtYmVyO1xuICBxdHk6IG51bWJlcjtcbiAgdW5pdFByaWNlOiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbDsgbGV0cyB0aGUgZGlldGFyeSBnYXRlIGFuZCBjYXRlZ29yeSBuby1yZXBlYXQgc2VlIGNhcnQgY29udGVudHMuICovXG4gIGl0ZW1TbHVnPzogc3RyaW5nO1xuICBzZWN0aW9uTmFtZT86IHN0cmluZztcbiAgLyoqIExlZ2FjeSB2ZWdOb252ZWdCb3RoIGZsYWc6IDEgdmVnLCAyIG5vbi12ZWcsIDMgYm90aC9lZ2cuICovXG4gIHZlZz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJ0IHtcbiAgaXRlbXM6IENhcnRJdGVtW107XG4gIHN1YnRvdGFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VnZ2VzdGlvbnNJbnB1dCB7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIHBsYWNlbWVudDogc3RyaW5nO1xuICB0ZW5hbnQ6IFRlbmFudDtcbiAgY29udGV4dDoge1xuICAgIGNhcnQ6IENhcnQ7XG4gICAgZnVsZmlsbWVudE1vZGU/OiAnZGVsaXZlcnknIHwgJ3BpY2t1cCcgfCAnZGluZV9pbic7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWw7IHVudXNlZCBieSB0aGUgdjEgc2NvcmVycy4gSW4gdGhlIGNvbnRyYWN0IGZyb20gZGF5IG9uZVxuICAgICAqIHNvIHBlcnNvbmFsaXphdGlvbiBsYW5kcyB3aXRob3V0IGEgYnJlYWsuIGBpZGAgTVVTVCBiZSB0aGUgb3BhcXVlXG4gICAgICogcGxhdGZvcm0gY3VzdG9tZXIgaWQsIG5ldmVyIGEgbW9iaWxlIG51bWJlci5cbiAgICAgKi9cbiAgICBjdXN0b21lcj86IHsgaWQ6IHN0cmluZyB9O1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsOyBub3QgeWV0IGFjdGVkIG9uLiBJbXByZXNzaW9uIGZhdGlndWUgaXMgc2Vzc2lvbi1zY29wZWRcbiAgICAgKiBhbmQgc2hhcmVkIGFjcm9zcyB0b3VjaHBvaW50cyDigJQgc2VuZCBpdCBub3cgc28gY2hhbm5lbHNcbiAgICAgKiBpbnN0cnVtZW50IG9uY2UgcmF0aGVyIHRoYW4gdHdpY2UuXG4gICAgICovXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIE9uZSBjaG9vc2FibGUgc2l6ZSBvZiBhbiBpdGVtIHdpdGggdmFyaWFudHMg4oCUIHdoYXQgYSBwaWNrZXIgbGlzdHMuXG4gKlxuICogYGl0ZW1JZGAgaGVyZSBpcyB3aGF0IGdvZXMgaW50byB0aGUgY2FydCBsaW5lIG9uY2UgdGhlIGN1c3RvbWVyXG4gKiBjaG9vc2VzLiBSZXBvcnQgaXQgYmFjayB0byBgL2V2ZW50c2AgYXMgYHZhcmlhbnRJdGVtSWRgLCBrZWVwaW5nIHRoZVxuICogZXZlbnQncyBvd24gYGl0ZW1JZGAgYXMgdGhlIERJU0gg4oCUIG90aGVyd2lzZSB0aGUgYGFkZGVkYCBldmVudCBuZXZlclxuICogam9pbnMgdG8gdGhlIGBzaG93bmAgdGhhdCBwcmVjZWRlZCBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHNlbGxWYXJpYW50IHtcbiAgaXRlbUlkOiBudW1iZXI7XG4gIGl0ZW1OYW1lOiBzdHJpbmc7XG4gIGl0ZW1TbHVnOiBzdHJpbmcgfCBudWxsO1xuICAvKiogU2VsbGluZyBwcmljZSBvZiBUSElTIHNpemUgKElOUikuICovXG4gIHByaWNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBzZWxsSXRlbSB7XG4gIGl0ZW1JZDogbnVtYmVyO1xuICBpdGVtTmFtZTogc3RyaW5nO1xuICBpdGVtU2x1Zzogc3RyaW5nIHwgbnVsbDtcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIHNlY3Rpb25JZDogbnVtYmVyIHwgbnVsbDtcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBTZWxsaW5nIHByaWNlIChJTlIpLiAqL1xuICBwcmljZTogbnVtYmVyO1xuICBpbWFnZTogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJhdyBsZWdhY3kgYHZlZ05vbnZlZ0JvdGhgIGZsYWcsIHBhc3NlZCB0aHJvdWdoIHVudHJhbnNsYXRlZC4gKi9cbiAgdmVnOiBudW1iZXIgfCBudWxsO1xuICBicmFuZElkOiBudW1iZXIgfCBudWxsO1xuICAvKipcbiAgICogVHJ1ZSB3aGVuIGBwcmljZWAgaXMgYSBGUk9NIHByaWNlIGFuZCB0aGUgY3VzdG9tZXIgbXVzdCBjaG9vc2UgYVxuICAgKiBzaXplIGJlZm9yZSB0aGlzIGNhbiBiZSBhZGRlZC4gT3BlbiB5b3VyIHNpemUgcGlja2VyIG92ZXJcbiAgICogYHZhcmlhbnRzYCBpbnN0ZWFkIG9mIGFkZGluZyBgaXRlbUlkYCB0byB0aGUgY2FydCDigJQgYGl0ZW1JZGAgaXMgdGhlXG4gICAqIGRpc2gsIHdoaWNoIGNhcnJpZXMgbm8gcHJpY2Ugb2YgaXRzIG93biBhbmQgaXMgbm90IG9yZGVyYWJsZS5cbiAgICpcbiAgICogT25seSBldmVyIHRydWUgb24gYSBjaGFubmVsICsgdG91Y2hwb2ludCB0aGUgcGxhdGZvcm0gaGFzIG9wZW5lZFxuICAgKiBmb3IgdmFyaWFudCBwaWNrZXJzLCBzbyBhIHN1cmZhY2UgdGhhdCBjYW5ub3QgcmVuZGVyIG9uZSBuZXZlciBzZWVzXG4gICAqIGl0IHNldCBhbmQgbmVlZHMgbm8gY29kZSBmb3IgaXQuXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYHNvdXJjZWAgYmVsb3c6IGFuIFNESyBpcyByb3V0aW5lbHlcbiAgICogbmV3ZXIgdGhhbiB0aGUgZGVwbG95bWVudCBpdCB0YWxrcyB0by5cbiAgICovXG4gIGhhc1ZhcmlhbnRzPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBjaG9vc2FibGUgc2l6ZXMsIGluIHRoZSBtZXJjaGFudCdzIG9yZGVyLiBFbXB0eSB1bmxlc3MgYGhhc1ZhcmlhbnRzYC4gKi9cbiAgdmFyaWFudHM/OiBVcHNlbGxWYXJpYW50W107XG4gIHJlYXNvbkNvZGU6IFJlYXNvbkNvZGU7XG4gIC8qKlxuICAgKiBXaGljaCBsYXllciBwcm9kdWNlZCB0aGlzIGl0ZW0uXG4gICAqXG4gICAqIE9wdGlvbmFsIG9uIHB1cnBvc2UsIGFuZCBpdCBzdGF5cyBvcHRpb25hbC4gVGhlIHNlcnZpY2UgYWx3YXlzIHNldHNcbiAgICogaXQsIGJ1dCBhbiBTREsgaXMgcm91dGluZWx5IG5ld2VyIHRoYW4gdGhlIGRlcGxveW1lbnQgaXQgdGFsa3MgdG8g4oCUXG4gICAqIHR5cGluZyBpdCBhcyByZXF1aXJlZCB3b3VsZCBsZXQgVHlwZVNjcmlwdCBwcm9taXNlIGEgc3RyaW5nIHRoYXQgaXNcbiAgICogYHVuZGVmaW5lZGAgYXQgcnVudGltZSBhZ2FpbnN0IGFueSBzZXJ2aWNlIG9sZGVyIHRoYW4gdGhlIHJlbGVhc2VcbiAgICogdGhhdCBhZGRlZCBpdC4gTmFycm93IGl0IHlvdXJzZWxmIGlmIHlvdSBoYXZlIHBpbm5lZCBib3RoLlxuICAgKi9cbiAgc291cmNlPzogSXRlbVNvdXJjZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0aW9uc1Jlc3VsdCB7XG4gIHBsYWNlbWVudDogc3RyaW5nO1xuICB0b3VjaHBvaW50OiBUb3VjaHBvaW50O1xuICBpdGVtczogVXBzZWxsSXRlbVtdO1xuICBtZXRhOiB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBzdHJhdGVneTogVXBzZWxsU3RyYXRlZ3k7XG4gICAgY29uZmlnVmVyc2lvbjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVwIHRoYXQgUFJJTUFSSUxZIGFuc3dlcmVkIOKAlCB0aGUgZmlyc3Qgb25lIHRvIGNvbnRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBTaW5jZSB0aGUgbGFkZGVyIGJlY2FtZSBhIGZpbGwgbG9vcCwgc2V2ZXJhbCBzdGVwcyBjYW4gY29udHJpYnV0ZVxuICAgICAqIHRvIG9uZSByZXNwb25zZTsgYHJ1bmdgIG5hbWVzIHRoZSBvbmUgdGhhdCBhbnN3ZXJlZCBmaXJzdCwgc28gYVxuICAgICAqIGhlYWx0aHkgY2FyZCB0aGF0IG1lcmVseSB0b3BwZWQgdXAgaXRzIGxhc3Qgc2xvdCBkb2VzIG5vdCByZWFkIGFzXG4gICAgICogZnVsbHkgZGVncmFkZWQuIFJlYWQgYHN0ZXBzYCBmb3IgaG93IGZhciBkb3duIGl0IHdlbnQuXG4gICAgICovXG4gICAgcnVuZzogTGFkZGVyUnVuZztcbiAgICAvKipcbiAgICAgKiBFdmVyeSBzdGVwIHRoYXQgY29udHJpYnV0ZWQgYXQgbGVhc3Qgb25lIGl0ZW0sIGluIHRoZSBvcmRlciB0aGV5XG4gICAgICogcmFuLiBPcHRpb25hbCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGBVcHNlbGxJdGVtLnNvdXJjZWA6IGFuIG9sZGVyXG4gICAgICogc2VydmljZSBkb2VzIG5vdCBzZW5kIGl0LlxuICAgICAqL1xuICAgIHN0ZXBzPzogTGFkZGVyUnVuZ1tdO1xuICAgIC8qKiBFZmZlY3RpdmUgY2FwIGFwcGxpZWQ6IG1pbihkaXNwbGF5Lm1heEl0ZW1zLCB0b3VjaHBvaW50IHBvbGljeSkuICovXG4gICAgbWF4SXRlbXM6IG51bWJlcjtcbiAgICAvKiogSG93IGxvbmcgdGhlIGNsaWVudCBtYXkgcmV1c2UgdGhpcyByZXNwb25zZSwgaW4gc2Vjb25kcy4gKi9cbiAgICAvKiogU2Vjb25kcyB0aGlzIHJlc3BvbnNlIG1heSBiZSByZXVzZWQuIFpFUk8gbWVhbnMgZG8gbm90IHJldXNlIGl0LiAqL1xuICAgIHR0bFNlY29uZHM6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUcnVlIHdoZW4gdGhpcyBjdXN0b21lcidzIG93biBvcmRlciBoaXN0b3J5IHNoYXBlZCB0aGUgcmFua2luZywgc29cbiAgICAgKiB0aGUgcmVzcG9uc2UgYmVsb25ncyB0byBPTkUgcGVyc29uLlxuICAgICAqXG4gICAgICogYHR0bFNlY29uZHNgIGlzIDAgd2hlbmV2ZXIgdGhpcyBpcyBzZXQsIHNvIGEgY2xpZW50IHRoYXQgY2FjaGVzIG9uXG4gICAgICogdGhlIFRUTCBpcyBhbHJlYWR5IGNvcnJlY3QuIFJlYWQgdGhpcyBvbmx5IGlmIHlvdSB3YW50IHRvIGNhY2hlXG4gICAgICogcGVyIGN1c3RvbWVyIGluc3RlYWQgb2Ygbm90IGNhY2hpbmcg4oCUIGluIHdoaWNoIGNhc2UgdGhlIGN1c3RvbWVyXG4gICAgICogTVVTVCBiZSBwYXJ0IG9mIHlvdXIgY2FjaGUga2V5LlxuICAgICAqXG4gICAgICogT3B0aW9uYWwgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBgc291cmNlYDogYW4gU0RLIGlzIHJvdXRpbmVseVxuICAgICAqIG5ld2VyIHRoYW4gdGhlIGRlcGxveW1lbnQgaXQgdGFsa3MgdG8uXG4gICAgICovXG4gICAgcGVyc29uYWxpc2VkPzogYm9vbGVhbjtcbiAgICAvKiogVHJ1ZSB3aGVuIHRoZSBjYW5kaWRhdGUgc291cmNlIGZhaWxlZCBhbmQgdGhlIHNlcnZpY2UgZGVncmFkZWQgdG8gZW1wdHkuICovXG4gICAgZGVncmFkZWQ/OiBib29sZWFuO1xuICB9O1xufVxuXG4vKiogTWVyY2hhbnQtY29udHJvbGxlZCBzZWxlY3Rpb24gaW5wdXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJhdGVneVBhcmFtcyB7XG4gIGluY2x1ZGVkSXRlbVNsdWdzPzogc3RyaW5nW107XG4gIGluY2x1ZGVkU2VjdGlvbnM/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZWRTZWN0aW9ucz86IHN0cmluZ1tdO1xuICAvKiogXCJOZXZlciBTdWdnZXN0IFRoZXNlXCIg4oCUIGFic29sdXRlLCBvdmVycmlkZXMgdGhlIHByaW9yaXR5IGxpc3QuICovXG4gIG5ldmVyU3VnZ2VzdEl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKiogXCJNeSBQcmlvcml0eSBJdGVtc1wiIOKAlCBvY2N1cHkgcmVzZXJ2ZWQgc2xvdHMgYWhlYWQgb2Ygc2NvcmVkIGl0ZW1zLiAqL1xuICBwcmlvcml0eUl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogXCJCYWNrdXAgU3VnZ2VzdGlvbnNcIiDigJQgdXAgdG8gNiBpdGVtcy4gU2tpcHMgdGhlIHByaWNlIGJhbmQgKHRoZSBiYW5kXG4gICAqIGlzIHVzdWFsbHkgd2hhdCBlbXB0aWVkIHRoZSBwb29sKSBidXQgc3RpbGwgcmVzcGVjdHMgc3RvY2ssIGNhcnQsXG4gICAqIGV4Y2x1c2lvbnMsIGRpZXQgYW5kIGBtYXhQcmljZWAuIEl0IFRPUFMgVVAgYSBzaG9ydCBsaXN0IHJhdGhlciB0aGFuXG4gICAqIG9ubHkgZmlyaW5nIHdoZW4gZXZlcnl0aGluZyBlbHNlIHJldHVybmVkIG5vdGhpbmcsIHNvIG9uZSBzY29yZWRcbiAgICogaXRlbSBwbHVzIHR3byBiYWNrdXAgaXRlbXMgaXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICovXG4gIGJhY2t1cEl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIG1lcmNoYW50J3Mgb3duIGxpc3QgZm9yIHRoaXMgcGxhY2VtZW50LCB1cCB0byAxMiBpdGVtcy4gT25seSByZWFkXG4gICAqIHdoZW4gYHN0cmF0ZWd5YCBpcyBgbWVyY2hhbnQtbGlzdGAuXG4gICAqXG4gICAqIERpc3RpbmN0IGZyb20gYGluY2x1ZGVkSXRlbVNsdWdzYCwgd2hpY2ggaXMgYSBGSUxURVIgb3ZlciB0aGUgd2hvbGVcbiAgICogbWVudSDigJQgaXRlbXMgc3RpbGwgZ2V0IHJhbmtlZCBieSB0aGUgc3RyYXRlZ3kgYW5kIHN0aWxsIHJlcG9ydCBhc1xuICAgKiBgc291cmNlOiAnYWxnb3JpdGhtJ2AuIFRoaXMgUkVQTEFDRVMgdGhlIHBvb2wsIHJvdGF0ZXMgd2l0aGluIGl0IHNvIGFcbiAgICogMTAtaXRlbSBsaXN0IG9uIGEgMy1zbG90IGNhcmQgc2hvd3MgYWxsIHRlbiBvdmVyIHRpbWUsIGFuZCByZXBvcnRzIGFzXG4gICAqIGBzb3VyY2U6ICdtZXJjaGFudF9saXN0J2AuXG4gICAqL1xuICBtZXJjaGFudExpc3RJdGVtU2x1Z3M/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZUNhcnRJdGVtcz86IGJvb2xlYW47XG4gIG1heFByaWNlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBQbGFjZW1lbnRTY29wZSA9ICdkZWZhdWx0JyB8ICd0ZW5hbnQnIHwgJ2J1c2luZXNzJztcblxuLyoqIFJhdyBhZG1pbi1wbGFuZSBjb25maWcgcm93IChubyBwcmVjZWRlbmNlIG1lcmdlIGFwcGxpZWQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRSZWNvcmQge1xuICBzY29wZTogUGxhY2VtZW50U2NvcGU7XG4gIHBhcmVudElkPzogbnVtYmVyO1xuICBidXNpbmVzc0lkPzogbnVtYmVyO1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBrZXk6IHN0cmluZztcbiAgdG91Y2hwb2ludDogVG91Y2hwb2ludDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzcGxheTogUGxhY2VtZW50RGlzcGxheTtcbiAgc3RyYXRlZ3k6IFVwc2VsbFN0cmF0ZWd5O1xuICBzdHJhdGVneVBhcmFtczogU3RyYXRlZ3lQYXJhbXM7XG4gIGNvbmZpZ1ZlcnNpb246IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRCeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFkbWluIHVwc2VydC4gU2NvcGUgaXMgZGVyaXZlZDogbm8gcGFyZW50SWQg4oaSIHBsYXRmb3JtIGRlZmF1bHQ7XG4gKiBwYXJlbnRJZCBvbmx5IOKGkiBicmFuZCByb3c7IHBhcmVudElkICsgYnVzaW5lc3NJZCDihpIgYnVzaW5lc3Mgb3ZlcnJpZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50VXBzZXJ0SW5wdXQge1xuICBwYXJlbnRJZD86IG51bWJlcjtcbiAgYnVzaW5lc3NJZD86IG51bWJlcjtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAga2V5OiBzdHJpbmc7XG4gIHRvdWNocG9pbnQ6IFRvdWNocG9pbnQ7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGRpc3BsYXk6IFBsYWNlbWVudERpc3BsYXk7XG4gIHN0cmF0ZWd5PzogVXBzZWxsU3RyYXRlZ3k7XG4gIHN0cmF0ZWd5UGFyYW1zPzogU3RyYXRlZ3lQYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50RGVsZXRlSW5wdXQge1xuICBwYXJlbnRJZD86IG51bWJlcjtcbiAgYnVzaW5lc3NJZD86IG51bWJlcjtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAga2V5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXF1aXJlZCBieSB0aGUgc2VydmVyIHdoZW4gYHBhcmVudElkYCBpcyBvbWl0dGVkLCBiZWNhdXNlIHRoYXQgY2FsbFxuICAgKiB0YXJnZXRzIHRoZSBQTEFURk9STSBERUZBVUxUIHJvdyBhbmQgc28gcmVtb3ZlcyB0aGUgcGxhY2VtZW50IGZvclxuICAgKiBldmVyeSB0ZW5hbnQgdGhhdCBoYXMgbm90IG92ZXJyaWRkZW4gaXQuIFdpdGhvdXQgdGhpcyB0aGUgc2VydmVyXG4gICAqIHJlamVjdHMgdGhlIHJlcXVlc3Qgd2l0aCA0MDAgcmF0aGVyIHRoYW4gZ3Vlc3NpbmcgdGhhdCBhIG1pc3NpbmdcbiAgICogcGFyZW50SWQgd2FzIGRlbGliZXJhdGUuXG4gICAqXG4gICAqIERlbGliZXJhdGVseSBub3QgZGVmYXVsdGVkIHRvIGB0cnVlYCBoZXJlOiB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlXG4gICAqIGZsYWcgaXMgdGhhdCBkZWxldGluZyBhIGRlZmF1bHQgbXVzdCBiZSBzdGF0ZWQsIG5vdCBpbmZlcnJlZCBmcm9tXG4gICAqIHRoZSBzaGFwZSBvZiB0aGUgY2FsbC5cbiAgICovXG4gIGNvbmZpcm1EZWxldGVEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRzUXVlcnkge1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBwYXJlbnRJZDogbnVtYmVyO1xuICBidXNpbmVzc0lkOiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgOKUgCBBdHRhY2gtcmF0ZSB0ZWxlbWV0cnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFVwc2VsbEV2ZW50VHlwZSA9ICdzaG93bicgfCAnYWRkZWQnIHwgJ2lnbm9yZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VsbEV2ZW50IHtcbiAgdHlwZTogVXBzZWxsRXZlbnRUeXBlO1xuICAvKipcbiAgICogRWNobyB0aGUgaXRlbSdzIGBzb3VyY2VgLiBUaGlzIGlzIHdoYXQgbWFrZXMgXCJpcyBteSBsaXN0IHBlcmZvcm1pbmdcbiAgICogYmV0dGVyIHRoYW4geW91ciBhbGdvcml0aG0/XCIgYW5zd2VyYWJsZSDigJQgYXR0YWNoIHJhdGUgaXMgb25seVxuICAgKiBjb21wYXJhYmxlIGJ5IGxheWVyIGlmIHRoZSBsYXllciBpcyByZWNvcmRlZCBvbiB0aGUgZXZlbnQuXG4gICAqL1xuICBzb3VyY2U/OiBJdGVtU291cmNlO1xuICAvKipcbiAgICogQUxXQVlTIHRoZSBpZCB0aGUgc3VnZ2VzdGlvbiB3YXMgc2VydmVkIHVuZGVyLiBGb3IgYW4gaXRlbSB3aXRoXG4gICAqIGBoYXNWYXJpYW50c2AgdGhhdCBpcyB0aGUgRElTSCwgbm90IHRoZSBzaXplIHRoZSBjdXN0b21lciBjaG9zZSDigJRcbiAgICogc2VuZGluZyB0aGUgc2l6ZSBpZCBsZWF2ZXMgdGhpcyBldmVudCB1bmpvaW5hYmxlIHRvIHRoZSBgc2hvd25gXG4gICAqIHRoYXQgcHJlY2VkZWQgaXQsIHNvIGF0dGFjaCByYXRlIGZvciBldmVyeSBwaWNrZXIgY2FyZCByZWFkcyB6ZXJvLlxuICAgKi9cbiAgaXRlbUlkOiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGljaCBzaXplIHdhcyBjaG9zZW4sIHdoZW4gYGl0ZW1JZGAgaXMgYW4gaXRlbSB3aXRoIHZhcmlhbnRzLlxuICAgKiBBbnN3ZXJzIHdoZXRoZXIgYSBcImZyb20gMTQ1XCIgY2FyZCBzZWxscyBSZWd1bGFycyBvciBMYXJnZXMsIHdoaWNoXG4gICAqIGNhbm5vdCBiZSByZWNvdmVyZWQgbGF0ZXIgZnJvbSBhIGRhdGFzZXQgdGhhdCBuZXZlciBjYXJyaWVkIGl0LlxuICAgKi9cbiAgdmFyaWFudEl0ZW1JZD86IG51bWJlcjtcbiAgcmVhc29uQ29kZT86IFJlYXNvbkNvZGU7XG4gIC8qKiBJU08tODYwMS4gRGVmYXVsdHMgdG8gc2VydmVyIHJlY2VpdmUgdGltZSB3aGVuIG9taXR0ZWQuICovXG4gIG9jY3VycmVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBzZWxsRXZlbnRzSW5wdXQge1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBwbGFjZW1lbnQ6IHN0cmluZztcbiAgdGVuYW50OiBUZW5hbnQ7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgLyoqIEVjaG8gYG1ldGEuY29uZmlnVmVyc2lvbmAgZnJvbSB0aGUgcmVzcG9uc2UgYmVpbmcgcmVwb3J0ZWQgb24uICovXG4gIGNvbmZpZ1ZlcnNpb24/OiBzdHJpbmc7XG4gIGV2ZW50czogVXBzZWxsRXZlbnRbXTtcbn1cbiJdfQ==
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Vwc2VsbC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlIHN1cmZhY2UgZm9yIHRoZSBwbGF0Zm9ybSBVcHNlbGwgQVBJLlxuICpcbiAqIFR3byBjb25zdW1lci1mYWNpbmcgY2FsbHM6IGBwbGFjZW1lbnRzKC4uLilgICh3aGljaCB1cHNlbGwgc3VyZmFjZXMgYVxuICogY2hhbm5lbCBzaG91bGQgcmVuZGVyIGZvciBhIHRlbmFudCkgYW5kIGBzdWdnZXN0KC4uLilgIChpdGVtcyBmb3Igb25lXG4gKiBwbGFjZW1lbnQgZ2l2ZW4gdGhlIGxpdmUgY2FydCkuIGByZXBvcnRFdmVudHMoLi4uKWAgZmVlZHMgYXR0YWNoLXJhdGVcbiAqIHRlbGVtZXRyeS4gUGxhY2VtZW50IGNvbmZpZyBpcyBtYW5hZ2VkIHZpYSB0aGUgc2VydmljZS1hY3Rvci1vbmx5XG4gKiBhZG1pbiBtZXRob2RzLlxuICovXG5cbmV4cG9ydCB0eXBlIENoYW5uZWwgPSAnbW9iaWxlX2FwcCcgfCAna2lvc2snIHwgJ3doaXRlbGFiZWxfd2ViJyB8ICd3aGF0c2FwcCcgfCAndm9pY2UnO1xuXG4vKipcbiAqIEEgbW9tZW50IGluIHRoZSBjdXN0b21lciBqb3VybmV5IOKAlCB0aGUgdW5pdCBvZiBwbGF0Zm9ybSBwb2xpY3lcbiAqIChwcmljZSBiYW5kLCBtYXggaXRlbXMsIGFuZCBsYXRlciB0aGUgc2lnbmFsIHdlaWdodCBwcm9maWxlKS4gQVxuICogcGxhY2VtZW50IGlzIGEgY2hhbm5lbCdzIGpvdXJuZXkgbGFiZWwgcG9pbnRpbmcgYXQgb25lIG9mIHRoZXNlLlxuICovXG5leHBvcnQgdHlwZSBUb3VjaHBvaW50ID1cbiAgfCAnaG9tZSdcbiAgfCAnbWVudV9icm93c2luZydcbiAgfCAnbWVudV9jb21wb3NpbmcnXG4gIHwgJ3NlYXJjaF9ub19yZXN1bHQnXG4gIHwgJ2NhcnQnXG4gIHwgJ3ByZV9jaGVja291dCdcbiAgfCAncG9zdF9vcmRlcic7XG5cbi8qKlxuICogUmVuZGVyaW5nIGhpbnQsIG93bmVkIGJ5IHRoZSBjaGFubmVsIGZyb250ZW5kIOKAlCB0aGUgcGxhdGZvcm0gbmV2ZXJcbiAqIGludGVycHJldHMgaXQuIEtub3duIHZhbHVlcyBhcmUgbGlzdGVkIGZvciBlZGl0b3IgY29tcGxldGlvbiwgYnV0IGFueVxuICogbG93ZXJjYXNlIGlkZW50aWZpZXIgaXMgdmFsaWQgc28gbmV3IGxheW91dHMgbmVlZCBubyBTREsgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgS25vd25MYXlvdXQgPVxuICB8ICdjYXJvdXNlbF8ydXAnXG4gIHwgJ2hvcml6b250YWxfY2Fyb3VzZWwnXG4gIHwgJ2dyaWRfMnhuX21vZGFsJ1xuICB8ICdjYXJvdXNlbF8xdXAnXG4gIHwgJ3ZlcnRpY2FsX2xpc3QnXG4gIHwgJ2dyaWRfM3huJ1xuICB8ICdjb21wYWN0X2xpc3QnXG4gIHwgJ2hlcm9fYmFubmVyJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0ID0gS25vd25MYXlvdXQgfCAoc3RyaW5nICYge30pO1xuXG4vKiogV2h5IGFuIGl0ZW0gd2FzIHJlY29tbWVuZGVkLiBDaGFubmVscyByZW5kZXIgdGhlc2UgaW4gY3VzdG9tZXIgbGFuZ3VhZ2UuICovXG5leHBvcnQgdHlwZSBSZWFzb25Db2RlID1cbiAgfCAncG9wdWxhcl9ub3cnXG4gIHwgJ2NvbXBsZXRlc19tZWFsJ1xuICB8ICdvZnRlbl9vcmRlcmVkX3RvZ2V0aGVyJ1xuICB8ICd5b3VyX3VzdWFsJ1xuICB8ICdjaGVmc19waWNrJztcblxuLyoqXG4gKiBXaGljaCBsYXllciBwcm9kdWNlZCBhbiBpdGVtLlxuICpcbiAqIFNlcGFyYXRlIGZyb20gYHJlYXNvbkNvZGVgIG9uIHB1cnBvc2U6IGByZWFzb25Db2RlYCBpcyBjdXN0b21lci1mYWNpbmdcbiAqIGNvcHkgdGhlIGNoYW5uZWwgcmVuZGVycyAoXCJQb3B1bGFyIHJpZ2h0IG5vd1wiKSwgc28gb3ZlcmxvYWRpbmcgaXQgd2l0aFxuICogcHJvdmVuYW5jZSB3b3VsZCBjaGFuZ2UgdGhlIGN1c3RvbWVyJ3MgdmlzaWJsZSBsYWJlbCB3aGVuZXZlciB0aGVcbiAqIHNvdXJjZSBjaGFuZ2VkLlxuICpcbiAqICAgYWxnb3JpdGhtICAgICDigJQgc2NvcmVkIGJ5IHRoZSBlbmdpbmUsIHByaW9yaXR5IHBpbnMgaW5jbHVkZWRcbiAqICAgbWVyY2hhbnRfbGlzdCDigJQgdGhlIG1lcmNoYW50J3Mgb3duIGxpc3QgcmVwbGFjZWQgdGhlIGFsZ29yaXRobVxuICogICBmYWxsYmFjayAgICAgIOKAlCB0b3BwZWQgdXAgZnJvbSB0aGUgYmFja3VwIGxpc3QsIHNhZmV0eSBydWxlcyBvbmx5XG4gKi9cbmV4cG9ydCB0eXBlIEl0ZW1Tb3VyY2UgPSAnYWxnb3JpdGhtJyB8ICdtZXJjaGFudF9saXN0JyB8ICdmYWxsYmFjayc7XG5cbi8qKiBXaGljaCBydW5nIG9mIHRoZSByZXNvbHV0aW9uIGxhZGRlciBhbnN3ZXJlZCB0aGUgcmVxdWVzdC4gKi9cbmV4cG9ydCB0eXBlIExhZGRlclJ1bmcgPVxuICB8ICdmdWxsX2VuZ2luZSdcbiAgfCAnYmFuZF9yZWxheGF0aW9uJ1xuICB8ICdwb3B1bGFyaXR5X2Zsb29yJ1xuICB8ICdiYWNrdXBfc3VnZ2VzdGlvbnMnXG4gIHwgJ2VtcHR5X2RlZ3JhZGVkJztcblxuZXhwb3J0IHR5cGUgVXBzZWxsU3RyYXRlZ3kgPVxuICB8ICdtZW51LW9yZGVyLXBvcHVsYXJpdHknXG4gIHwgJ2xlZ2FjeS1jYXRhbG9nLXNhbXBsZSdcbiAgLyoqXG4gICAqIFRoZSBtZXJjaGFudCdzIG93biBsaXN0IHJlcGxhY2VzIHRoZSBhbGdvcml0aG0gYXQgdGhpcyBwbGFjZW1lbnQuXG4gICAqIFJlcXVpcmVzIGBzdHJhdGVneVBhcmFtcy5tZXJjaGFudExpc3RJdGVtU2x1Z3NgOyBhbiBlbXB0eSBsaXN0IGZhbGxzXG4gICAqIGJhY2sgdG8gYG1lbnUtb3JkZXItcG9wdWxhcml0eWAgcmF0aGVyIHRoYW4gc2VydmluZyBub3RoaW5nLlxuICAgKi9cbiAgfCAnbWVyY2hhbnQtbGlzdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50RGlzcGxheSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBSZXF1ZXN0ZWQgY291bnQuIFRvdWNocG9pbnQgcG9saWN5IG1heSBjYXAgaXQgbG93ZXIg4oCUIHNlZSBgbWV0YS5tYXhJdGVtc2AuICovXG4gIG1heEl0ZW1zOiBudW1iZXI7XG4gIGxheW91dDogTGF5b3V0O1xufVxuXG4vKiogUmVzb2x2ZWQgcHVibGljIHBsYWNlbWVudCAoYnVzaW5lc3Mgb3ZlcnJpZGUgPiBicmFuZCA+IHBsYXRmb3JtIGRlZmF1bHQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnQge1xuICBrZXk6IHN0cmluZztcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgdG91Y2hwb2ludDogVG91Y2hwb2ludDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzcGxheTogUGxhY2VtZW50RGlzcGxheTtcbiAgY29uZmlnVmVyc2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudCB7XG4gIHBhcmVudElkOiBudW1iZXI7XG4gIGJ1c2luZXNzSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJ0SXRlbSB7XG4gIGl0ZW1JZDogbnVtYmVyO1xuICBxdHk6IG51bWJlcjtcbiAgdW5pdFByaWNlOiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbDsgbGV0cyB0aGUgZGlldGFyeSBnYXRlIGFuZCBjYXRlZ29yeSBuby1yZXBlYXQgc2VlIGNhcnQgY29udGVudHMuICovXG4gIGl0ZW1TbHVnPzogc3RyaW5nO1xuICBzZWN0aW9uTmFtZT86IHN0cmluZztcbiAgLyoqIExlZ2FjeSB2ZWdOb252ZWdCb3RoIGZsYWc6IDEgdmVnLCAyIG5vbi12ZWcsIDMgYm90aC9lZ2cuICovXG4gIHZlZz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJ0IHtcbiAgaXRlbXM6IENhcnRJdGVtW107XG4gIHN1YnRvdGFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VnZ2VzdGlvbnNJbnB1dCB7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIHBsYWNlbWVudDogc3RyaW5nO1xuICB0ZW5hbnQ6IFRlbmFudDtcbiAgY29udGV4dDoge1xuICAgIGNhcnQ6IENhcnQ7XG4gICAgZnVsZmlsbWVudE1vZGU/OiAnZGVsaXZlcnknIHwgJ3BpY2t1cCcgfCAnZGluZV9pbic7XG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB1cHNlbGwgdG9rZW5zIHN1cHBseSB0aGlzIGlkZW50aXR5IHdoZW4gb21pdHRlZDsgYW55IHN1cHBsaWVkIElEIG11c3QgbWF0Y2guXG4gICAgICogYGlkYCBpcyB0aGUgaW50ZXJuYWwgY29udGFjdCBJRDsgY29udGFjdE1hcHBpbmdJZCBpcyB0aGUgcGVyLW91dGxldCBtYXBwaW5nIFBLLlxuICAgICAqIE5laXRoZXIgZmllbGQgYWNjZXB0cyBhIG1vYmlsZSBudW1iZXIuXG4gICAgICovXG4gICAgY3VzdG9tZXI/OlxuICAgICAgfCB7IGlkOiBzdHJpbmc7IGNvbnRhY3RNYXBwaW5nSWQ/OiBudW1iZXIgfVxuICAgICAgfCB7IGNvbnRhY3RNYXBwaW5nSWQ6IG51bWJlcjsgaWQ/OiBzdHJpbmcgfTtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbDsgbm90IHlldCBhY3RlZCBvbi4gSW1wcmVzc2lvbiBmYXRpZ3VlIGlzIHNlc3Npb24tc2NvcGVkXG4gICAgICogYW5kIHNoYXJlZCBhY3Jvc3MgdG91Y2hwb2ludHMg4oCUIHNlbmQgaXQgbm93IHNvIGNoYW5uZWxzXG4gICAgICogaW5zdHJ1bWVudCBvbmNlIHJhdGhlciB0aGFuIHR3aWNlLlxuICAgICAqL1xuICAgIHNlc3Npb25JZD86IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBPbmUgY2hvb3NhYmxlIHNpemUgb2YgYW4gaXRlbSB3aXRoIHZhcmlhbnRzIOKAlCB3aGF0IGEgcGlja2VyIGxpc3RzLlxuICpcbiAqIGBpdGVtSWRgIGhlcmUgaXMgd2hhdCBnb2VzIGludG8gdGhlIGNhcnQgbGluZSBvbmNlIHRoZSBjdXN0b21lclxuICogY2hvb3Nlcy4gUmVwb3J0IGl0IGJhY2sgdG8gYC9ldmVudHNgIGFzIGB2YXJpYW50SXRlbUlkYCwga2VlcGluZyB0aGVcbiAqIGV2ZW50J3Mgb3duIGBpdGVtSWRgIGFzIHRoZSBESVNIIOKAlCBvdGhlcndpc2UgdGhlIGBhZGRlZGAgZXZlbnQgbmV2ZXJcbiAqIGpvaW5zIHRvIHRoZSBgc2hvd25gIHRoYXQgcHJlY2VkZWQgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzZWxsVmFyaWFudCB7XG4gIGl0ZW1JZDogbnVtYmVyO1xuICBpdGVtTmFtZTogc3RyaW5nO1xuICBpdGVtU2x1Zzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFNlbGxpbmcgcHJpY2Ugb2YgVEhJUyBzaXplIChJTlIpLiAqL1xuICBwcmljZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VsbEl0ZW0ge1xuICBpdGVtSWQ6IG51bWJlcjtcbiAgaXRlbU5hbWU6IHN0cmluZztcbiAgaXRlbVNsdWc6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBzZWN0aW9uSWQ6IG51bWJlciB8IG51bGw7XG4gIHNlY3Rpb25OYW1lOiBzdHJpbmcgfCBudWxsO1xuICAvKiogU2VsbGluZyBwcmljZSAoSU5SKS4gKi9cbiAgcHJpY2U6IG51bWJlcjtcbiAgaW1hZ2U6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBSYXcgbGVnYWN5IGB2ZWdOb252ZWdCb3RoYCBmbGFnLCBwYXNzZWQgdGhyb3VnaCB1bnRyYW5zbGF0ZWQuICovXG4gIHZlZzogbnVtYmVyIHwgbnVsbDtcbiAgYnJhbmRJZDogbnVtYmVyIHwgbnVsbDtcbiAgLyoqXG4gICAqIFRydWUgd2hlbiBgcHJpY2VgIGlzIGEgRlJPTSBwcmljZSBhbmQgdGhlIGN1c3RvbWVyIG11c3QgY2hvb3NlIGFcbiAgICogc2l6ZSBiZWZvcmUgdGhpcyBjYW4gYmUgYWRkZWQuIE9wZW4geW91ciBzaXplIHBpY2tlciBvdmVyXG4gICAqIGB2YXJpYW50c2AgaW5zdGVhZCBvZiBhZGRpbmcgYGl0ZW1JZGAgdG8gdGhlIGNhcnQg4oCUIGBpdGVtSWRgIGlzIHRoZVxuICAgKiBkaXNoLCB3aGljaCBjYXJyaWVzIG5vIHByaWNlIG9mIGl0cyBvd24gYW5kIGlzIG5vdCBvcmRlcmFibGUuXG4gICAqXG4gICAqIE9ubHkgZXZlciB0cnVlIG9uIGEgY2hhbm5lbCArIHRvdWNocG9pbnQgdGhlIHBsYXRmb3JtIGhhcyBvcGVuZWRcbiAgICogZm9yIHZhcmlhbnQgcGlja2Vycywgc28gYSBzdXJmYWNlIHRoYXQgY2Fubm90IHJlbmRlciBvbmUgbmV2ZXIgc2Vlc1xuICAgKiBpdCBzZXQgYW5kIG5lZWRzIG5vIGNvZGUgZm9yIGl0LlxuICAgKlxuICAgKiBPcHRpb25hbCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGBzb3VyY2VgIGJlbG93OiBhbiBTREsgaXMgcm91dGluZWx5XG4gICAqIG5ld2VyIHRoYW4gdGhlIGRlcGxveW1lbnQgaXQgdGFsa3MgdG8uXG4gICAqL1xuICBoYXNWYXJpYW50cz86IGJvb2xlYW47XG4gIC8qKiBUaGUgY2hvb3NhYmxlIHNpemVzLCBpbiB0aGUgbWVyY2hhbnQncyBvcmRlci4gRW1wdHkgdW5sZXNzIGBoYXNWYXJpYW50c2AuICovXG4gIHZhcmlhbnRzPzogVXBzZWxsVmFyaWFudFtdO1xuICByZWFzb25Db2RlOiBSZWFzb25Db2RlO1xuICAvKipcbiAgICogV2hpY2ggbGF5ZXIgcHJvZHVjZWQgdGhpcyBpdGVtLlxuICAgKlxuICAgKiBPcHRpb25hbCBvbiBwdXJwb3NlLCBhbmQgaXQgc3RheXMgb3B0aW9uYWwuIFRoZSBzZXJ2aWNlIGFsd2F5cyBzZXRzXG4gICAqIGl0LCBidXQgYW4gU0RLIGlzIHJvdXRpbmVseSBuZXdlciB0aGFuIHRoZSBkZXBsb3ltZW50IGl0IHRhbGtzIHRvIOKAlFxuICAgKiB0eXBpbmcgaXQgYXMgcmVxdWlyZWQgd291bGQgbGV0IFR5cGVTY3JpcHQgcHJvbWlzZSBhIHN0cmluZyB0aGF0IGlzXG4gICAqIGB1bmRlZmluZWRgIGF0IHJ1bnRpbWUgYWdhaW5zdCBhbnkgc2VydmljZSBvbGRlciB0aGFuIHRoZSByZWxlYXNlXG4gICAqIHRoYXQgYWRkZWQgaXQuIE5hcnJvdyBpdCB5b3Vyc2VsZiBpZiB5b3UgaGF2ZSBwaW5uZWQgYm90aC5cbiAgICovXG4gIHNvdXJjZT86IEl0ZW1Tb3VyY2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VnZ2VzdGlvbnNSZXN1bHQge1xuICBwbGFjZW1lbnQ6IHN0cmluZztcbiAgdG91Y2hwb2ludDogVG91Y2hwb2ludDtcbiAgaXRlbXM6IFVwc2VsbEl0ZW1bXTtcbiAgbWV0YToge1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgc3RyYXRlZ3k6IFVwc2VsbFN0cmF0ZWd5O1xuICAgIGNvbmZpZ1ZlcnNpb246IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgc3RlcCB0aGF0IFBSSU1BUklMWSBhbnN3ZXJlZCDigJQgdGhlIGZpcnN0IG9uZSB0byBjb250cmlidXRlLlxuICAgICAqXG4gICAgICogU2luY2UgdGhlIGxhZGRlciBiZWNhbWUgYSBmaWxsIGxvb3AsIHNldmVyYWwgc3RlcHMgY2FuIGNvbnRyaWJ1dGVcbiAgICAgKiB0byBvbmUgcmVzcG9uc2U7IGBydW5nYCBuYW1lcyB0aGUgb25lIHRoYXQgYW5zd2VyZWQgZmlyc3QsIHNvIGFcbiAgICAgKiBoZWFsdGh5IGNhcmQgdGhhdCBtZXJlbHkgdG9wcGVkIHVwIGl0cyBsYXN0IHNsb3QgZG9lcyBub3QgcmVhZCBhc1xuICAgICAqIGZ1bGx5IGRlZ3JhZGVkLiBSZWFkIGBzdGVwc2AgZm9yIGhvdyBmYXIgZG93biBpdCB3ZW50LlxuICAgICAqL1xuICAgIHJ1bmc6IExhZGRlclJ1bmc7XG4gICAgLyoqXG4gICAgICogRXZlcnkgc3RlcCB0aGF0IGNvbnRyaWJ1dGVkIGF0IGxlYXN0IG9uZSBpdGVtLCBpbiB0aGUgb3JkZXIgdGhleVxuICAgICAqIHJhbi4gT3B0aW9uYWwgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBgVXBzZWxsSXRlbS5zb3VyY2VgOiBhbiBvbGRlclxuICAgICAqIHNlcnZpY2UgZG9lcyBub3Qgc2VuZCBpdC5cbiAgICAgKi9cbiAgICBzdGVwcz86IExhZGRlclJ1bmdbXTtcbiAgICAvKiogRWZmZWN0aXZlIGNhcCBhcHBsaWVkOiBtaW4oZGlzcGxheS5tYXhJdGVtcywgdG91Y2hwb2ludCBwb2xpY3kpLiAqL1xuICAgIG1heEl0ZW1zOiBudW1iZXI7XG4gICAgLyoqIEhvdyBsb25nIHRoZSBjbGllbnQgbWF5IHJldXNlIHRoaXMgcmVzcG9uc2UsIGluIHNlY29uZHMuICovXG4gICAgLyoqIFNlY29uZHMgdGhpcyByZXNwb25zZSBtYXkgYmUgcmV1c2VkLiBaRVJPIG1lYW5zIGRvIG5vdCByZXVzZSBpdC4gKi9cbiAgICB0dGxTZWNvbmRzOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVHJ1ZSB3aGVuIHRoaXMgY3VzdG9tZXIncyBvd24gb3JkZXIgaGlzdG9yeSBzaGFwZWQgdGhlIHJhbmtpbmcsIHNvXG4gICAgICogdGhlIHJlc3BvbnNlIGJlbG9uZ3MgdG8gT05FIHBlcnNvbi5cbiAgICAgKlxuICAgICAqIGB0dGxTZWNvbmRzYCBpcyAwIHdoZW5ldmVyIHRoaXMgaXMgc2V0LCBzbyBhIGNsaWVudCB0aGF0IGNhY2hlcyBvblxuICAgICAqIHRoZSBUVEwgaXMgYWxyZWFkeSBjb3JyZWN0LiBSZWFkIHRoaXMgb25seSBpZiB5b3Ugd2FudCB0byBjYWNoZVxuICAgICAqIHBlciBjdXN0b21lciBpbnN0ZWFkIG9mIG5vdCBjYWNoaW5nIOKAlCBpbiB3aGljaCBjYXNlIHRoZSBjdXN0b21lclxuICAgICAqIE1VU1QgYmUgcGFydCBvZiB5b3VyIGNhY2hlIGtleS5cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYHNvdXJjZWA6IGFuIFNESyBpcyByb3V0aW5lbHlcbiAgICAgKiBuZXdlciB0aGFuIHRoZSBkZXBsb3ltZW50IGl0IHRhbGtzIHRvLlxuICAgICAqL1xuICAgIHBlcnNvbmFsaXNlZD86IGJvb2xlYW47XG4gICAgLyoqIFRydWUgd2hlbiB0aGUgY2FuZGlkYXRlIHNvdXJjZSBmYWlsZWQgYW5kIHRoZSBzZXJ2aWNlIGRlZ3JhZGVkIHRvIGVtcHR5LiAqL1xuICAgIGRlZ3JhZGVkPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuLyoqIE1lcmNoYW50LWNvbnRyb2xsZWQgc2VsZWN0aW9uIGlucHV0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyYXRlZ3lQYXJhbXMge1xuICBpbmNsdWRlZEl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICBpbmNsdWRlZFNlY3Rpb25zPzogc3RyaW5nW107XG4gIGV4Y2x1ZGVkU2VjdGlvbnM/OiBzdHJpbmdbXTtcbiAgLyoqIFwiTmV2ZXIgU3VnZ2VzdCBUaGVzZVwiIOKAlCBhYnNvbHV0ZSwgb3ZlcnJpZGVzIHRoZSBwcmlvcml0eSBsaXN0LiAqL1xuICBuZXZlclN1Z2dlc3RJdGVtU2x1Z3M/OiBzdHJpbmdbXTtcbiAgLyoqIFwiTXkgUHJpb3JpdHkgSXRlbXNcIiDigJQgb2NjdXB5IHJlc2VydmVkIHNsb3RzIGFoZWFkIG9mIHNjb3JlZCBpdGVtcy4gKi9cbiAgcHJpb3JpdHlJdGVtU2x1Z3M/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFwiQmFja3VwIFN1Z2dlc3Rpb25zXCIg4oCUIHVwIHRvIDYgaXRlbXMuIFNraXBzIHRoZSBwcmljZSBiYW5kICh0aGUgYmFuZFxuICAgKiBpcyB1c3VhbGx5IHdoYXQgZW1wdGllZCB0aGUgcG9vbCkgYnV0IHN0aWxsIHJlc3BlY3RzIHN0b2NrLCBjYXJ0LFxuICAgKiBleGNsdXNpb25zLCBkaWV0IGFuZCBgbWF4UHJpY2VgLiBJdCBUT1BTIFVQIGEgc2hvcnQgbGlzdCByYXRoZXIgdGhhblxuICAgKiBvbmx5IGZpcmluZyB3aGVuIGV2ZXJ5dGhpbmcgZWxzZSByZXR1cm5lZCBub3RoaW5nLCBzbyBvbmUgc2NvcmVkXG4gICAqIGl0ZW0gcGx1cyB0d28gYmFja3VwIGl0ZW1zIGlzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAqL1xuICBiYWNrdXBJdGVtU2x1Z3M/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBtZXJjaGFudCdzIG93biBsaXN0IGZvciB0aGlzIHBsYWNlbWVudCwgdXAgdG8gMTIgaXRlbXMuIE9ubHkgcmVhZFxuICAgKiB3aGVuIGBzdHJhdGVneWAgaXMgYG1lcmNoYW50LWxpc3RgLlxuICAgKlxuICAgKiBEaXN0aW5jdCBmcm9tIGBpbmNsdWRlZEl0ZW1TbHVnc2AsIHdoaWNoIGlzIGEgRklMVEVSIG92ZXIgdGhlIHdob2xlXG4gICAqIG1lbnUg4oCUIGl0ZW1zIHN0aWxsIGdldCByYW5rZWQgYnkgdGhlIHN0cmF0ZWd5IGFuZCBzdGlsbCByZXBvcnQgYXNcbiAgICogYHNvdXJjZTogJ2FsZ29yaXRobSdgLiBUaGlzIFJFUExBQ0VTIHRoZSBwb29sLCByb3RhdGVzIHdpdGhpbiBpdCBzbyBhXG4gICAqIDEwLWl0ZW0gbGlzdCBvbiBhIDMtc2xvdCBjYXJkIHNob3dzIGFsbCB0ZW4gb3ZlciB0aW1lLCBhbmQgcmVwb3J0cyBhc1xuICAgKiBgc291cmNlOiAnbWVyY2hhbnRfbGlzdCdgLlxuICAgKi9cbiAgbWVyY2hhbnRMaXN0SXRlbVNsdWdzPzogc3RyaW5nW107XG4gIGV4Y2x1ZGVDYXJ0SXRlbXM/OiBib29sZWFuO1xuICBtYXhQcmljZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgUGxhY2VtZW50U2NvcGUgPSAnZGVmYXVsdCcgfCAndGVuYW50JyB8ICdidXNpbmVzcyc7XG5cbi8qKiBSYXcgYWRtaW4tcGxhbmUgY29uZmlnIHJvdyAobm8gcHJlY2VkZW5jZSBtZXJnZSBhcHBsaWVkKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50UmVjb3JkIHtcbiAgc2NvcGU6IFBsYWNlbWVudFNjb3BlO1xuICBwYXJlbnRJZD86IG51bWJlcjtcbiAgYnVzaW5lc3NJZD86IG51bWJlcjtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAga2V5OiBzdHJpbmc7XG4gIHRvdWNocG9pbnQ6IFRvdWNocG9pbnQ7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGRpc3BsYXk6IFBsYWNlbWVudERpc3BsYXk7XG4gIHN0cmF0ZWd5OiBVcHNlbGxTdHJhdGVneTtcbiAgc3RyYXRlZ3lQYXJhbXM6IFN0cmF0ZWd5UGFyYW1zO1xuICBjb25maWdWZXJzaW9uOiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBZG1pbiB1cHNlcnQuIFNjb3BlIGlzIGRlcml2ZWQ6IG5vIHBhcmVudElkIOKGkiBwbGF0Zm9ybSBkZWZhdWx0O1xuICogcGFyZW50SWQgb25seSDihpIgYnJhbmQgcm93OyBwYXJlbnRJZCArIGJ1c2luZXNzSWQg4oaSIGJ1c2luZXNzIG92ZXJyaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFVwc2VydElucHV0IHtcbiAgcGFyZW50SWQ/OiBudW1iZXI7XG4gIGJ1c2luZXNzSWQ/OiBudW1iZXI7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIGtleTogc3RyaW5nO1xuICB0b3VjaHBvaW50OiBUb3VjaHBvaW50O1xuICBlbmFibGVkOiBib29sZWFuO1xuICBkaXNwbGF5OiBQbGFjZW1lbnREaXNwbGF5O1xuICBzdHJhdGVneT86IFVwc2VsbFN0cmF0ZWd5O1xuICBzdHJhdGVneVBhcmFtcz86IFN0cmF0ZWd5UGFyYW1zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudERlbGV0ZUlucHV0IHtcbiAgcGFyZW50SWQ/OiBudW1iZXI7XG4gIGJ1c2luZXNzSWQ/OiBudW1iZXI7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIGtleTogc3RyaW5nO1xuICAvKipcbiAgICogUmVxdWlyZWQgYnkgdGhlIHNlcnZlciB3aGVuIGBwYXJlbnRJZGAgaXMgb21pdHRlZCwgYmVjYXVzZSB0aGF0IGNhbGxcbiAgICogdGFyZ2V0cyB0aGUgUExBVEZPUk0gREVGQVVMVCByb3cgYW5kIHNvIHJlbW92ZXMgdGhlIHBsYWNlbWVudCBmb3JcbiAgICogZXZlcnkgdGVuYW50IHRoYXQgaGFzIG5vdCBvdmVycmlkZGVuIGl0LiBXaXRob3V0IHRoaXMgdGhlIHNlcnZlclxuICAgKiByZWplY3RzIHRoZSByZXF1ZXN0IHdpdGggNDAwIHJhdGhlciB0aGFuIGd1ZXNzaW5nIHRoYXQgYSBtaXNzaW5nXG4gICAqIHBhcmVudElkIHdhcyBkZWxpYmVyYXRlLlxuICAgKlxuICAgKiBEZWxpYmVyYXRlbHkgbm90IGRlZmF1bHRlZCB0byBgdHJ1ZWAgaGVyZTogdGhlIHdob2xlIHBvaW50IG9mIHRoZVxuICAgKiBmbGFnIGlzIHRoYXQgZGVsZXRpbmcgYSBkZWZhdWx0IG11c3QgYmUgc3RhdGVkLCBub3QgaW5mZXJyZWQgZnJvbVxuICAgKiB0aGUgc2hhcGUgb2YgdGhlIGNhbGwuXG4gICAqL1xuICBjb25maXJtRGVsZXRlRGVmYXVsdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50c1F1ZXJ5IHtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgcGFyZW50SWQ6IG51bWJlcjtcbiAgYnVzaW5lc3NJZDogbnVtYmVyO1xufVxuXG4vLyDilIDilIDilIAgQXR0YWNoLXJhdGUgdGVsZW1ldHJ5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBVcHNlbGxFdmVudFR5cGUgPSAnc2hvd24nIHwgJ2FkZGVkJyB8ICdpZ25vcmVkJztcblxuZXhwb3J0IGludGVyZmFjZSBVcHNlbGxFdmVudCB7XG4gIHR5cGU6IFVwc2VsbEV2ZW50VHlwZTtcbiAgLyoqXG4gICAqIEVjaG8gdGhlIGl0ZW0ncyBgc291cmNlYC4gVGhpcyBpcyB3aGF0IG1ha2VzIFwiaXMgbXkgbGlzdCBwZXJmb3JtaW5nXG4gICAqIGJldHRlciB0aGFuIHlvdXIgYWxnb3JpdGhtP1wiIGFuc3dlcmFibGUg4oCUIGF0dGFjaCByYXRlIGlzIG9ubHlcbiAgICogY29tcGFyYWJsZSBieSBsYXllciBpZiB0aGUgbGF5ZXIgaXMgcmVjb3JkZWQgb24gdGhlIGV2ZW50LlxuICAgKi9cbiAgc291cmNlPzogSXRlbVNvdXJjZTtcbiAgLyoqXG4gICAqIEFMV0FZUyB0aGUgaWQgdGhlIHN1Z2dlc3Rpb24gd2FzIHNlcnZlZCB1bmRlci4gRm9yIGFuIGl0ZW0gd2l0aFxuICAgKiBgaGFzVmFyaWFudHNgIHRoYXQgaXMgdGhlIERJU0gsIG5vdCB0aGUgc2l6ZSB0aGUgY3VzdG9tZXIgY2hvc2Ug4oCUXG4gICAqIHNlbmRpbmcgdGhlIHNpemUgaWQgbGVhdmVzIHRoaXMgZXZlbnQgdW5qb2luYWJsZSB0byB0aGUgYHNob3duYFxuICAgKiB0aGF0IHByZWNlZGVkIGl0LCBzbyBhdHRhY2ggcmF0ZSBmb3IgZXZlcnkgcGlja2VyIGNhcmQgcmVhZHMgemVyby5cbiAgICovXG4gIGl0ZW1JZDogbnVtYmVyO1xuICAvKipcbiAgICogV2hpY2ggc2l6ZSB3YXMgY2hvc2VuLCB3aGVuIGBpdGVtSWRgIGlzIGFuIGl0ZW0gd2l0aCB2YXJpYW50cy5cbiAgICogQW5zd2VycyB3aGV0aGVyIGEgXCJmcm9tIDE0NVwiIGNhcmQgc2VsbHMgUmVndWxhcnMgb3IgTGFyZ2VzLCB3aGljaFxuICAgKiBjYW5ub3QgYmUgcmVjb3ZlcmVkIGxhdGVyIGZyb20gYSBkYXRhc2V0IHRoYXQgbmV2ZXIgY2FycmllZCBpdC5cbiAgICovXG4gIHZhcmlhbnRJdGVtSWQ/OiBudW1iZXI7XG4gIHJlYXNvbkNvZGU/OiBSZWFzb25Db2RlO1xuICAvKiogSVNPLTg2MDEuIERlZmF1bHRzIHRvIHNlcnZlciByZWNlaXZlIHRpbWUgd2hlbiBvbWl0dGVkLiAqL1xuICBvY2N1cnJlZEF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VsbEV2ZW50c0lucHV0IHtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgcGxhY2VtZW50OiBzdHJpbmc7XG4gIHRlbmFudDogVGVuYW50O1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBFY2hvIGBtZXRhLmNvbmZpZ1ZlcnNpb25gIGZyb20gdGhlIHJlc3BvbnNlIGJlaW5nIHJlcG9ydGVkIG9uLiAqL1xuICBjb25maWdWZXJzaW9uPzogc3RyaW5nO1xuICBldmVudHM6IFVwc2VsbEV2ZW50W107XG59XG4iXX0=
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
|
@@ -16,5 +16,5 @@ exports.SDK_VERSION = void 0;
|
|
|
16
16
|
* namespace suite, so a later split or trim of one namespace cannot take
|
|
17
17
|
* the release guard with it.
|
|
18
18
|
*/
|
|
19
|
-
exports.SDK_VERSION = '
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
exports.SDK_VERSION = '3.1.0';
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ1UsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW51YWxseS1tYWludGFpbmVkIHZlcnNpb24gc3RyaW5nIHN1cmZhY2VkIHZpYSB0aGUgYFVzZXItQWdlbnRgXG4gKiBoZWFkZXIuIEtlcHQgaW4gc3luYyB3aXRoIGBwYWNrYWdlLmpzb25gIGJ5IGhhbmQgYmVjYXVzZSBwdWxsaW5nIHRoZVxuICogdmFsdWUgZnJvbSBwYWNrYWdlLmpzb24gYXQgcnVudGltZSB3b3VsZCByZXF1aXJlIGVpdGhlciBhIEpTT04gaW1wb3J0XG4gKiAoVFMgbGliIHNldHRpbmdzIGRlcGVuZGVudCkgb3IgYSBidWlsZC10aW1lIHJlcGxhY2VtZW50LCBhbmQgdGhlXG4gKiBjb3N0IG9mIG9uZSBidW1wLWluLXR3by1wbGFjZXMgcGVyIHJlbGVhc2UgaXMgc21hbGwuXG4gKlxuICogVGhhdCBjb3N0IHdhcyB1bmRlcmVzdGltYXRlZCBvbmNlOiB0aGUgcHVibGlzaCBqb2IgdmVyaWZpZXNcbiAqIHBhY2thZ2UuanNvbiBhZ2FpbnN0IHRoZSByZWxlYXNlIHRhZyBidXQgbmV2ZXIgcmVhZHMgdGhpcyBmaWxlLCBzbyB0aGVcbiAqIHR3byBkcmlmdGVkIGFuZCAxLjAuMCBzaGlwcGVkIHJlcG9ydGluZyAwLjkuMS4gQSB0ZXN0IG5vdyBwaW5zIHRoZW1cbiAqIHRvZ2V0aGVyIChgdGVzdC92ZXJzaW9uLnRlc3QudHNgKSwgc28gZm9yZ2V0dGluZyB0aGlzIGJ1bXAgZmFpbHMgdGhlXG4gKiBidWlsZCBpbnN0ZWFkIG9mIHRoZSBVc2VyLUFnZW50LiBJdCBsaXZlcyBhdCB0aGUgdG9wIGxldmVsLCBub3QgdW5kZXIgYVxuICogbmFtZXNwYWNlIHN1aXRlLCBzbyBhIGxhdGVyIHNwbGl0IG9yIHRyaW0gb2Ygb25lIG5hbWVzcGFjZSBjYW5ub3QgdGFrZVxuICogdGhlIHJlbGVhc2UgZ3VhcmQgd2l0aCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNES19WRVJTSU9OID0gJzMuMS4wJztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uengage.io/platform-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Client SDK for the uEngage platform API (audit, business, zones, wallet, upsell, auth, events). Single createClient(...) factory; OAuth2 client_credentials, static Bearer, or legacy session-token auth modes. Browser-safe realtime client at the /realtime subpath.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -67,7 +67,8 @@
|
|
|
67
67
|
"@types/node": "^20.14.10",
|
|
68
68
|
"jest": "^29.7.0",
|
|
69
69
|
"ts-jest": "^29.2.5",
|
|
70
|
-
"typescript": "^5.5.4"
|
|
70
|
+
"typescript": "^5.5.4",
|
|
71
|
+
"@uengage/common": "0.0.0"
|
|
71
72
|
},
|
|
72
73
|
"peerDependencies": {
|
|
73
74
|
"@aws-sdk/client-sns": "^3.0.0"
|
|
@@ -78,7 +79,7 @@
|
|
|
78
79
|
}
|
|
79
80
|
},
|
|
80
81
|
"scripts": {
|
|
81
|
-
"build": "tsc",
|
|
82
|
+
"build": "tsc && node scripts/include-channel-helpers.cjs",
|
|
82
83
|
"typecheck": "tsc --noEmit",
|
|
83
84
|
"test": "jest"
|
|
84
85
|
}
|