@dollhousemcp/mcp-server 2.0.27-rc.2 → 2.0.27-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/config/env.d.ts +8 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +25 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/web/console/UnifiedConsole.d.ts +9 -0
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
- package/dist/web/console/UnifiedConsole.js +131 -11
- package/package.json +1 -1
- package/server.json +2 -2
package/CHANGELOG.md
CHANGED
package/dist/config/env.d.ts
CHANGED
|
@@ -80,6 +80,10 @@ declare const envSchema: z.ZodObject<{
|
|
|
80
80
|
DOLLHOUSE_CONSOLE_LEADER_LOCK_FILE: z.ZodOptional<z.ZodString>;
|
|
81
81
|
DOLLHOUSE_CONSOLE_BIND_RETRY_DELAYS: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<number[] | undefined, string | undefined>>;
|
|
82
82
|
DOLLHOUSE_CONSOLE_MAX_FORWARD_FAILURES: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
83
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_MS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
84
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_JITTER_MS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
85
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_THRESHOLD: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
86
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_COOLDOWN_MS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
83
87
|
DOLLHOUSE_CONSOLE_ROTATION_REQUIRE_CONFIRMATION: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
|
|
84
88
|
DOLLHOUSE_GATEKEEPER_ENABLED: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
|
|
85
89
|
DOLLHOUSE_GATEKEEPER_ELEMENT_POLICY_OVERRIDES: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
|
|
@@ -141,6 +145,10 @@ export declare const env: {
|
|
|
141
145
|
DOLLHOUSE_WEB_AUTH_ENABLED: boolean;
|
|
142
146
|
DOLLHOUSE_CONSOLE_BIND_RETRY_DELAYS: number[] | undefined;
|
|
143
147
|
DOLLHOUSE_CONSOLE_MAX_FORWARD_FAILURES: number;
|
|
148
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_MS: number;
|
|
149
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_JITTER_MS: number;
|
|
150
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_THRESHOLD: number;
|
|
151
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_COOLDOWN_MS: number;
|
|
144
152
|
DOLLHOUSE_CONSOLE_ROTATION_REQUIRE_CONFIRMATION: boolean;
|
|
145
153
|
DOLLHOUSE_GATEKEEPER_ENABLED: boolean;
|
|
146
154
|
DOLLHOUSE_GATEKEEPER_ELEMENT_POLICY_OVERRIDES: boolean;
|
package/dist/config/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB;;GAEG;AACH,QAAA,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB;;GAEG;AACH,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmSb,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA+B,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,MAAM,SAA0B,CAAC;AAC9C,eAAO,MAAM,aAAa,SAAiC,CAAC;AAC5D,eAAO,MAAM,YAAY,SAAgC,CAAC"}
|
package/dist/config/env.js
CHANGED
|
@@ -196,6 +196,30 @@ const envSchema = z.object({
|
|
|
196
196
|
* Default: 10.
|
|
197
197
|
*/
|
|
198
198
|
DOLLHOUSE_CONSOLE_MAX_FORWARD_FAILURES: z.coerce.number().int().min(1).max(100).default(10),
|
|
199
|
+
/**
|
|
200
|
+
* How often a follower re-evaluates whether it should take over console
|
|
201
|
+
* leadership in a heterogeneous mixed-version environment.
|
|
202
|
+
* Default: 15000ms.
|
|
203
|
+
*/
|
|
204
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_MS: z.coerce.number().int().min(1_000).max(300_000).default(15_000),
|
|
205
|
+
/**
|
|
206
|
+
* Additional per-session jitter added to authority rechecks so large mixed
|
|
207
|
+
* fleets do not all wake up in the same instant.
|
|
208
|
+
* Default: 5000ms.
|
|
209
|
+
*/
|
|
210
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_JITTER_MS: z.coerce.number().int().min(0).max(60_000).default(5_000),
|
|
211
|
+
/**
|
|
212
|
+
* Number of consecutive authority recheck failures before the follower opens
|
|
213
|
+
* its local circuit breaker and stops retrying until the cooldown expires.
|
|
214
|
+
* Default: 3.
|
|
215
|
+
*/
|
|
216
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_THRESHOLD: z.coerce.number().int().min(1).max(100).default(3),
|
|
217
|
+
/**
|
|
218
|
+
* Cooldown period after the follower authority monitor opens its circuit
|
|
219
|
+
* breaker due to repeated failures.
|
|
220
|
+
* Default: 60000ms.
|
|
221
|
+
*/
|
|
222
|
+
DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_COOLDOWN_MS: z.coerce.number().int().min(1_000).max(900_000).default(60_000),
|
|
199
223
|
/**
|
|
200
224
|
* Issue #1780: Phase 2 — require a confirmation code (OS dialog or TOTP)
|
|
201
225
|
* for privileged actions like token rotation. Default is true for safety;
|
|
@@ -294,4 +318,4 @@ if (isDevelopment || isTest) {
|
|
|
294
318
|
HAS_GITHUB_TEST_TOKEN: !!env.GITHUB_TEST_TOKEN,
|
|
295
319
|
});
|
|
296
320
|
}
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLGdGQUFnRjtBQUNoRiw2REFBNkQ7QUFDN0QsRUFBRTtBQUNGLDJEQUEyRDtBQUMzRCxzRUFBc0U7QUFDdEUsb0ZBQW9GO0FBQ3BGLGdGQUFnRjtBQUNoRiwyRUFBMkU7QUFDM0UsaUZBQWlGO0FBQ2pGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztPQUM3QyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDL0QsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBUSxDQUFDO0FBQ3ZHLElBQUksV0FBVztJQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMs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LCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENlbnRyYWxpemVkIEVudmlyb25tZW50IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHZhbGlkYXRpb24uXG4gKiBBbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoaXMgbW9kdWxlIHJhdGhlciB0aGFuXG4gKiBkaXJlY3RseSB2aWEgcHJvY2Vzcy5lbnYgdG8gZW5zdXJlIHR5cGUgc2FmZXR5IGFuZCB2YWxpZGF0aW9uLlxuICpcbiAqIFVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZW52IH0gZnJvbSAnLi9jb25maWcvZW52JztcbiAqIGNvbnN0IHRva2VuID0gZW52LkdJVEhVQl9UT0tFTjsgIC8vIFR5cGU6IHN0cmluZ1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgZG90ZW52IGZyb20gJ2RvdGVudic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG4vLyBMb2FkIC5lbnYgZmlsZXMgd2l0aCBwcmlvcml0eTogLmVudi5sb2NhbCAocGVyc29uYWwpID4gLmVudiAoc2hhcmVkIGRlZmF1bHRzKVxuLy8gQm90aCBmaWxlcyBhcmUgb3B0aW9uYWwgLSBubyBlcnJvciBpZiBlaXRoZXIgZG9lc24ndCBleGlzdFxuLy9cbi8vIE1DUCBQcm90b2NvbCBDb21wbGlhbmNlOiBTdXBwcmVzcyBkb3RlbnYncyBzdGRvdXQgb3V0cHV0XG4vLyBUaGUgTUNQIHByb3RvY29sIHJlcXVpcmVzIHRoYXQgT05MWSBKU09OLVJQQyBtZXNzYWdlcyBnbyB0byBzdGRvdXQuXG4vLyBkb3RlbnYgbWF5IG91dHB1dCB2ZXJzaW9uIGluZm8gdG8gc3Rkb3V0LCB3aGljaCBicmVha3MgQ2xhdWRlIERlc2t0b3AgY29ubmVjdGlvbi5cbi8vIFNvbHV0aW9uOiBUZW1wb3JhcmlseSByZWRpcmVjdCBzdGRvdXQgdG8gc3RkZXJyIGR1cmluZyBkb3RlbnYgaW5pdGlhbGl6YXRpb24uXG4vLyBJbiAtLXdlYiBtb2RlLCBzdXBwcmVzcyBib3RoIHN0ZG91dCBBTkQgc3RkZXJyIOKAlCB0aGUgdXNlciBvbmx5IG5lZWRzIHRoZVxuLy8gY29uc29sZSBVUkwgYmFubmVyLCBub3QgZG90ZW52J3MgaW5qZWN0aW9uIHN1bW1hcnkuIExvZ3MgZ28gdG8gdGhlIHdlYiB2aWV3ZXIuXG5jb25zdCBpc1dlYlNpbGVudCA9IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS13ZWInKVxuICAmJiAhcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RFQlVHICYmICFwcm9jZXNzLmVudi5FTkFCTEVfREVCVUc7XG5jb25zdCBvcmlnaW5hbFN0ZG91dFdyaXRlID0gcHJvY2Vzcy5zdGRvdXQud3JpdGUuYmluZChwcm9jZXNzLnN0ZG91dCk7XG5jb25zdCBvcmlnaW5hbFN0ZGVycldyaXRlID0gcHJvY2Vzcy5zdGRlcnIud3JpdGUuYmluZChwcm9jZXNzLnN0ZGVycik7XG5wcm9jZXNzLnN0ZG91dC53cml0ZSA9IChpc1dlYlNpbGVudCA/ICgoKSA9PiB0cnVlKSA6IHByb2Nlc3Muc3RkZXJyLndyaXRlLmJpbmQocHJvY2Vzcy5zdGRlcnIpKSBhcyBhbnk7XG5pZiAoaXNXZWJTaWxlbnQpIHByb2Nlc3Muc3RkZXJyLndyaXRlID0gKCgpID0+IHRydWUpIGFzIGFueTtcbmRvdGVudi5jb25maWcoeyBwYXRoOiBbJy5lbnYubG9jYWwnLCAnLmVudiddIH0pO1xucHJvY2Vzcy5zdGRvdXQud3JpdGUgPSBvcmlnaW5hbFN0ZG91dFdyaXRlO1xuaWYgKGlzV2ViU2lsZW50KSBwcm9jZXNzLnN0ZGVyci53cml0ZSA9IG9yaWdpbmFsU3RkZXJyV3JpdGU7XG5cbi8qKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGUgc2NoZW1hIHdpdGggdmFsaWRhdGlvblxuICovXG5jb25zdCBlbnZTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRW52aXJvbm1lbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBOT0RFX0VOVjogei5lbnVtKFsnZGV2ZWxvcG1lbnQnLCAndGVzdCcsICdwcm9kdWN0aW9uJ10pLmRlZmF1bHQoJ2RldmVsb3BtZW50JyksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQcm9kdWN0aW9uIEdpdEh1YiBDcmVkZW50aWFsc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVzZWQgYnkgcHJvZHVjdGlvbiBjb2RlIChzcmMvKSBmb3IgcmVhbCBHaXRIdWIgb3BlcmF0aW9uc1xuICAvLyBPcHRpb25hbDogRmVhdHVyZXMgcmVxdWlyaW5nIEdpdEh1YiB3aWxsIGZhaWwgZ3JhY2VmdWxseSBpZiBub3Qgc2V0XG4gIEdJVEhVQl9UT0tFTjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBHSVRIVUJfVVNFUk5BTUU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgR0lUSFVCX1JFUE9TSVRPUlk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRlc3QgR2l0SHViIENyZWRlbnRpYWxzIChTRVBBUkFURSBhY2NvdW50ISlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVc2VkIGJ5IHRlc3QgY29kZSAodGVzdHMvKSAtIHRlc3RzIHdpbGwgc2tpcCBpZiBub3QgcHJvdmlkZWRcbiAgLy8gSU1QT1JUQU5UOiBVc2UgYSBkaWZmZXJlbnQgR2l0SHViIGFjY291bnQgZm9yIHRlc3RpbmchXG4gIEdJVEhVQl9URVNUX1RPS0VOOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9URVNUX1VTRVJOQU1FOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9URVNUX1JFUE9TSVRPUlk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlcnZlciBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUE9SVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMDAwKSxcbiAgTE9HX0xFVkVMOiB6LmVudW0oWydlcnJvcicsICd3YXJuJywgJ2luZm8nLCAnZGVidWcnXSkuZGVmYXVsdCgnaW5mbycpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVGVzdCBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgVEVTVF9CQVNFX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX1BFUlNPTkFTX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX0NBQ0hFX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX0NPTkZJR19ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZlYXR1cmUgRmxhZ3NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBFTkFCTEVfREVCVUc6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgVEVTVF9WRVJCT1NFX0xPR0dJTkc6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1DUCBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiAoSXNzdWUgIzIzNylcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogTUNQIGludGVyZmFjZSBtb2RlIC0gY29udHJvbHMgd2hpY2ggdG9vbCBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byBMTE1zOlxuICAgKiAtICdkaXNjcmV0ZSc6IH40MCBpbmRpdmlkdWFsIHRvb2xzIChsaXN0X2VsZW1lbnRzLCBjcmVhdGVfZWxlbWVudCwgZXRjLikgLSB+MywwMDAgdG9rZW5zXG4gICAqIC0gJ21jcGFxbCc6IENvbnNvbGlkYXRlZCBNQ1AtQVFMIGludGVyZmFjZSAtIHVzZXMgTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGZvciBzdHlsZVxuICAgKlxuICAgKiBEZWZhdWx0OiAnbWNwYXFsJyAtIHJlY29tbWVuZGVkIGZvciB0b2tlbiBlZmZpY2llbmN5IGFuZCBjbGVhbmVyIHRvb2wgZGlzY292ZXJ5XG4gICAqL1xuICBNQ1BfSU5URVJGQUNFX01PREU6IHouZW51bShbJ2Rpc2NyZXRlJywgJ21jcGFxbCddKS5kZWZhdWx0KCdtY3BhcWwnKSxcblxuICAvKipcbiAgICogTUNQLUFRTCBlbmRwb2ludCBtb2RlIChvbmx5IGFwcGxpZXMgd2hlbiBNQ1BfSU5URVJGQUNFX01PREU9J21jcGFxbCcpOlxuICAgKiAtICdjcnVkZSc6IDUgQ1JVREUgdG9vbHMgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpIC0gfjQsMzAwIHRva2Vuc1xuICAgKiAtICdzaW5nbGUnOiAxIHRvb2wgKG1jcF9hcWwpIC0gfjM1MCB0b2tlbnMsIGlkZWFsIGZvciBtdWx0aS1zZXJ2ZXIgZGVwbG95bWVudHNcbiAgICovXG4gIE1DUF9BUUxfRU5EUE9JTlRfTU9ERTogei5lbnVtKFsnY3J1ZGUnLCAnc2luZ2xlJ10pLmRlZmF1bHQoJ2NydWRlJyksXG5cbiAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbGlhcyBmb3IgTUNQX0FRTF9NT0RFIChkZXByZWNhdGVkLCB1c2UgTUNQX0FRTF9FTkRQT0lOVF9NT0RFKVxuICBNQ1BfQVFMX01PREU6IHouZW51bShbJ2NydWRlJywgJ3NpbmdsZSddKS5vcHRpb25hbCgpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVW5pZmllZCBMb2dnaW5nIENvbmZpZ3VyYXRpb24gKGRvY3MvTE9HR0lORy1ERVNJR04ubWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX0xPR19ESVI6IHouc3RyaW5nKCkuZGVmYXVsdCgnfi8uZG9sbGhvdXNlL2xvZ3MvJyksXG4gIERPTExIT1VTRV9MT0dfRk9STUFUOiB6LmVudW0oWyd0ZXh0JywgJ2pzb25sJ10pLmRlZmF1bHQoJ3RleHQnKSxcbiAgRE9MTEhPVVNFX0xPR19SRVRFTlRJT05fREFZUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMCksXG4gIERPTExIT1VTRV9MT0dfU0VDVVJJVFlfUkVURU5USU9OX0RBWVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNyksXG4gIERPTExIT1VTRV9MT0dfRkxVU0hfSU5URVJWQUxfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTAwMCksXG4gIC8vIEJ1ZmZlciByYWlzZWQgdG8gMjAwMCB0byBzdXBwb3J0IHRoZSB3ZWIgY29uc29sZSBsb2cgdmlld2VyIOKAlCB0aGUgaGlnaGVyIGNhcGFjaXR5XG4gIC8vIHJlZHVjZXMgZmx1c2ggZnJlcXVlbmN5IGFuZCBrZWVwcyBtb3JlIGVudHJpZXMgYXZhaWxhYmxlIGZvciBTU0UgYmFja2ZpbGwgb24gY29ubmVjdC5cbiAgRE9MTEhPVVNFX0xPR19CVUZGRVJfU0laRTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX0FQUF9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX1NFQ1VSSVRZX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9QRVJGX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDIwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9URUxFTUVUUllfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwMCksXG4gIERPTExIT1VTRV9MT0dfTUFYX0VOVFJZX1NJWkU6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTYzODQpLFxuICBET0xMSE9VU0VfTE9HX0lNTUVESUFURV9GTFVTSF9SQVRFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwKSxcbiAgRE9MTEhPVVNFX0xPR19GSUxFX01BWF9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwNDg1NzYwMCksXG4gIERPTExIT1VTRV9MT0dfTUFYX0RJUl9TSVpFX0JZVEVTOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICBET0xMSE9VU0VfTE9HX01BWF9GSUxFU19QRVJfQ0FURUdPUlk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBlcm1pc3Npb24gU2VydmVyIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogRW5hYmxlIHRoZSBIVFRQIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBzZXJ2ZXIgZm9yIFByZVRvb2xVc2UgaG9va3MuXG4gICAqIFdoZW4gdHJ1ZSwgc3RhcnRzIGFuIEhUVFAgZW5kcG9pbnQgb24gYSBkeW5hbWljIHBvcnQgYWZ0ZXIgZGVmZXJyZWRcbiAgICogc2V0dXAgY29tcGxldGVzLiBXcml0ZXMgcG9ydCB0byB+Ly5kb2xsaG91c2UvcnVuL3Blcm1pc3Npb24tc2VydmVyLnBvcnRcbiAgICogZm9yIGhvb2sgc2NyaXB0IGRpc2NvdmVyeS4gUmVxdWlyZWQgZm9yIGF1dG9ub21vdXMgYWdlbnQgcGVybWlzc2lvblxuICAgKiBtYW5hZ2VtZW50IHZpYSBDbGF1ZGUgQ29kZSBob29rcy5cbiAgICovXG4gIERPTExIT1VTRV9QRVJNSVNTSU9OX1NFUlZFUjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG5cbiAgLy8gV2ViIENvbnNvbGUgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKiBFbmFibGUgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUgKGxvZ3MgKyBtZXRyaWNzIHRhYnMpICovXG4gIERPTExIT1VTRV9XRUJfQ09OU09MRTogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG5cbiAgLyoqXG4gICAqIFBvcnQgdGhlIHdlYiBjb25zb2xlIGxlYWRlciBiaW5kcyB0byAoIzE3OTQsICMxNzk4KS5cbiAgICpcbiAgICogRGVmYXVsdDogNDE3MTUg4oCUIFwiQUlMSVNcIiBvbiBhIHBob25lIGtleXBhZCwgYWZ0ZXIgdGhlIEFJIExheWVyXG4gICAqIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uIHRoYXQgRG9sbGhvdXNlTUNQIGltcGxlbWVudHMuIEFsc28gXCJBbGljZVwiXG4gICAqIGluIEdhZWxpYy5cbiAgICpcbiAgICogUG9ydCBzZWxlY3Rpb24gY3JpdGVyaWEgKHZlcmlmaWVkIDIwMjYtMDQtMDYpOlxuICAgKiAgIC0gTm90IHJlZ2lzdGVyZWQgd2l0aCBJQU5BIChubyBlbnRyeSBpbiB0aGUgc2VydmljZSBuYW1lIHJlZ2lzdHJ5KVxuICAgKiAgIC0gTm90IGluIG5tYXAgc2VydmljZXMgZGF0YWJhc2UgKG5ldmVyIG9ic2VydmVkIGluIHRoZSB3aWxkKVxuICAgKiAgIC0gTm8ga25vd24gYXBwbGljYXRpb24sIHNlY3VyaXR5IHRvb2wsIG9yIG1hbHdhcmUgYXNzb2NpYXRpb25zXG4gICAqICAgLSBCZWxvdyB0aGUgbWFjT1MgZXBoZW1lcmFsIHJhbmdlICg0OTE1Mi02NTUzNSksIHNvIGBiaW5kKClgXG4gICAqICAgICBkb2VzIG5vdCByYWNlIHdpdGgga2VybmVsLWFsbG9jYXRlZCBzb3VyY2UgcG9ydHNcbiAgICogICAtIEluIHRoZSBJQU5BIHVzZXIgcG9ydCByYW5nZSAoMTAyNC00OTE1MSlcbiAgICogICAtIE5vdCBhZGphY2VudCB0byB0aGUgcHJlLWF1dGhlbnRpY2F0aW9uIGRlZmF1bHQgKDM5MzkpXG4gICAqXG4gICAqIFByZXZpb3VzIGRlZmF1bHQgd2FzIDU5MDcgKFwiTE9HU1wiIHVwc2lkZSBkb3duIG9uIGEgY2FsY3VsYXRvciksXG4gICAqIHdoaWNoIGNvbmZsaWN0ZWQgd2l0aCBTdGVsbGFyIEN5YmVyJ3MgSFRUUCBHS0UgbG9nIHBhcnNlci5cbiAgICpcbiAgICogT3ZlcnJpZGUgdmlhIGVudiB2YXIgaWYgNDE3MTUgY29sbGlkZXMgd2l0aCBzb21ldGhpbmcgaW4geW91clxuICAgKiBlbnZpcm9ubWVudCDigJQgZXZlcnkgcnVudGltZSByZWZlcmVuY2UgcmVhZHMgZnJvbSB0aGlzIHNpbmdsZSB2YWx1ZS5cbiAgICovXG4gIERPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUOiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMTAyNCkubWF4KDY1NTM1KS5kZWZhdWx0KDQxNzE1KSxcblxuICAvKipcbiAgICogSXNzdWUgIzE3ODA6IEVuZm9yY2UgQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uIG9uIHRoZSB3ZWIgY29uc29sZSBBUEkuXG4gICAqIFdoZW4gdHJ1ZSwgYWxsIHByb3RlY3RlZCBlbmRwb2ludHMgcmVxdWlyZSBhIHZhbGlkIHRva2VuIGZyb20gdGhlXG4gICAqIGNvbnNvbGUgdG9rZW4gZmlsZS4gV2hlbiBmYWxzZSAodGhlIHByZS1QaGFzZS0yIGRlZmF1bHQpLCB0aGUgdG9rZW5cbiAgICogZmlsZSBpcyBzdGlsbCBnZW5lcmF0ZWQgYnV0IHRoZSBtaWRkbGV3YXJlIGRvZXMgbm90IGVuZm9yY2Ug4oCUIHRoaXNcbiAgICogbGV0cyB0aGUgaW5mcmFzdHJ1Y3R1cmUgbGFuZCB3aXRob3V0IGJyZWFraW5nIGV4aXN0aW5nIGNvbnN1bWVycy5cbiAgICogV2lsbCBmbGlwIHRvIGRlZmF1bHQgYHRydWVgIGluIGEgZm9sbG93LXVwIFBSIG9uY2UgYWxsIGNvbnN1bWVyc1xuICAgKiAoYnJvd3NlciwgZm9sbG93ZXJzLCBicmlkZ2UpIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGF0dGFjaCB0b2tlbnMuXG4gICAqL1xuICBET0xMSE9VU0VfV0VCX0FVVEhfRU5BQkxFRDogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjMTc4MDogT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRoZSBjb25zb2xlIHRva2VuIGZpbGUgbG9jYXRpb24uXG4gICAqIFdoZW4gdW5zZXQsIGBDb25zb2xlVG9rZW5TdG9yZWAgZmFsbHMgYmFjayB0byBpdHMgYnVpbHQtaW4gZGVmYXVsdFxuICAgKiB1bmRlciBgfi8uZG9sbGhvdXNlL3J1bi9gLiBNYWlubHkgdXNlZnVsIGZvciB0ZXN0cyBhbmQgZm9yIGVudGVycHJpc2VcbiAgICogZGVwbG95bWVudHMgdGhhdCBtb3VudCBhIHNoYXJlZCB0b2tlbiBmaWxlIGZyb20gYSBzZWNyZXRzIHZvbHVtZS5cbiAgICovXG4gIERPTExIT1VTRV9DT05TT0xFX1RPS0VOX0ZJTEU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvKipcbiAgICogT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRoZSBjb25zb2xlIGxlYWRlciBsb2NrIGZpbGUgbG9jYXRpb24gKCMxNzk0KS5cbiAgICogV2hlbiB1bnNldCwgYExlYWRlckVsZWN0aW9uYCBmYWxscyBiYWNrIHRvIGl0cyBidWlsdC1pbiBkZWZhdWx0IHVuZGVyXG4gICAqIGB+Ly5kb2xsaG91c2UvcnVuL2AuIFByaW1hcmlseSB1c2VmdWwgZm9yIHRlc3RzIHRoYXQgbmVlZCBpc29sYXRpb25cbiAgICogYmV0d2VlbiBydW5zIGFuZCBmb3IgZGVwbG95bWVudHMgdGhhdCBzcGxpdCBydW50aW1lIHN0YXRlIGFjcm9zc1xuICAgKiBtdWx0aXBsZSBpbnN0YWxsYXRpb25zIG9uIHRoZSBzYW1lIG1hY2hpbmUuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9MRUFERVJfTE9DS19GSUxFOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLy8gTGVhZGVyL0ZvbGxvd2VyIFJlY292ZXJ5ICgjMTg1MClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjMTg1MDogUmV0cnkgZGVsYXlzIChpbiBtcykgd2hlbiB0aGUgbGVhZGVyIGZhaWxzIHRvIGJpbmQgdGhlIGNvbnNvbGVcbiAgICogcG9ydCBkdWUgdG8gRUFERFJJTlVTRS4gRWFjaCB2YWx1ZSBpcyBhIHN1Y2Nlc3NpdmUgYmFja29mZiBkZWxheS5cbiAgICogRGVmYXVsdDogMXMsIDJzLCA0cyAoN3MgdG90YWwpLiBJbmNyZWFzZSBmb3Igc2xvdyBvciByZW1vdGUgZW52aXJvbm1lbnRzLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfQklORF9SRVRSWV9ERUxBWVM6IHouc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC50cmFuc2Zvcm0odiA9PiB2ID8gdi5zcGxpdCgnLCcpLm1hcChOdW1iZXIpLmZpbHRlcihuID0+ICFOdW1iZXIuaXNOYU4obikgJiYgbiA+IDApIDogdW5kZWZpbmVkKSxcblxuICAvKipcbiAgICogSXNzdWUgIzE4NTA6IE51bWJlciBvZiBjb25zZWN1dGl2ZSBmb3J3YXJkaW5nIGZhaWx1cmVzIGJlZm9yZSBhIGZvbGxvd2VyXG4gICAqIGRlY2xhcmVzIHRoZSBsZWFkZXIgZGVhZCBhbmQgYXR0ZW1wdHMgc2VsZi1wcm9tb3Rpb24uIEhpZ2hlciB2YWx1ZXMgcmVkdWNlXG4gICAqIGZhbHNlIHBvc2l0aXZlcyBpbiBoaWdoLWxhdGVuY3kgZW52aXJvbm1lbnRzIGJ1dCBkZWxheSByZWNvdmVyeS5cbiAgICogRGVmYXVsdDogMTAuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9NQVhfRk9SV0FSRF9GQUlMVVJFUzogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDEpLm1heCgxMDApLmRlZmF1bHQoMTApLFxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjMTc4MDogUGhhc2UgMiDigJQgcmVxdWlyZSBhIGNvbmZpcm1hdGlvbiBjb2RlIChPUyBkaWFsb2cgb3IgVE9UUClcbiAgICogZm9yIHByaXZpbGVnZWQgYWN0aW9ucyBsaWtlIHRva2VuIHJvdGF0aW9uLiBEZWZhdWx0IGlzIHRydWUgZm9yIHNhZmV0eTtcbiAgICogc2V0IHRvIGZhbHNlIGZvciBoZWFkbGVzcyBDSSBhbmQgc2NyaXB0ZWQgZGVwbG95bWVudHMgdGhhdCBuZWVkIHRvIHJvdGF0ZVxuICAgKiB3aXRob3V0IGh1bWFuIGludGVyYWN0aW9uLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfUk9UQVRJT05fUkVRVUlSRV9DT05GSVJNQVRJT046IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU2VjdXJpdHkgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBJc3N1ZSAjNDUyOiBHYXRla2VlcGVyIHBvbGljeSBlbmZvcmNlbWVudC5cbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgYWxsIE1DUC1BUUwgb3BlcmF0aW9ucyBnbyB0aHJvdWdoIHRoZSA0LWxheWVyIEdhdGVrZWVwZXJcbiAgICogZW5mb3JjZSgpIHBpcGVsaW5lLiBXaGVuIGZhbHNlLCBmYWxscyBiYWNrIHRvIHJvdXRlIHZhbGlkYXRpb24gb25seS5cbiAgICogVGhpcyBpcyBhIHVzZXIvb3BlcmF0b3Igc2V0dGluZyDigJQgdGhlIExMTSBjYW5ub3QgYnlwYXNzIGl0LlxuICAgKi9cbiAgRE9MTEhPVVNFX0dBVEVLRUVQRVJfRU5BQkxFRDogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIC8qKlxuICAgKiBJc3N1ZSAjNjc5OiBFbGVtZW50IHBvbGljeSBsYXllciBraWxsIHN3aXRjaC5cbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgYWN0aXZlIGVsZW1lbnQgZ2F0ZWtlZXBlciBwb2xpY2llcyAoYWxsb3cvY29uZmlybS9kZW55L3Njb3BlUmVzdHJpY3Rpb25zKVxuICAgKiBjYW4gb3ZlcnJpZGUgZGVmYXVsdCBvcGVyYXRpb24gcGVybWlzc2lvbiBsZXZlbHMuIFdoZW4gZmFsc2UsIExheWVyIDIgb2YgR2F0ZWtlZXBlci5lbmZvcmNlKClcbiAgICogaXMgYnlwYXNzZWQgZW50aXJlbHkg4oCUIG9ubHkgcm91dGUgdmFsaWRhdGlvbiBhbmQgZGVmYXVsdCBwZXJtaXNzaW9uIGxldmVscyBhcHBseS5cbiAgICogVXNlIGZvciBlbWVyZ2VuY3kgbG9ja2Rvd24sIGhhcmRlbmVkIGRlcGxveW1lbnRzLCBvciBwb2xpY3kgZGVidWdnaW5nLlxuICAgKiBUaGlzIGlzIGFuIG9wZXJhdG9yL2luZnJhc3RydWN0dXJlIHNldHRpbmcg4oCUIHRoZSBMTE0gY2Fubm90IGJ5cGFzcyBpdC5cbiAgICovXG4gIERPTExIT1VTRV9HQVRFS0VFUEVSX0VMRU1FTlRfUE9MSUNZX09WRVJSSURFUzogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIC8qKlxuICAgKiBJc3N1ZSAjNzk5OiBQb2xpY3kgZXhwb3J0IG9wdC1pbiBmbGFnLlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBQb2xpY3lFeHBvcnRTZXJ2aWNlIHdyaXRlcyB0aGUgc2VjdXJpdHkgcG9saWN5IGJsdWVwcmludCB0b1xuICAgKiB+Ly5kb2xsaG91c2UvYnJpZGdlL2ltcG9ydHMvcG9saWNpZXMvIG9uIGFjdGl2YXRpb24gY2hhbmdlcy4gVGhlIERvbGxob3VzZUJyaWRnZVxuICAgKiBwZXJtaXNzaW9uLXByb21wdCBzZXJ2ZXIgd2F0Y2hlcyB0aGlzIGZpbGUgdG8gZXZhbHVhdGUgcGVybWlzc2lvbnMgbG9jYWxseS5cbiAgICogU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgcG9saWN5IGZpbGUgZXhwb3J0IGVudGlyZWx5LlxuICAgKi9cbiAgRE9MTEhPVVNFX1BPTElDWV9FWFBPUlRfRU5BQkxFRDogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTdG9yYWdlIExheWVyIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBET0xMSE9VU0VfU0NBTl9DT09MRE9XTl9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDAwKSxcbiAgRE9MTEhPVVNFX0lOREVYX0RFQk9VTkNFX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDIwMDApLFxuICBET0xMSE9VU0VfRUxFTUVOVF9DQUNIRV9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzYwMDAwMCksXG4gIERPTExIT1VTRV9QQVRIX0NBQ0hFX1RUTF9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzNjAwMDAwKSxcbiAgRE9MTEhPVVNFX1RPT0xfQ0FDSEVfVFRMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDYwMDAwKSxcbiAgRE9MTEhPVVNFX0dMT0JBTF9DQUNIRV9NRU1PUllfTUI6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTUwKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBlcm1pc3Npb24gUHJvbXB0IENvbmZpZ3VyYXRpb24gKElzc3VlICM2MjUpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogTWF4aW11bSBDTEkgYXBwcm92YWwgcmVjb3JkcyBiZWZvcmUgTFJVIGV2aWN0aW9uIChkZWZhdWx0OiA1MCkgKi9cbiAgRE9MTEhPVVNFX0NMSV9BUFBST1ZBTF9NQVg6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTApLFxuXG4gIC8qKiBEZWZhdWx0IFRUTCBmb3IgQ0xJIGFwcHJvdmFsIHJlY29yZHMgaW4gbXMgKGRlZmF1bHQ6IDMwMDAwMCA9IDUgbWluKSAqL1xuICBET0xMSE9VU0VfQ0xJX0FQUFJPVkFMX1RUTF9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMDBfMDAwKSxcblxuICAvKiogUGVybWlzc2lvbiBwcm9tcHQgcmF0ZSBsaW1pdDogbWF4IHJlcXVlc3RzIHBlciB3aW5kb3cgKGRlZmF1bHQ6IDEwMCkgKi9cbiAgRE9MTEhPVVNFX1BFUk1JU1NJT05fUFJPTVBUX1JBVEVfTElNSVQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwKSxcblxuICAvKiogQ0xJIGFwcHJvdmFsIGNyZWF0aW9uIHJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IChkZWZhdWx0OiAyMCkgKi9cbiAgRE9MTEhPVVNFX0NMSV9BUFBST1ZBTF9SQVRFX0xJTUlUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDIwKSxcblxuICAvKiogUmF0ZSBsaW1pdCB3aW5kb3cgaW4gbXMgZm9yIHBlcm1pc3Npb24gcHJvbXB0IGFuZCBDTEkgYXBwcm92YWxzIChkZWZhdWx0OiA2MDAwMCA9IDYwcykgKi9cbiAgRE9MTEhPVVNFX1BFUk1JU1NJT05fUkFURV9XSU5ET1dfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNjBfMDAwKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1ldHJpY3MgQ29sbGVjdGlvbiBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX01FVFJJQ1NfRU5BQkxFRDogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIERPTExIT1VTRV9NRVRSSUNTX0NPTExFQ1RJT05fSU5URVJWQUxfTVM6IHouY29lcmNlLm51bWJlcigpLm1pbigxMDAwKS5tYXgoMzAwMDAwKS5kZWZhdWx0KDE1MDAwKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfTUFYX1NOQVBTSE9UX1NJWkU6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAyNDAwKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfQ09MTEVDVE9SX0ZBSUxVUkVfVEhSRVNIT0xEOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMSkubWF4KDEwMCkuZGVmYXVsdCgxMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX0NPTExFQ1RJT05fRFVSQVRJT05fV0FSTl9NUzogei5jb2VyY2UubnVtYmVyKCkubWluKDEwMCkubWF4KDYwMDAwKS5kZWZhdWx0KDUwMDApLFxuICBET0xMSE9VU0VfTUVUUklDU19NRU1PUllfU05BUFNIT1RfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLm1pbigxMCkubWF4KDEwMDAwKS5kZWZhdWx0KDI0MCksXG5cbiAgLy8gUGF0dGVybiBlbmNyeXB0aW9uIHNldHRpbmdzIGZvciBNZW1vcnkgU2VjdXJpdHkgKElzc3VlICMxMzIxKVxuICBET0xMSE9VU0VfRElTQUJMRV9FTkNSWVBUSU9OOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIERPTExIT1VTRV9FTkNSWVBUSU9OX1NFQ1JFVDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBET0xMSE9VU0VfRU5DUllQVElPTl9TQUxUOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLy8gVG9rZW4gZW5jcnlwdGlvbiBzZWNyZXQgKFNFQy0wMSwgIzE3MzUpXG4gIC8vIFdoZW4gc2V0LCByZXBsYWNlcyB0aGUgcHJlZGljdGFibGUgbWFjaGluZS1kZXJpdmVkIHBhc3NwaHJhc2UgZm9yIHRva2VuIGVuY3J5cHRpb24uXG4gIC8vIFN0cm9uZ2x5IHJlY29tbWVuZGVkIGZvciBhbnkgc2hhcmVkIG9yIG11bHRpLXVzZXIgZW52aXJvbm1lbnQuXG4gIC8vIE1pbmltdW0gMzIgY2hhcmFjdGVycyBlbmZvcmNlZCB0byBwcmV2ZW50IHdlYWsgcGFzc3BocmFzZXMuXG4gIERPTExIT1VTRV9UT0tFTl9TRUNSRVQ6IHouc3RyaW5nKCkubWluKDMyKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogVHlwZSBpcyBhdXRvbWF0aWNhbGx5IGluZmVycmVkIGZyb20gdGhlIHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgZW52ID0gZW52U2NoZW1hLnBhcnNlKHByb2Nlc3MuZW52KTtcblxuLyoqXG4gKiBFbnZpcm9ubWVudCB0eXBlIChpbmZlcnJlZCBmcm9tIHNjaGVtYSlcbiAqL1xuZXhwb3J0IHR5cGUgRW52ID0gei5pbmZlcjx0eXBlb2YgZW52U2NoZW1hPjtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBoZWxwZXJzIGZvciBlbnZpcm9ubWVudCBkZXRlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVGVzdCA9IGVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnO1xuZXhwb3J0IGNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBlbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG5leHBvcnQgY29uc3QgaXNQcm9kdWN0aW9uID0gZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbic7XG5cbi8qKlxuICogTG9nIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gKHdpdGhvdXQgc2VjcmV0cylcbiAqL1xuaWYgKGlzRGV2ZWxvcG1lbnQgfHwgaXNUZXN0KSB7XG4gIGxvZ2dlci5kZWJ1ZygnRW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBsb2FkZWQ6Jywge1xuICAgIE5PREVfRU5WOiBlbnYuTk9ERV9FTlYsXG4gICAgUE9SVDogZW52LlBPUlQsXG4gICAgTE9HX0xFVkVMOiBlbnYuTE9HX0xFVkVMLFxuICAgIEhBU19HSVRIVUJfVE9LRU46ICEhZW52LkdJVEhVQl9UT0tFTixcbiAgICBIQVNfR0lUSFVCX1RFU1RfVE9LRU46ICEhZW52LkdJVEhVQl9URVNUX1RPS0VOLFxuICB9KTtcbn1cbiJdfQ==
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLGdGQUFnRjtBQUNoRiw2REFBNkQ7QUFDN0QsRUFBRTtBQUNGLDJEQUEyRDtBQUMzRCxzRUFBc0U7QUFDdEUsb0ZBQW9GO0FBQ3BGLGdGQUFnRjtBQUNoRiwyRUFBMkU7QUFDM0UsaUZBQWlGO0FBQ2pGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztPQUM3QyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDL0QsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBUSxDQUFDO0FBQ3ZHLElBQUksV0FBVztJQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMs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LENBQUMsUUFBUSxFQUFFO0NBQ3RELENBQUMsQ0FBQztBQUVIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQU9oRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFFBQVEsS0FBSyxhQUFhLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDO0FBRTFEOztHQUVHO0FBQ0gsSUFBSSxhQUFhLElBQUksTUFBTSxFQUFFLENBQUM7SUFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRTtRQUNoRCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1FBQ2QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ3hCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWTtRQUNwQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtLQUMvQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDZW50cmFsaXplZCBFbnZpcm9ubWVudCBDb25maWd1cmF0aW9uXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdHlwZS1zYWZlIGFjY2VzcyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCB2YWxpZGF0aW9uLlxuICogQWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBzaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGlzIG1vZHVsZSByYXRoZXIgdGhhblxuICogZGlyZWN0bHkgdmlhIHByb2Nlc3MuZW52IHRvIGVuc3VyZSB0eXBlIHNhZmV0eSBhbmQgdmFsaWRhdGlvbi5cbiAqXG4gKiBVc2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGVudiB9IGZyb20gJy4vY29uZmlnL2Vudic7XG4gKiBjb25zdCB0b2tlbiA9IGVudi5HSVRIVUJfVE9LRU47ICAvLyBUeXBlOiBzdHJpbmdcbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGRvdGVudiBmcm9tICdkb3RlbnYnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuLy8gTG9hZCAuZW52IGZpbGVzIHdpdGggcHJpb3JpdHk6IC5lbnYubG9jYWwgKHBlcnNvbmFsKSA+IC5lbnYgKHNoYXJlZCBkZWZhdWx0cylcbi8vIEJvdGggZmlsZXMgYXJlIG9wdGlvbmFsIC0gbm8gZXJyb3IgaWYgZWl0aGVyIGRvZXNuJ3QgZXhpc3Rcbi8vXG4vLyBNQ1AgUHJvdG9jb2wgQ29tcGxpYW5jZTogU3VwcHJlc3MgZG90ZW52J3Mgc3Rkb3V0IG91dHB1dFxuLy8gVGhlIE1DUCBwcm90b2NvbCByZXF1aXJlcyB0aGF0IE9OTFkgSlNPTi1SUEMgbWVzc2FnZXMgZ28gdG8gc3Rkb3V0LlxuLy8gZG90ZW52IG1heSBvdXRwdXQgdmVyc2lvbiBpbmZvIHRvIHN0ZG91dCwgd2hpY2ggYnJlYWtzIENsYXVkZSBEZXNrdG9wIGNvbm5lY3Rpb24uXG4vLyBTb2x1dGlvbjogVGVtcG9yYXJpbHkgcmVkaXJlY3Qgc3Rkb3V0IHRvIHN0ZGVyciBkdXJpbmcgZG90ZW52IGluaXRpYWxpemF0aW9uLlxuLy8gSW4gLS13ZWIgbW9kZSwgc3VwcHJlc3MgYm90aCBzdGRvdXQgQU5EIHN0ZGVyciDigJQgdGhlIHVzZXIgb25seSBuZWVkcyB0aGVcbi8vIGNvbnNvbGUgVVJMIGJhbm5lciwgbm90IGRvdGVudidzIGluamVjdGlvbiBzdW1tYXJ5LiBMb2dzIGdvIHRvIHRoZSB3ZWIgdmlld2VyLlxuY29uc3QgaXNXZWJTaWxlbnQgPSBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0td2ViJylcbiAgJiYgIXByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRyAmJiAhcHJvY2Vzcy5lbnYuRU5BQkxFX0RFQlVHO1xuY29uc3Qgb3JpZ2luYWxTdGRvdXRXcml0ZSA9IHByb2Nlc3Muc3Rkb3V0LndyaXRlLmJpbmQocHJvY2Vzcy5zdGRvdXQpO1xuY29uc3Qgb3JpZ2luYWxTdGRlcnJXcml0ZSA9IHByb2Nlc3Muc3RkZXJyLndyaXRlLmJpbmQocHJvY2Vzcy5zdGRlcnIpO1xucHJvY2Vzcy5zdGRvdXQud3JpdGUgPSAoaXNXZWJTaWxlbnQgPyAoKCkgPT4gdHJ1ZSkgOiBwcm9jZXNzLnN0ZGVyci53cml0ZS5iaW5kKHByb2Nlc3Muc3RkZXJyKSkgYXMgYW55O1xuaWYgKGlzV2ViU2lsZW50KSBwcm9jZXNzLnN0ZGVyci53cml0ZSA9ICgoKSA9PiB0cnVlKSBhcyBhbnk7XG5kb3RlbnYuY29uZmlnKHsgcGF0aDogWycuZW52LmxvY2FsJywgJy5lbnYnXSB9KTtcbnByb2Nlc3Muc3Rkb3V0LndyaXRlID0gb3JpZ2luYWxTdGRvdXRXcml0ZTtcbmlmIChpc1dlYlNpbGVudCkgcHJvY2Vzcy5zdGRlcnIud3JpdGUgPSBvcmlnaW5hbFN0ZGVycldyaXRlO1xuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlIHNjaGVtYSB3aXRoIHZhbGlkYXRpb25cbiAqL1xuY29uc3QgZW52U2NoZW1hID0gei5vYmplY3Qoe1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVudmlyb25tZW50XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgTk9ERV9FTlY6IHouZW51bShbJ2RldmVsb3BtZW50JywgJ3Rlc3QnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdkZXZlbG9wbWVudCcpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUHJvZHVjdGlvbiBHaXRIdWIgQ3JlZGVudGlhbHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVc2VkIGJ5IHByb2R1Y3Rpb24gY29kZSAoc3JjLykgZm9yIHJlYWwgR2l0SHViIG9wZXJhdGlvbnNcbiAgLy8gT3B0aW9uYWw6IEZlYXR1cmVzIHJlcXVpcmluZyBHaXRIdWIgd2lsbCBmYWlsIGdyYWNlZnVsbHkgaWYgbm90IHNldFxuICBHSVRIVUJfVE9LRU46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgR0lUSFVCX1VTRVJOQU1FOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9SRVBPU0lUT1JZOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUZXN0IEdpdEh1YiBDcmVkZW50aWFscyAoU0VQQVJBVEUgYWNjb3VudCEpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVXNlZCBieSB0ZXN0IGNvZGUgKHRlc3RzLykgLSB0ZXN0cyB3aWxsIHNraXAgaWYgbm90IHByb3ZpZGVkXG4gIC8vIElNUE9SVEFOVDogVXNlIGEgZGlmZmVyZW50IEdpdEh1YiBhY2NvdW50IGZvciB0ZXN0aW5nIVxuICBHSVRIVUJfVEVTVF9UT0tFTjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBHSVRIVUJfVEVTVF9VU0VSTkFNRTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBHSVRIVUJfVEVTVF9SRVBPU0lUT1JZOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTZXJ2ZXIgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIFBPUlQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzAwMCksXG4gIExPR19MRVZFTDogei5lbnVtKFsnZXJyb3InLCAnd2FybicsICdpbmZvJywgJ2RlYnVnJ10pLmRlZmF1bHQoJ2luZm8nKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRlc3QgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIFRFU1RfQkFTRV9ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgVEVTVF9QRVJTT05BU19ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgVEVTVF9DQUNIRV9ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgVEVTVF9DT05GSUdfRElSOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGZWF0dXJlIEZsYWdzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX0FVVE9fU1VCTUlUX1RPX0NPTExFQ1RJT046IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgRU5BQkxFX0RFQlVHOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIFRFU1RfVkVSQk9TRV9MT0dHSU5HOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNQ1AgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24gKElzc3VlICMyMzcpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIE1DUCBpbnRlcmZhY2UgbW9kZSAtIGNvbnRyb2xzIHdoaWNoIHRvb2wgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gTExNczpcbiAgICogLSAnZGlzY3JldGUnOiB+NDAgaW5kaXZpZHVhbCB0b29scyAobGlzdF9lbGVtZW50cywgY3JlYXRlX2VsZW1lbnQsIGV0Yy4pIC0gfjMsMDAwIHRva2Vuc1xuICAgKiAtICdtY3BhcWwnOiBDb25zb2xpZGF0ZWQgTUNQLUFRTCBpbnRlcmZhY2UgLSB1c2VzIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSBmb3Igc3R5bGVcbiAgICpcbiAgICogRGVmYXVsdDogJ21jcGFxbCcgLSByZWNvbW1lbmRlZCBmb3IgdG9rZW4gZWZmaWNpZW5jeSBhbmQgY2xlYW5lciB0b29sIGRpc2NvdmVyeVxuICAgKi9cbiAgTUNQX0lOVEVSRkFDRV9NT0RFOiB6LmVudW0oWydkaXNjcmV0ZScsICdtY3BhcWwnXSkuZGVmYXVsdCgnbWNwYXFsJyksXG5cbiAgLyoqXG4gICAqIE1DUC1BUUwgZW5kcG9pbnQgbW9kZSAob25seSBhcHBsaWVzIHdoZW4gTUNQX0lOVEVSRkFDRV9NT0RFPSdtY3BhcWwnKTpcbiAgICogLSAnY3J1ZGUnOiA1IENSVURFIHRvb2xzIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSAtIH40LDMwMCB0b2tlbnNcbiAgICogLSAnc2luZ2xlJzogMSB0b29sIChtY3BfYXFsKSAtIH4zNTAgdG9rZW5zLCBpZGVhbCBmb3IgbXVsdGktc2VydmVyIGRlcGxveW1lbnRzXG4gICAqL1xuICBNQ1BfQVFMX0VORFBPSU5UX01PREU6IHouZW51bShbJ2NydWRlJywgJ3NpbmdsZSddKS5kZWZhdWx0KCdjcnVkZScpLFxuXG4gIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWxpYXMgZm9yIE1DUF9BUUxfTU9ERSAoZGVwcmVjYXRlZCwgdXNlIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSlcbiAgTUNQX0FRTF9NT0RFOiB6LmVudW0oWydjcnVkZScsICdzaW5nbGUnXSkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVuaWZpZWQgTG9nZ2luZyBDb25maWd1cmF0aW9uIChkb2NzL0xPR0dJTkctREVTSUdOLm1kKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIERPTExIT1VTRV9MT0dfRElSOiB6LnN0cmluZygpLmRlZmF1bHQoJ34vLmRvbGxob3VzZS9sb2dzLycpLFxuICBET0xMSE9VU0VfTE9HX0ZPUk1BVDogei5lbnVtKFsndGV4dCcsICdqc29ubCddKS5kZWZhdWx0KCd0ZXh0JyksXG4gIERPTExIT1VTRV9MT0dfUkVURU5USU9OX0RBWVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzApLFxuICBET0xMSE9VU0VfTE9HX1NFQ1VSSVRZX1JFVEVOVElPTl9EQVlTOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDcpLFxuICBET0xMSE9VU0VfTE9HX0ZMVVNIX0lOVEVSVkFMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwMDApLFxuICAvLyBCdWZmZXIgcmFpc2VkIHRvIDIwMDAgdG8gc3VwcG9ydCB0aGUgd2ViIGNvbnNvbGUgbG9nIHZpZXdlciDigJQgdGhlIGhpZ2hlciBjYXBhY2l0eVxuICAvLyByZWR1Y2VzIGZsdXNoIGZyZXF1ZW5jeSBhbmQga2VlcHMgbW9yZSBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgU1NFIGJhY2tmaWxsIG9uIGNvbm5lY3QuXG4gIERPTExIT1VTRV9MT0dfQlVGRkVSX1NJWkU6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMjAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9BUFBfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9TRUNVUklUWV9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg1MDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfUEVSRl9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfVEVMRU1FVFJZX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMDApLFxuICBET0xMSE9VU0VfTE9HX01BWF9FTlRSWV9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDE2Mzg0KSxcbiAgRE9MTEhPVVNFX0xPR19JTU1FRElBVEVfRkxVU0hfUkFURTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg1MCksXG4gIERPTExIT1VTRV9MT0dfRklMRV9NQVhfU0laRTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDQ4NTc2MDApLFxuICBET0xMSE9VU0VfTE9HX01BWF9ESVJfU0laRV9CWVRFUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgwKSxcbiAgRE9MTEhPVVNFX0xPR19NQVhfRklMRVNfUEVSX0NBVEVHT1JZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQZXJtaXNzaW9uIFNlcnZlciBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgSFRUUCBwZXJtaXNzaW9uIGV2YWx1YXRpb24gc2VydmVyIGZvciBQcmVUb29sVXNlIGhvb2tzLlxuICAgKiBXaGVuIHRydWUsIHN0YXJ0cyBhbiBIVFRQIGVuZHBvaW50IG9uIGEgZHluYW1pYyBwb3J0IGFmdGVyIGRlZmVycmVkXG4gICAqIHNldHVwIGNvbXBsZXRlcy4gV3JpdGVzIHBvcnQgdG8gfi8uZG9sbGhvdXNlL3J1bi9wZXJtaXNzaW9uLXNlcnZlci5wb3J0XG4gICAqIGZvciBob29rIHNjcmlwdCBkaXNjb3ZlcnkuIFJlcXVpcmVkIGZvciBhdXRvbm9tb3VzIGFnZW50IHBlcm1pc3Npb25cbiAgICogbWFuYWdlbWVudCB2aWEgQ2xhdWRlIENvZGUgaG9va3MuXG4gICAqL1xuICBET0xMSE9VU0VfUEVSTUlTU0lPTl9TRVJWRVI6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuXG4gIC8vIFdlYiBDb25zb2xlIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKiogRW5hYmxlIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlIChsb2dzICsgbWV0cmljcyB0YWJzKSAqL1xuICBET0xMSE9VU0VfV0VCX0NPTlNPTEU6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuXG4gIC8qKlxuICAgKiBQb3J0IHRoZSB3ZWIgY29uc29sZSBsZWFkZXIgYmluZHMgdG8gKCMxNzk0LCAjMTc5OCkuXG4gICAqXG4gICAqIERlZmF1bHQ6IDQxNzE1IOKAlCBcIkFJTElTXCIgb24gYSBwaG9uZSBrZXlwYWQsIGFmdGVyIHRoZSBBSSBMYXllclxuICAgKiBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbiB0aGF0IERvbGxob3VzZU1DUCBpbXBsZW1lbnRzLiBBbHNvIFwiQWxpY2VcIlxuICAgKiBpbiBHYWVsaWMuXG4gICAqXG4gICAqIFBvcnQgc2VsZWN0aW9uIGNyaXRlcmlhICh2ZXJpZmllZCAyMDI2LTA0LTA2KTpcbiAgICogICAtIE5vdCByZWdpc3RlcmVkIHdpdGggSUFOQSAobm8gZW50cnkgaW4gdGhlIHNlcnZpY2UgbmFtZSByZWdpc3RyeSlcbiAgICogICAtIE5vdCBpbiBubWFwIHNlcnZpY2VzIGRhdGFiYXNlIChuZXZlciBvYnNlcnZlZCBpbiB0aGUgd2lsZClcbiAgICogICAtIE5vIGtub3duIGFwcGxpY2F0aW9uLCBzZWN1cml0eSB0b29sLCBvciBtYWx3YXJlIGFzc29jaWF0aW9uc1xuICAgKiAgIC0gQmVsb3cgdGhlIG1hY09TIGVwaGVtZXJhbCByYW5nZSAoNDkxNTItNjU1MzUpLCBzbyBgYmluZCgpYFxuICAgKiAgICAgZG9lcyBub3QgcmFjZSB3aXRoIGtlcm5lbC1hbGxvY2F0ZWQgc291cmNlIHBvcnRzXG4gICAqICAgLSBJbiB0aGUgSUFOQSB1c2VyIHBvcnQgcmFuZ2UgKDEwMjQtNDkxNTEpXG4gICAqICAgLSBOb3QgYWRqYWNlbnQgdG8gdGhlIHByZS1hdXRoZW50aWNhdGlvbiBkZWZhdWx0ICgzOTM5KVxuICAgKlxuICAgKiBQcmV2aW91cyBkZWZhdWx0IHdhcyA1OTA3IChcIkxPR1NcIiB1cHNpZGUgZG93biBvbiBhIGNhbGN1bGF0b3IpLFxuICAgKiB3aGljaCBjb25mbGljdGVkIHdpdGggU3RlbGxhciBDeWJlcidzIEhUVFAgR0tFIGxvZyBwYXJzZXIuXG4gICAqXG4gICAqIE92ZXJyaWRlIHZpYSBlbnYgdmFyIGlmIDQxNzE1IGNvbGxpZGVzIHdpdGggc29tZXRoaW5nIGluIHlvdXJcbiAgICogZW52aXJvbm1lbnQg4oCUIGV2ZXJ5IHJ1bnRpbWUgcmVmZXJlbmNlIHJlYWRzIGZyb20gdGhpcyBzaW5nbGUgdmFsdWUuXG4gICAqL1xuICBET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVDogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDEwMjQpLm1heCg2NTUzNSkuZGVmYXVsdCg0MTcxNSksXG5cbiAgLyoqXG4gICAqIElzc3VlICMxNzgwOiBFbmZvcmNlIEJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvbiBvbiB0aGUgd2ViIGNvbnNvbGUgQVBJLlxuICAgKiBXaGVuIHRydWUsIGFsbCBwcm90ZWN0ZWQgZW5kcG9pbnRzIHJlcXVpcmUgYSB2YWxpZCB0b2tlbiBmcm9tIHRoZVxuICAgKiBjb25zb2xlIHRva2VuIGZpbGUuIFdoZW4gZmFsc2UgKHRoZSBwcmUtUGhhc2UtMiBkZWZhdWx0KSwgdGhlIHRva2VuXG4gICAqIGZpbGUgaXMgc3RpbGwgZ2VuZXJhdGVkIGJ1dCB0aGUgbWlkZGxld2FyZSBkb2VzIG5vdCBlbmZvcmNlIOKAlCB0aGlzXG4gICAqIGxldHMgdGhlIGluZnJhc3RydWN0dXJlIGxhbmQgd2l0aG91dCBicmVha2luZyBleGlzdGluZyBjb25zdW1lcnMuXG4gICAqIFdpbGwgZmxpcCB0byBkZWZhdWx0IGB0cnVlYCBpbiBhIGZvbGxvdy11cCBQUiBvbmNlIGFsbCBjb25zdW1lcnNcbiAgICogKGJyb3dzZXIsIGZvbGxvd2VycywgYnJpZGdlKSBoYXZlIGJlZW4gdXBkYXRlZCB0byBhdHRhY2ggdG9rZW5zLlxuICAgKi9cbiAgRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblxuICAvKipcbiAgICogSXNzdWUgIzE3ODA6IE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgY29uc29sZSB0b2tlbiBmaWxlIGxvY2F0aW9uLlxuICAgKiBXaGVuIHVuc2V0LCBgQ29uc29sZVRva2VuU3RvcmVgIGZhbGxzIGJhY2sgdG8gaXRzIGJ1aWx0LWluIGRlZmF1bHRcbiAgICogdW5kZXIgYH4vLmRvbGxob3VzZS9ydW4vYC4gTWFpbmx5IHVzZWZ1bCBmb3IgdGVzdHMgYW5kIGZvciBlbnRlcnByaXNlXG4gICAqIGRlcGxveW1lbnRzIHRoYXQgbW91bnQgYSBzaGFyZWQgdG9rZW4gZmlsZSBmcm9tIGEgc2VjcmV0cyB2b2x1bWUuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9UT0tFTl9GSUxFOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgY29uc29sZSBsZWFkZXIgbG9jayBmaWxlIGxvY2F0aW9uICgjMTc5NCkuXG4gICAqIFdoZW4gdW5zZXQsIGBMZWFkZXJFbGVjdGlvbmAgZmFsbHMgYmFjayB0byBpdHMgYnVpbHQtaW4gZGVmYXVsdCB1bmRlclxuICAgKiBgfi8uZG9sbGhvdXNlL3J1bi9gLiBQcmltYXJpbHkgdXNlZnVsIGZvciB0ZXN0cyB0aGF0IG5lZWQgaXNvbGF0aW9uXG4gICAqIGJldHdlZW4gcnVucyBhbmQgZm9yIGRlcGxveW1lbnRzIHRoYXQgc3BsaXQgcnVudGltZSBzdGF0ZSBhY3Jvc3NcbiAgICogbXVsdGlwbGUgaW5zdGFsbGF0aW9ucyBvbiB0aGUgc2FtZSBtYWNoaW5lLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfTEVBREVSX0xPQ0tfRklMRTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXG4gIC8vIExlYWRlci9Gb2xsb3dlciBSZWNvdmVyeSAoIzE4NTApXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSXNzdWUgIzE4NTA6IFJldHJ5IGRlbGF5cyAoaW4gbXMpIHdoZW4gdGhlIGxlYWRlciBmYWlscyB0byBiaW5kIHRoZSBjb25zb2xlXG4gICAqIHBvcnQgZHVlIHRvIEVBRERSSU5VU0UuIEVhY2ggdmFsdWUgaXMgYSBzdWNjZXNzaXZlIGJhY2tvZmYgZGVsYXkuXG4gICAqIERlZmF1bHQ6IDFzLCAycywgNHMgKDdzIHRvdGFsKS4gSW5jcmVhc2UgZm9yIHNsb3cgb3IgcmVtb3RlIGVudmlyb25tZW50cy5cbiAgICovXG4gIERPTExIT1VTRV9DT05TT0xFX0JJTkRfUkVUUllfREVMQVlTOiB6LnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAudHJhbnNmb3JtKHYgPT4gdiA/IHYuc3BsaXQoJywnKS5tYXAoTnVtYmVyKS5maWx0ZXIobiA9PiAhTnVtYmVyLmlzTmFOKG4pICYmIG4gPiAwKSA6IHVuZGVmaW5lZCksXG5cbiAgLyoqXG4gICAqIElzc3VlICMxODUwOiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgZm9yd2FyZGluZyBmYWlsdXJlcyBiZWZvcmUgYSBmb2xsb3dlclxuICAgKiBkZWNsYXJlcyB0aGUgbGVhZGVyIGRlYWQgYW5kIGF0dGVtcHRzIHNlbGYtcHJvbW90aW9uLiBIaWdoZXIgdmFsdWVzIHJlZHVjZVxuICAgKiBmYWxzZSBwb3NpdGl2ZXMgaW4gaGlnaC1sYXRlbmN5IGVudmlyb25tZW50cyBidXQgZGVsYXkgcmVjb3ZlcnkuXG4gICAqIERlZmF1bHQ6IDEwLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfTUFYX0ZPUldBUkRfRkFJTFVSRVM6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigxKS5tYXgoMTAwKS5kZWZhdWx0KDEwKSxcblxuICAvKipcbiAgICogSG93IG9mdGVuIGEgZm9sbG93ZXIgcmUtZXZhbHVhdGVzIHdoZXRoZXIgaXQgc2hvdWxkIHRha2Ugb3ZlciBjb25zb2xlXG4gICAqIGxlYWRlcnNoaXAgaW4gYSBoZXRlcm9nZW5lb3VzIG1peGVkLXZlcnNpb24gZW52aXJvbm1lbnQuXG4gICAqIERlZmF1bHQ6IDE1MDAwbXMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19NUzogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDFfMDAwKS5tYXgoMzAwXzAwMCkuZGVmYXVsdCgxNV8wMDApLFxuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHBlci1zZXNzaW9uIGppdHRlciBhZGRlZCB0byBhdXRob3JpdHkgcmVjaGVja3Mgc28gbGFyZ2UgbWl4ZWRcbiAgICogZmxlZXRzIGRvIG5vdCBhbGwgd2FrZSB1cCBpbiB0aGUgc2FtZSBpbnN0YW50LlxuICAgKiBEZWZhdWx0OiA1MDAwbXMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19KSVRURVJfTVM6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigwKS5tYXgoNjBfMDAwKS5kZWZhdWx0KDVfMDAwKSxcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGF1dGhvcml0eSByZWNoZWNrIGZhaWx1cmVzIGJlZm9yZSB0aGUgZm9sbG93ZXIgb3BlbnNcbiAgICogaXRzIGxvY2FsIGNpcmN1aXQgYnJlYWtlciBhbmQgc3RvcHMgcmV0cnlpbmcgdW50aWwgdGhlIGNvb2xkb3duIGV4cGlyZXMuXG4gICAqIERlZmF1bHQ6IDMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19GQUlMVVJFX1RIUkVTSE9MRDogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDEpLm1heCgxMDApLmRlZmF1bHQoMyksXG5cbiAgLyoqXG4gICAqIENvb2xkb3duIHBlcmlvZCBhZnRlciB0aGUgZm9sbG93ZXIgYXV0aG9yaXR5IG1vbml0b3Igb3BlbnMgaXRzIGNpcmN1aXRcbiAgICogYnJlYWtlciBkdWUgdG8gcmVwZWF0ZWQgZmFpbHVyZXMuXG4gICAqIERlZmF1bHQ6IDYwMDAwbXMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19GQUlMVVJFX0NPT0xET1dOX01TOiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMV8wMDApLm1heCg5MDBfMDAwKS5kZWZhdWx0KDYwXzAwMCksXG5cbiAgLyoqXG4gICAqIElzc3VlICMxNzgwOiBQaGFzZSAyIOKAlCByZXF1aXJlIGEgY29uZmlybWF0aW9uIGNvZGUgKE9TIGRpYWxvZyBvciBUT1RQKVxuICAgKiBmb3IgcHJpdmlsZWdlZCBhY3Rpb25zIGxpa2UgdG9rZW4gcm90YXRpb24uIERlZmF1bHQgaXMgdHJ1ZSBmb3Igc2FmZXR5O1xuICAgKiBzZXQgdG8gZmFsc2UgZm9yIGhlYWRsZXNzIENJIGFuZCBzY3JpcHRlZCBkZXBsb3ltZW50cyB0aGF0IG5lZWQgdG8gcm90YXRlXG4gICAqIHdpdGhvdXQgaHVtYW4gaW50ZXJhY3Rpb24uXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9ST1RBVElPTl9SRVFVSVJFX0NPTkZJUk1BVElPTjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTZWN1cml0eSBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIElzc3VlICM0NTI6IEdhdGVrZWVwZXIgcG9saWN5IGVuZm9yY2VtZW50LlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbGwgTUNQLUFRTCBvcGVyYXRpb25zIGdvIHRocm91Z2ggdGhlIDQtbGF5ZXIgR2F0ZWtlZXBlclxuICAgKiBlbmZvcmNlKCkgcGlwZWxpbmUuIFdoZW4gZmFsc2UsIGZhbGxzIGJhY2sgdG8gcm91dGUgdmFsaWRhdGlvbiBvbmx5LlxuICAgKiBUaGlzIGlzIGEgdXNlci9vcGVyYXRvciBzZXR0aW5nIOKAlCB0aGUgTExNIGNhbm5vdCBieXBhc3MgaXQuXG4gICAqL1xuICBET0xMSE9VU0VfR0FURUtFRVBFUl9FTkFCTEVEOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgLyoqXG4gICAqIElzc3VlICM2Nzk6IEVsZW1lbnQgcG9saWN5IGxheWVyIGtpbGwgc3dpdGNoLlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhY3RpdmUgZWxlbWVudCBnYXRla2VlcGVyIHBvbGljaWVzIChhbGxvdy9jb25maXJtL2Rlbnkvc2NvcGVSZXN0cmljdGlvbnMpXG4gICAqIGNhbiBvdmVycmlkZSBkZWZhdWx0IG9wZXJhdGlvbiBwZXJtaXNzaW9uIGxldmVscy4gV2hlbiBmYWxzZSwgTGF5ZXIgMiBvZiBHYXRla2VlcGVyLmVuZm9yY2UoKVxuICAgKiBpcyBieXBhc3NlZCBlbnRpcmVseSDigJQgb25seSByb3V0ZSB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHBlcm1pc3Npb24gbGV2ZWxzIGFwcGx5LlxuICAgKiBVc2UgZm9yIGVtZXJnZW5jeSBsb2NrZG93biwgaGFyZGVuZWQgZGVwbG95bWVudHMsIG9yIHBvbGljeSBkZWJ1Z2dpbmcuXG4gICAqIFRoaXMgaXMgYW4gb3BlcmF0b3IvaW5mcmFzdHJ1Y3R1cmUgc2V0dGluZyDigJQgdGhlIExMTSBjYW5ub3QgYnlwYXNzIGl0LlxuICAgKi9cbiAgRE9MTEhPVVNFX0dBVEVLRUVQRVJfRUxFTUVOVF9QT0xJQ1lfT1ZFUlJJREVTOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgLyoqXG4gICAqIElzc3VlICM3OTk6IFBvbGljeSBleHBvcnQgb3B0LWluIGZsYWcuXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIFBvbGljeUV4cG9ydFNlcnZpY2Ugd3JpdGVzIHRoZSBzZWN1cml0eSBwb2xpY3kgYmx1ZXByaW50IHRvXG4gICAqIH4vLmRvbGxob3VzZS9icmlkZ2UvaW1wb3J0cy9wb2xpY2llcy8gb24gYWN0aXZhdGlvbiBjaGFuZ2VzLiBUaGUgRG9sbGhvdXNlQnJpZGdlXG4gICAqIHBlcm1pc3Npb24tcHJvbXB0IHNlcnZlciB3YXRjaGVzIHRoaXMgZmlsZSB0byBldmFsdWF0ZSBwZXJtaXNzaW9ucyBsb2NhbGx5LlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBwb2xpY3kgZmlsZSBleHBvcnQgZW50aXJlbHkuXG4gICAqL1xuICBET0xMSE9VU0VfUE9MSUNZX0VYUE9SVF9FTkFCTEVEOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFN0b3JhZ2UgTGF5ZXIgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIERPTExIT1VTRV9TQ0FOX0NPT0xET1dOX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMDApLFxuICBET0xMSE9VU0VfSU5ERVhfREVCT1VOQ0VfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMjAwMCksXG4gIERPTExIT1VTRV9FTEVNRU5UX0NBQ0hFX1RUTF9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzNjAwMDAwKSxcbiAgRE9MTEhPVVNFX1BBVEhfQ0FDSEVfVFRMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDM2MDAwMDApLFxuICBET0xMSE9VU0VfVE9PTF9DQUNIRV9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNjAwMDApLFxuICBET0xMSE9VU0VfR0xPQkFMX0NBQ0hFX01FTU9SWV9NQjogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxNTApLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUGVybWlzc2lvbiBQcm9tcHQgQ29uZmlndXJhdGlvbiAoSXNzdWUgIzYyNSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBNYXhpbXVtIENMSSBhcHByb3ZhbCByZWNvcmRzIGJlZm9yZSBMUlUgZXZpY3Rpb24gKGRlZmF1bHQ6IDUwKSAqL1xuICBET0xMSE9VU0VfQ0xJX0FQUFJPVkFMX01BWDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg1MCksXG5cbiAgLyoqIERlZmF1bHQgVFRMIGZvciBDTEkgYXBwcm92YWwgcmVjb3JkcyBpbiBtcyAoZGVmYXVsdDogMzAwMDAwID0gNSBtaW4pICovXG4gIERPTExIT1VTRV9DTElfQVBQUk9WQUxfVFRMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDMwMF8wMDApLFxuXG4gIC8qKiBQZXJtaXNzaW9uIHByb21wdCByYXRlIGxpbWl0OiBtYXggcmVxdWVzdHMgcGVyIHdpbmRvdyAoZGVmYXVsdDogMTAwKSAqL1xuICBET0xMSE9VU0VfUEVSTUlTU0lPTl9QUk9NUFRfUkFURV9MSU1JVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDApLFxuXG4gIC8qKiBDTEkgYXBwcm92YWwgY3JlYXRpb24gcmF0ZSBsaW1pdDogbWF4IHJlcXVlc3RzIHBlciB3aW5kb3cgKGRlZmF1bHQ6IDIwKSAqL1xuICBET0xMSE9VU0VfQ0xJX0FQUFJPVkFMX1JBVEVfTElNSVQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMjApLFxuXG4gIC8qKiBSYXRlIGxpbWl0IHdpbmRvdyBpbiBtcyBmb3IgcGVybWlzc2lvbiBwcm9tcHQgYW5kIENMSSBhcHByb3ZhbHMgKGRlZmF1bHQ6IDYwMDAwID0gNjBzKSAqL1xuICBET0xMSE9VU0VfUEVSTUlTU0lPTl9SQVRFX1dJTkRPV19NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg2MF8wMDApLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTWV0cmljcyBDb2xsZWN0aW9uIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBET0xMSE9VU0VfTUVUUklDU19FTkFCTEVEOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfQ09MTEVDVElPTl9JTlRFUlZBTF9NUzogei5jb2VyY2UubnVtYmVyKCkubWluKDEwMDApLm1heCgzMDAwMDApLmRlZmF1bHQoMTUwMDApLFxuICBET0xMSE9VU0VfTUVUUklDU19NQVhfU05BUFNIT1RfU0laRTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDI0MDApLFxuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUT1JfRkFJTFVSRV9USFJFU0hPTEQ6IHouY29lcmNlLm51bWJlcigpLm1pbigxKS5tYXgoMTAwKS5kZWZhdWx0KDEwKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfQ09MTEVDVElPTl9EVVJBVElPTl9XQVJOX01TOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMTAwKS5tYXgoNjAwMDApLmRlZmF1bHQoNTAwMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX01FTU9SWV9TTkFQU0hPVF9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkubWluKDEwKS5tYXgoMTAwMDApLmRlZmF1bHQoMjQwKSxcblxuICAvLyBQYXR0ZXJuIGVuY3J5cHRpb24gc2V0dGluZ3MgZm9yIE1lbW9yeSBTZWN1cml0eSAoSXNzdWUgIzEzMjEpXG4gIERPTExIT1VTRV9ESVNBQkxFX0VOQ1JZUFRJT046IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgRE9MTEhPVVNFX0VOQ1JZUFRJT05fU0VDUkVUOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIERPTExIT1VTRV9FTkNSWVBUSU9OX1NBTFQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyBUb2tlbiBlbmNyeXB0aW9uIHNlY3JldCAoU0VDLTAxLCAjMTczNSlcbiAgLy8gV2hlbiBzZXQsIHJlcGxhY2VzIHRoZSBwcmVkaWN0YWJsZSBtYWNoaW5lLWRlcml2ZWQgcGFzc3BocmFzZSBmb3IgdG9rZW4gZW5jcnlwdGlvbi5cbiAgLy8gU3Ryb25nbHkgcmVjb21tZW5kZWQgZm9yIGFueSBzaGFyZWQgb3IgbXVsdGktdXNlciBlbnZpcm9ubWVudC5cbiAgLy8gTWluaW11bSAzMiBjaGFyYWN0ZXJzIGVuZm9yY2VkIHRvIHByZXZlbnQgd2VhayBwYXNzcGhyYXNlcy5cbiAgRE9MTEhPVVNFX1RPS0VOX1NFQ1JFVDogei5zdHJpbmcoKS5taW4oMzIpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqXG4gKiBWYWxpZGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBUeXBlIGlzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQgZnJvbSB0aGUgc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBlbnYgPSBlbnZTY2hlbWEucGFyc2UocHJvY2Vzcy5lbnYpO1xuXG4vKipcbiAqIEVudmlyb25tZW50IHR5cGUgKGluZmVycmVkIGZyb20gc2NoZW1hKVxuICovXG5leHBvcnQgdHlwZSBFbnYgPSB6LmluZmVyPHR5cGVvZiBlbnZTY2hlbWE+O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGhlbHBlcnMgZm9yIGVudmlyb25tZW50IGRldGVjdGlvblxuICovXG5leHBvcnQgY29uc3QgaXNUZXN0ID0gZW52Lk5PREVfRU5WID09PSAndGVzdCc7XG5leHBvcnQgY29uc3QgaXNEZXZlbG9wbWVudCA9IGVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JztcbmV4cG9ydCBjb25zdCBpc1Byb2R1Y3Rpb24gPSBlbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcblxuLyoqXG4gKiBMb2cgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiAod2l0aG91dCBzZWNyZXRzKVxuICovXG5pZiAoaXNEZXZlbG9wbWVudCB8fCBpc1Rlc3QpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGxvYWRlZDonLCB7XG4gICAgTk9ERV9FTlY6IGVudi5OT0RFX0VOVixcbiAgICBQT1JUOiBlbnYuUE9SVCxcbiAgICBMT0dfTEVWRUw6IGVudi5MT0dfTEVWRUwsXG4gICAgSEFTX0dJVEhVQl9UT0tFTjogISFlbnYuR0lUSFVCX1RPS0VOLFxuICAgIEhBU19HSVRIVUJfVEVTVF9UT0tFTjogISFlbnYuR0lUSFVCX1RFU1RfVE9LRU4sXG4gIH0pO1xufVxuIl19
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export declare const PACKAGE_VERSION = "2.0.27-rc.
|
|
6
|
-
export declare const BUILD_TIMESTAMP = "2026-04-
|
|
5
|
+
export declare const PACKAGE_VERSION = "2.0.27-rc.4";
|
|
6
|
+
export declare const BUILD_TIMESTAMP = "2026-04-19T17:27:21.141Z";
|
|
7
7
|
export declare const BUILD_TYPE: 'npm' | 'git';
|
|
8
8
|
export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
|
|
9
9
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export const PACKAGE_VERSION = '2.0.27-rc.
|
|
6
|
-
export const BUILD_TIMESTAMP = '2026-04-
|
|
5
|
+
export const PACKAGE_VERSION = '2.0.27-rc.4';
|
|
6
|
+
export const BUILD_TIMESTAMP = '2026-04-19T17:27:21.141Z';
|
|
7
7
|
export const BUILD_TYPE = 'npm';
|
|
8
8
|
export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuNCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMTlUMTc6Mjc6MjEuMTQxWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
|
|
@@ -18,6 +18,8 @@ import type { MemoryLogSink } from '../../logging/sinks/MemoryLogSink.js';
|
|
|
18
18
|
import type { MemoryMetricsSink } from '../../metrics/sinks/MemoryMetricsSink.js';
|
|
19
19
|
import { logger } from '../../utils/logger.js';
|
|
20
20
|
import { isLeaderWebConsoleReachable, forceClaimLeadership, detectLegacyLeader, readLeaderLock, deleteLeaderLock, type ElectionResult, type ConsoleLeaderInfo, type LeaderPreferenceDecision } from './LeaderElection.js';
|
|
21
|
+
import { LeaderForwardingLogSink, SessionHeartbeat } from './LeaderForwardingSink.js';
|
|
22
|
+
import { PromotionManager } from './PromotionManager.js';
|
|
21
23
|
import { findPidOnPort } from './StaleProcessRecovery.js';
|
|
22
24
|
/**
|
|
23
25
|
* Options for starting the unified console.
|
|
@@ -108,6 +110,12 @@ interface FollowerAuthorityDependencies {
|
|
|
108
110
|
forceClaimLeadershipImpl?: typeof forceClaimLeadership;
|
|
109
111
|
deleteLeaderLockImpl?: typeof deleteLeaderLock;
|
|
110
112
|
}
|
|
113
|
+
interface FollowerAuthorityMonitorDependencies extends FollowerAuthorityDependencies {
|
|
114
|
+
resolveFollowerAuthorityImpl?: typeof resolveFollowerAuthority;
|
|
115
|
+
setIntervalImpl?: typeof setInterval;
|
|
116
|
+
clearIntervalImpl?: typeof clearInterval;
|
|
117
|
+
nowImpl?: () => number;
|
|
118
|
+
}
|
|
111
119
|
interface DiscoveryDependencies {
|
|
112
120
|
fetchImpl?: typeof fetch;
|
|
113
121
|
findPidOnPortImpl?: typeof findPidOnPort;
|
|
@@ -120,6 +128,7 @@ interface BindFailureRecoveryDependencies extends DiscoveryDependencies {
|
|
|
120
128
|
export declare function recoverLeaderBindFailure(provisionalLeader: ConsoleLeaderInfo, port: number, authToken: string | null, deps?: BindFailureRecoveryDependencies): Promise<BindFailureRecoveryResult>;
|
|
121
129
|
export declare function evaluatePortOwnerReplacement(candidateLeader: ConsoleLeaderInfo, fallback: PortLeaderDiscovery): PortOwnerReplacementDecision;
|
|
122
130
|
export declare function resolveFollowerAuthority(sessionId: string, consolePort: number, election: ElectionResult, deps?: FollowerAuthorityDependencies): Promise<FollowerAuthorityResolution>;
|
|
131
|
+
export declare function startFollowerAuthorityMonitor(options: UnifiedConsoleOptions, consolePort: number, election: ElectionResult, promotionMgr: PromotionManager, forwardingSink: LeaderForwardingLogSink, sessionHeartbeat: SessionHeartbeat, deps?: FollowerAuthorityMonitorDependencies): () => void;
|
|
123
132
|
/**
|
|
124
133
|
* Start the unified web console.
|
|
125
134
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAEL,2BAA2B,EAC3B,oBAAoB,EAGpB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAOhB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,9 +32,27 @@ const DEFAULT_CONSOLE_PORT = env.DOLLHOUSE_WEB_CONSOLE_PORT;
|
|
|
32
32
|
const LEGACY_CONSOLE_FALLBACK_PORT = 3939;
|
|
33
33
|
const SYNTHETIC_PORT_OWNER_SESSION_PREFIX = 'port-owner-';
|
|
34
34
|
const LEADER_DISCOVERY_TIMEOUT_MS = 2_000;
|
|
35
|
+
const FOLLOWER_AUTHORITY_MONITOR_CONFIG = {
|
|
36
|
+
intervalMs: env.DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_MS,
|
|
37
|
+
jitterMs: env.DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_JITTER_MS,
|
|
38
|
+
failureThreshold: env.DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_THRESHOLD,
|
|
39
|
+
failureCooldownMs: env.DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_COOLDOWN_MS,
|
|
40
|
+
};
|
|
35
41
|
function currentTimestamp() {
|
|
36
42
|
return new Date().toISOString();
|
|
37
43
|
}
|
|
44
|
+
function computeFollowerAuthorityRecheckInterval(sessionId) {
|
|
45
|
+
const normalizedSessionId = UnicodeValidator.normalize(sessionId).normalizedContent;
|
|
46
|
+
let hash = 0;
|
|
47
|
+
for (let index = 0; index < normalizedSessionId.length; index += 1) {
|
|
48
|
+
const codePoint = normalizedSessionId.codePointAt(index) ?? 0;
|
|
49
|
+
hash = (hash * 31 + codePoint) >>> 0;
|
|
50
|
+
if (codePoint > 0xffff) {
|
|
51
|
+
index += 1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return FOLLOWER_AUTHORITY_MONITOR_CONFIG.intervalMs + (hash % (FOLLOWER_AUTHORITY_MONITOR_CONFIG.jitterMs + 1));
|
|
55
|
+
}
|
|
38
56
|
/**
|
|
39
57
|
* Check for a running legacy (pre-authentication) DollhouseMCP console and
|
|
40
58
|
* log a WARN-level message if one is found (#1794).
|
|
@@ -299,17 +317,19 @@ export async function resolveFollowerAuthority(sessionId, consolePort, election,
|
|
|
299
317
|
};
|
|
300
318
|
}
|
|
301
319
|
const replacement = evaluatePortOwnerReplacement(candidateLeader, discovery);
|
|
320
|
+
if (replacement.shouldEvict) {
|
|
321
|
+
await deleteLeaderLockImpl();
|
|
322
|
+
logger.warn(discovery.ownerPid === election.leaderInfo.pid
|
|
323
|
+
? '[UnifiedConsole] Older console leader detected on the console port; newer session will take over'
|
|
324
|
+
: '[UnifiedConsole] Split-brain console authority detected; newer session will replace the actual port owner', buildAuthorityResolutionLogContext(consolePort, election.leaderInfo, discovery, replacement));
|
|
325
|
+
return {
|
|
326
|
+
election: { role: 'leader', leaderInfo: candidateLeader },
|
|
327
|
+
discovery,
|
|
328
|
+
replacement,
|
|
329
|
+
forcedClaim: false,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
302
332
|
if (discovery.ownerPid !== election.leaderInfo.pid) {
|
|
303
|
-
if (replacement.shouldEvict) {
|
|
304
|
-
await deleteLeaderLockImpl();
|
|
305
|
-
logger.warn('[UnifiedConsole] Split-brain console authority detected; newer session will replace the actual port owner', buildAuthorityResolutionLogContext(consolePort, election.leaderInfo, discovery, replacement));
|
|
306
|
-
return {
|
|
307
|
-
election: { role: 'leader', leaderInfo: candidateLeader },
|
|
308
|
-
discovery,
|
|
309
|
-
replacement,
|
|
310
|
-
forcedClaim: false,
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
333
|
logger.warn('[UnifiedConsole] Split-brain console authority detected; following the actual port owner', buildAuthorityResolutionLogContext(consolePort, election.leaderInfo, discovery, replacement));
|
|
314
334
|
return {
|
|
315
335
|
election: { role: 'follower', leaderInfo: discovery.leaderInfo },
|
|
@@ -325,6 +345,104 @@ export async function resolveFollowerAuthority(sessionId, consolePort, election,
|
|
|
325
345
|
forcedClaim: false,
|
|
326
346
|
};
|
|
327
347
|
}
|
|
348
|
+
export function startFollowerAuthorityMonitor(options, consolePort, election, promotionMgr, forwardingSink, sessionHeartbeat, deps = {}) {
|
|
349
|
+
const resolveFollowerAuthorityImpl = deps.resolveFollowerAuthorityImpl ?? resolveFollowerAuthority;
|
|
350
|
+
const setIntervalImpl = deps.setIntervalImpl ?? setInterval;
|
|
351
|
+
const clearIntervalImpl = deps.clearIntervalImpl ?? clearInterval;
|
|
352
|
+
const nowImpl = deps.nowImpl ?? Date.now;
|
|
353
|
+
let currentElection = election;
|
|
354
|
+
let checkInProgress = false;
|
|
355
|
+
let promotionQueued = false;
|
|
356
|
+
let consecutiveFailures = 0;
|
|
357
|
+
let circuitOpenUntilMs = 0;
|
|
358
|
+
let authorityTimer = null;
|
|
359
|
+
const recheckIntervalMs = computeFollowerAuthorityRecheckInterval(options.sessionId);
|
|
360
|
+
const queueAuthorityPromotion = () => {
|
|
361
|
+
queueMicrotask(() => {
|
|
362
|
+
promotionMgr.promote(forwardingSink, sessionHeartbeat)
|
|
363
|
+
.catch((err) => logger.error('[UnifiedConsole] Authority-based promotion crashed', {
|
|
364
|
+
error: String(err),
|
|
365
|
+
}));
|
|
366
|
+
});
|
|
367
|
+
};
|
|
368
|
+
const handleResolvedAuthority = (resolved) => {
|
|
369
|
+
currentElection = resolved.election;
|
|
370
|
+
consecutiveFailures = 0;
|
|
371
|
+
circuitOpenUntilMs = 0;
|
|
372
|
+
if (resolved.election.role !== 'leader') {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
promotionQueued = true;
|
|
376
|
+
if (authorityTimer) {
|
|
377
|
+
clearIntervalImpl(authorityTimer);
|
|
378
|
+
authorityTimer = null;
|
|
379
|
+
}
|
|
380
|
+
logger.warn('[UnifiedConsole] Follower authority re-evaluation queued a leader takeover', {
|
|
381
|
+
sessionId: options.sessionId,
|
|
382
|
+
stableSessionId: options.stableSessionId,
|
|
383
|
+
port: consolePort,
|
|
384
|
+
recheckIntervalMs,
|
|
385
|
+
electedLeaderPid: election.leaderInfo.pid,
|
|
386
|
+
electedLeaderSessionId: election.leaderInfo.sessionId,
|
|
387
|
+
resolvedLeaderPid: resolved.election.leaderInfo.pid,
|
|
388
|
+
resolvedLeaderSessionId: resolved.election.leaderInfo.sessionId,
|
|
389
|
+
replacementReason: resolved.replacement?.preference?.reason ?? null,
|
|
390
|
+
forcedClaim: resolved.forcedClaim,
|
|
391
|
+
});
|
|
392
|
+
queueAuthorityPromotion();
|
|
393
|
+
};
|
|
394
|
+
const handleAuthorityFailure = (err) => {
|
|
395
|
+
consecutiveFailures += 1;
|
|
396
|
+
if (consecutiveFailures >= FOLLOWER_AUTHORITY_MONITOR_CONFIG.failureThreshold) {
|
|
397
|
+
circuitOpenUntilMs = nowImpl() + FOLLOWER_AUTHORITY_MONITOR_CONFIG.failureCooldownMs;
|
|
398
|
+
logger.warn('[UnifiedConsole] Follower authority re-evaluation circuit opened after repeated failures', {
|
|
399
|
+
sessionId: options.sessionId,
|
|
400
|
+
port: consolePort,
|
|
401
|
+
recheckIntervalMs,
|
|
402
|
+
consecutiveFailures,
|
|
403
|
+
circuitOpenUntilMs: new Date(circuitOpenUntilMs).toISOString(),
|
|
404
|
+
});
|
|
405
|
+
consecutiveFailures = 0;
|
|
406
|
+
}
|
|
407
|
+
logger.debug('[UnifiedConsole] Follower authority re-evaluation failed', {
|
|
408
|
+
error: err instanceof Error ? err.message : String(err),
|
|
409
|
+
sessionId: options.sessionId,
|
|
410
|
+
port: consolePort,
|
|
411
|
+
recheckIntervalMs,
|
|
412
|
+
circuitOpenUntilMs: circuitOpenUntilMs ? new Date(circuitOpenUntilMs).toISOString() : null,
|
|
413
|
+
});
|
|
414
|
+
};
|
|
415
|
+
authorityTimer = setIntervalImpl(() => {
|
|
416
|
+
if (checkInProgress || promotionQueued) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
if (circuitOpenUntilMs > nowImpl()) {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
if (circuitOpenUntilMs !== 0) {
|
|
423
|
+
logger.info('[UnifiedConsole] Follower authority re-evaluation circuit closed; resuming checks', {
|
|
424
|
+
sessionId: options.sessionId,
|
|
425
|
+
port: consolePort,
|
|
426
|
+
recheckIntervalMs,
|
|
427
|
+
});
|
|
428
|
+
circuitOpenUntilMs = 0;
|
|
429
|
+
}
|
|
430
|
+
checkInProgress = true;
|
|
431
|
+
resolveFollowerAuthorityImpl(options.sessionId, consolePort, currentElection)
|
|
432
|
+
.then(handleResolvedAuthority)
|
|
433
|
+
.catch(handleAuthorityFailure)
|
|
434
|
+
.finally(() => {
|
|
435
|
+
checkInProgress = false;
|
|
436
|
+
});
|
|
437
|
+
}, recheckIntervalMs);
|
|
438
|
+
authorityTimer.unref();
|
|
439
|
+
return () => {
|
|
440
|
+
if (authorityTimer) {
|
|
441
|
+
clearIntervalImpl(authorityTimer);
|
|
442
|
+
authorityTimer = null;
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
}
|
|
328
446
|
async function attemptForceTakeover(options, currentElection, consolePort, primaryToken, serverOpts, startWebServerImpl) {
|
|
329
447
|
const initialFallback = await recoverLeaderBindFailure(currentElection.leaderInfo, consolePort, primaryToken);
|
|
330
448
|
const initialReplacement = evaluatePortOwnerReplacement(currentElection.leaderInfo, initialFallback);
|
|
@@ -573,6 +691,7 @@ async function startAsFollower(options, election, consolePort = DEFAULT_CONSOLE_
|
|
|
573
691
|
// Start session heartbeat to the leader
|
|
574
692
|
sessionHeartbeat = new SessionHeartbeat(leaderUrl, options.sessionId, process.pid, authToken);
|
|
575
693
|
await sessionHeartbeat.start();
|
|
694
|
+
const stopAuthorityMonitor = startFollowerAuthorityMonitor(options, consolePort, election, promotionMgr, forwardingSink, sessionHeartbeat);
|
|
576
695
|
logger.info('[UnifiedConsole] Follower started', {
|
|
577
696
|
sessionId: options.sessionId, pid: process.pid, role: 'follower',
|
|
578
697
|
leaderSession: election.leaderInfo.sessionId, leaderPid: election.leaderInfo.pid,
|
|
@@ -582,9 +701,10 @@ async function startAsFollower(options, election, consolePort = DEFAULT_CONSOLE_
|
|
|
582
701
|
role: 'follower',
|
|
583
702
|
election,
|
|
584
703
|
cleanup: async () => {
|
|
704
|
+
stopAuthorityMonitor();
|
|
585
705
|
await sessionHeartbeat.stop();
|
|
586
706
|
await forwardingSink.close();
|
|
587
707
|
},
|
|
588
708
|
};
|
|
589
709
|
}
|
|
590
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU9ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUl6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7QUFDNUQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFF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QVEsQ0FBQyxVQUFVLENBQUMsR0FBRztRQUNoRixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUztLQUNoRCxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUTtRQUNSLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsQixNQUFNLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCB3ZWIgY29uc29sZSBvcmNoZXN0cmF0b3IuXG4gKlxuICogVGllcyB0b2dldGhlciBsZWFkZXIgZWxlY3Rpb24sIGNvbnNvbGUgc3RhcnR1cCwgZm9sbG93ZXIgd2lyaW5nLFxuICogYW5kIHNlc3Npb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnRcbiAqIGNhbGxlZCBieSB0aGUgREkgY29udGFpbmVyIGR1cmluZyBkZWZlcnJlZCBzZXR1cC5cbiAqXG4gKiBGbG93OlxuICogMS4gUnVuIGxlYWRlciBlbGVjdGlvbiAocmVhZCBsb2NrIGZpbGUsIGNsYWltIG9yIGZvbGxvdylcbiAqIDIuIElmIGxlYWRlcjogc3RhcnQgd2ViIHNlcnZlciBvbiBmaXhlZCBwb3J0LCBtb3VudCBpbmdlc3Qgcm91dGVzLCBzdGFydCBoZWFydGJlYXRcbiAqIDMuIElmIGZvbGxvd2VyOiByZWdpc3RlciBmb3J3YXJkaW5nIHNpbmtzIHdpdGggTG9nTWFuYWdlciwgc3RhcnQgc2Vzc2lvbiBoZWFydGJlYXRcbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB0eXBlIHsgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi8uLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uLy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBXZWJTZXJ2ZXJPcHRpb25zLCBXZWJTZXJ2ZXJSZXN1bHQgfSBmcm9tICcuLi9zZXJ2ZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgZWxlY3RMZWFkZXIsXG4gIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZSxcbiAgZm9yY2VDbGFpbUxlYWRlcnNoaXAsXG4gIHN0YXJ0SGVhcnRiZWF0LFxuICByZWdpc3RlckxlYWRlckNsZWFudXAsXG4gIGRldGVjdExlZ2FjeUxlYWRlcixcbiAgcmVhZExlYWRlckxvY2ssXG4gIGRlbGV0ZUxlYWRlckxvY2ssXG4gIGNsYWltTGVhZGVyc2hpcCxcbiAgY3JlYXRlTGVhZGVySW5mbyxcbiAgTE9DS19WRVJTSU9OLFxuICBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgZXZhbHVhdGVMZWFkZXJQcmVmZXJlbmNlLFxuICB0eXBlIEVsZWN0aW9uUmVzdWx0LFxuICB0eXBlIENvbnNvbGVMZWFkZXJJbmZvLFxuICB0eXBlIExlYWRlclByZWZlcmVuY2VEZWNpc2lvbixcbn0gZnJvbSAnLi9MZWFkZXJFbGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVJbmdlc3RSb3V0ZXMgfSBmcm9tICcuL0luZ2VzdFJvdXRlcy5qcyc7XG5pbXBvcnQge1xuICBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgU2Vzc2lvbkhlYXJ0YmVhdCxcbn0gZnJvbSAnLi9MZWFkZXJGb3J3YXJkaW5nU2luay5qcyc7XG5pbXBvcnQgeyBQcm9tb3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9Qcm9tb3Rpb25NYW5hZ2VyLmpzJztcbmltcG9ydCB7IENvbnNvbGVUb2tlblN0b3JlIH0gZnJvbSAnLi9jb25zb2xlVG9rZW4uanMnO1xuaW1wb3J0IHtcbiAgZmluZFBpZE9uUG9ydCxcbiAga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkLFxuICB0eXBlIEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lLFxufSBmcm9tICcuL1N0YWxlUHJvY2Vzc1JlY292ZXJ5LmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuXG4vKipcbiAqIERlZmF1bHQgY29uc29sZSBwb3J0IGZyb20gdGhlIGVudiB2YXIuIFVzZWQgYXMgZmFsbGJhY2sgd2hlbiBubyBwb3J0XG4gKiBpcyBwcm92aWRlZCB2aWEgY29uZmlnIGZpbGUgb3Igb3B0aW9ucy4gVGhlIHJlc29sdXRpb24gaGllcmFyY2h5IGlzOlxuICogICAxLiBvcHRpb25zLnBvcnQgKGZyb20gY29uZmlnIGZpbGUsIHJlc29sdmVkIGJ5IHRoZSBESSBjb250YWluZXIpXG4gKiAgIDIuIERPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUIGVudiB2YXJcbiAqICAgMy4gNDE3MTUgKGhhcmRjb2RlZCBkZWZhdWx0IGluIGVudi50cylcbiAqL1xuY29uc3QgREVGQVVMVF9DT05TT0xFX1BPUlQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQ7XG5jb25zdCBMRUdBQ1lfQ09OU09MRV9GQUxMQkFDS19QT1JUID0gMzkzOTtcbmNvbnN0IFNZTlRIRVRJQ19QT1JUX09XTkVSX1NFU1NJT05fUFJFRklYID0gJ3BvcnQtb3duZXItJztcbmNvbnN0IExFQURFUl9ESVNDT1ZFUllfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG5mdW5jdGlvbiBjdXJyZW50VGltZXN0YW1wKCk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgdGhlIHVuaWZpZWQgY29uc29sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkQ29uc29sZU9wdGlvbnMge1xuICAvKiogVGhpcyBwcm9jZXNzJ3MgdW5pcXVlIHNlc3Npb24gSUQgKi9cbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgRG9sbGhvdXNlIHNlc3Npb24gaWRlbnRpdHkgc2hvd24gdG8gaHVtYW5zIGFuZCB1c2VkIGZvciBwZXJzaXN0ZW5jZS4gKi9cbiAgc3RhYmxlU2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBQb3J0Zm9saW8gYmFzZSBkaXJlY3RvcnkgKGZvciBzdGFydFdlYlNlcnZlcikgKi9cbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmc7XG4gIC8qKiBMb2cgbWVtb3J5IHNpbmsgKGZvciBjb25zb2xlIGhpc3RvcnkpICovXG4gIG1lbW9yeVNpbms6IE1lbW9yeUxvZ1Npbms7XG4gIC8qKiBNZXRyaWNzIG1lbW9yeSBzaW5rICovXG4gIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1Npbms7XG4gIC8qKiBNQ1AtQVFMIGhhbmRsZXIgZm9yIHBlcm1pc3Npb24gcm91dGVzICh0eXBlZCBhcyBhbnkgdG8gYXZvaWQgY2lyY3VsYXIgaW1wb3J0cykgKi9cbiAgbWNwQXFsSGFuZGxlcj86IGFueTtcbiAgLyoqIENhbGxiYWNrIHRvIHJlZ2lzdGVyIGEgbG9nIHNpbmsgd2l0aCB0aGUgTG9nTWFuYWdlciAqL1xuICByZWdpc3RlckxvZ1Npbms6IChzaW5rOiB7IHdyaXRlKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpOiB2b2lkOyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+OyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IH0pID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB0byB3aXJlIFNTRSBicm9hZGNhc3RzIGFmdGVyIHdlYiBzZXJ2ZXIgc3RhcnRzICovXG4gIHdpcmVTU0VCcm9hZGNhc3RzOiAod2ViUmVzdWx0OiB7IGxvZ0Jyb2FkY2FzdD86IChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkOyBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQgfSwgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaykgPT4gdm9pZDtcbiAgLyoqIENvbnNvbGUgcG9ydCBvdmVycmlkZSBmcm9tIGNvbmZpZyBmaWxlLiBGYWxscyBiYWNrIHRvIGVudiB2YXIgaWYgbm90IHByb3ZpZGVkLiAqL1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlUmVzdWx0IHtcbiAgcm9sZTogJ2xlYWRlcicgfCAnZm9sbG93ZXInO1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIC8qKiBQb3J0IHRoZSBjb25zb2xlIGlzIHJ1bm5pbmcgb24gKGxlYWRlciBvbmx5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogQ2xlYW51cCBmdW5jdGlvbiB0byBjYWxsIG9uIHNodXRkb3duICovXG4gIGNsZWFudXA6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIGEgcnVubmluZyBsZWdhY3kgKHByZS1hdXRoZW50aWNhdGlvbikgRG9sbGhvdXNlTUNQIGNvbnNvbGUgYW5kXG4gKiBsb2cgYSBXQVJOLWxldmVsIG1lc3NhZ2UgaWYgb25lIGlzIGZvdW5kICgjMTc5NCkuXG4gKlxuICogRXh0cmFjdGVkIGZyb20gYHN0YXJ0VW5pZmllZENvbnNvbGVgIHNvIHRoZSB3aXJpbmcgY2FuIGJlIGludGVncmF0aW9uLVxuICogdGVzdGVkIGluIGlzb2xhdGlvbiB3aXRob3V0IHNwaW5uaW5nIHVwIGEgZnVsbCB3ZWIgc2VydmVyIGFuZCBsZWFkZXJcbiAqIGVsZWN0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gaXMgZmlyZS1hbmQtZm9yZ2V0OiBkZXRlY3Rpb24gZmFpbHVyZXNcbiAqIGFyZSBsb2dnZWQgYXQgREVCVUcgYW5kIG5ldmVyIHByb3BhZ2F0ZSwgYmVjYXVzZSBhIGZhaWx1cmUgaGVyZSBtdXN0XG4gKiBub3QgYmxvY2sgbGVhZGVyIGVsZWN0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRQb3J0IC0gVGhlIHBvcnQgdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZSBpbnRlbmRzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICBiaW5kIHRvLiBVc2VkIGluIHRoZSB3YXJuaW5nIG1lc3NhZ2UgdG8gaGVscCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgIHVzZXIgdGVsbCB0aGUgdHdvIGNvbnNvbGVzIGFwYXJ0LlxuICogQHBhcmFtIGRldGVjdCAgICAgIC0gT3B0aW9uYWwgaW5qZWN0aW9uIHBvaW50IGZvciB0aGUgZGV0ZWN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gYGRldGVjdExlZ2FjeUxlYWRlcmAuIFRlc3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICBwYXNzIGEgc3R1Yi5cbiAqIEBwYXJhbSBsb2cgICAgICAgICAtIE9wdGlvbmFsIGluamVjdGlvbiBwb2ludCBmb3IgdGhlIGxvZ2dlci4gRGVmYXVsdHNcbiAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtb2R1bGUgbG9nZ2VyLiBUZXN0cyBwYXNzIGEgc3B5LlxuICogQHJldHVybnMgVGhlIGxlZ2FjeSBsZWFkZXIgaW5mbyBmcm9tIGBkZXRlY3QoKWAsIG9yIG51bGwgaWYgZGV0ZWN0aW9uXG4gKiAgICAgICAgICB0aHJldy4gRXhwb3NlZCBzbyB0ZXN0cyBjYW4gYXNzZXJ0IHRoZSBmdWxsIHJlc3VsdCBzaGFwZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhcm5JZkxlZ2FjeUNvbnNvbGVQcmVzZW50KFxuICBjdXJyZW50UG9ydDogbnVtYmVyLFxuICBkZXRlY3Q6IHR5cGVvZiBkZXRlY3RMZWdhY3lMZWFkZXIgPSBkZXRlY3RMZWdhY3lMZWFkZXIsXG4gIGxvZzogdHlwZW9mIGxvZ2dlciA9IGxvZ2dlcixcbik6IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBkZXRlY3RMZWdhY3lMZWFkZXI+PiB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZWdhY3kgPSBhd2FpdCBkZXRlY3QoKTtcbiAgICBpZiAobGVnYWN5LmxlZ2FjeVJ1bm5pbmcpIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgW1VuaWZpZWRDb25zb2xlXSBMZWdhY3kgKHByZS1hdXRoZW50aWNhdGlvbikgRG9sbGhvdXNlTUNQIGNvbnNvbGUgZGV0ZWN0ZWQgYCArXG4gICAgICAgIGAocGlkPSR7bGVnYWN5LnBpZH0sIHBvcnQ9JHtsZWdhY3kucG9ydH0pLiBCb3RoIGNvbnNvbGVzIHdpbGwgcnVuIGAgK1xuICAgICAgICBgaW5kZXBlbmRlbnRseSBvbiBkaWZmZXJlbnQgcG9ydHMgd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgcG9zdHVyZS4gYCArXG4gICAgICAgIGBUaGUgYXV0aGVudGljYXRlZCBjb25zb2xlICh0aGlzIHByb2Nlc3MpIHVzZXMgcG9ydCAke2N1cnJlbnRQb3J0fTsgYCArXG4gICAgICAgIGB0aGUgbGVnYWN5IGNvbnNvbGUgdXNlcyBwb3J0ICR7bGVnYWN5LnBvcnQgPz8gTEVHQUNZX0NPTlNPTEVfRkFMTEJBQ0tfUE9SVH0uIGAgK1xuICAgICAgICBgRm9yIGNvbnNpc3RlbnQgc2VjdXJpdHksIHVwZGF0ZSB0aGUgbGVnYWN5IGluc3RhbGxhdGlvbiB0byBhIGAgK1xuICAgICAgICBgdmVyc2lvbiB3aXRoIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBsZWdhY3k7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEJlc3QtZWZmb3J0IOKAlCBuZXZlciBibG9jayBlbGVjdGlvbiBvbiBhIGRldGVjdGlvbiBmYWlsdXJlXG4gICAgbG9nLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIExlZ2FjeSBsZWFkZXIgZGV0ZWN0aW9uIGZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNlc3Npb25BcGlSZWNvcmQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcGlkOiBudW1iZXI7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgbGFzdEhlYXJ0YmVhdD86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBpc0xlYWRlcj86IGJvb2xlYW47XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHNlcnZlclZlcnNpb24/OiBzdHJpbmc7XG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydExlYWRlckRpc2NvdmVyeSB7XG4gIGxlYWRlckluZm86IENvbnNvbGVMZWFkZXJJbmZvIHwgbnVsbDtcbiAgb3duZXJQaWQ6IG51bWJlciB8IG51bGw7XG4gIHNvdXJjZTogJ2FwaScgfCAnbG9jaycgfCAnc3ludGhldGljJyB8ICdub25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kRmFpbHVyZVJlY292ZXJ5UmVzdWx0IGV4dGVuZHMgUG9ydExlYWRlckRpc2NvdmVyeSB7XG4gIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBib29sZWFuO1xuICBsb2NrQ2xlYW51cFBlcmZvcm1lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgc2hvdWxkRXZpY3Q6IGJvb2xlYW47XG4gIG93bmVyUGlkOiBudW1iZXIgfCBudWxsO1xuICBwcmVmZXJlbmNlOiBMZWFkZXJQcmVmZXJlbmNlRGVjaXNpb24gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgRm9yY2VUYWtlb3ZlckF0dGVtcHRSZXN1bHQge1xuICB3ZWJSZXN1bHQ6IFdlYlNlcnZlclJlc3VsdDtcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICBmYWxsYmFjazogUG9ydExlYWRlckRpc2NvdmVyeTtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb247XG4gIGZvcmNlZEtpbGw6IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbDtcbiAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIHJlYm91bmRMb2NrQ2xhaW1lZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5UmVzb2x1dGlvbiB7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgZGlzY292ZXJ5OiBQb3J0TGVhZGVyRGlzY292ZXJ5IHwgbnVsbDtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24gfCBudWxsO1xuICBmb3JjZWRDbGFpbTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5RGVwZW5kZW5jaWVzIHtcbiAgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbD86IHR5cGVvZiBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGU7XG4gIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsPzogdHlwZW9mIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQ7XG4gIGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbD86IHR5cGVvZiBmb3JjZUNsYWltTGVhZGVyc2hpcDtcbiAgZGVsZXRlTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgZGVsZXRlTGVhZGVyTG9jaztcbn1cblxuaW50ZXJmYWNlIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGZldGNoSW1wbD86IHR5cGVvZiBmZXRjaDtcbiAgZmluZFBpZE9uUG9ydEltcGw/OiB0eXBlb2YgZmluZFBpZE9uUG9ydDtcbiAgcmVhZExlYWRlckxvY2tJbXBsPzogdHlwZW9mIHJlYWRMZWFkZXJMb2NrO1xufVxuXG5mdW5jdGlvbiBidWlsZERpc2NvdmVyeUhlYWRlcnMoYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBhdXRoVG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthdXRoVG9rZW59YCB9IDoge307XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGVhZGVySW5mb0Zyb21TZXNzaW9uKHBvcnQ6IG51bWJlciwgb3duZXJQaWQ6IG51bWJlciwgbGVhZGVyU2Vzc2lvbjogU2Vzc2lvbkFwaVJlY29yZCk6IENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobGVhZGVyU2Vzc2lvbi5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIHN0YXJ0ZWRBdDogbGVhZGVyU2Vzc2lvbi5zdGFydGVkQXQgPz8gY3VycmVudFRpbWVzdGFtcCgpLFxuICAgIGhlYXJ0YmVhdDogbGVhZGVyU2Vzc2lvbi5sYXN0SGVhcnRiZWF0ID8/IGN1cnJlbnRUaW1lc3RhbXAoKSxcbiAgICBzZXJ2ZXJWZXJzaW9uOiBsZWFkZXJTZXNzaW9uLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IGxlYWRlclNlc3Npb24uY29uc29sZVByb3RvY29sVmVyc2lvbiA/PyBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0OiBudW1iZXIsIG93bmVyUGlkOiBudW1iZXIpOiBDb25zb2xlTGVhZGVySW5mbyB7XG4gIGNvbnN0IG5vdyA9IGN1cnJlbnRUaW1lc3RhbXAoKTtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogYCR7U1lOVEhFVElDX1BPUlRfT1dORVJfU0VTU0lPTl9QUkVGSVh9JHtvd25lclBpZH1gLFxuICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgIGhlYXJ0YmVhdDogbm93LFxuICAgIHNlcnZlclZlcnNpb246IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyTGVhZGVyVmlhU2Vzc2lvbnNBcGkoXG4gIHBvcnQ6IG51bWJlcixcbiAgb3duZXJQaWQ6IG51bWJlcixcbiAgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsLFxuICBmZXRjaEltcGw6IHR5cGVvZiBmZXRjaCxcbik6IFByb21pc2U8Q29uc29sZUxlYWRlckluZm8gfCBudWxsPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hJbXBsKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vYXBpL3Nlc3Npb25zYCwge1xuICAgICAgaGVhZGVyczogYnVpbGREaXNjb3ZlcnlIZWFkZXJzKGF1dGhUb2tlbiksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyBzZXNzaW9ucz86IFNlc3Npb25BcGlSZWNvcmRbXSB9O1xuICAgIGNvbnN0IHNlc3Npb25zID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLnNlc3Npb25zKSA/IHBheWxvYWQuc2Vzc2lvbnMgOiBbXTtcbiAgICBjb25zdCBsZWFkZXJTZXNzaW9uID0gc2Vzc2lvbnMuZmluZCgoc2Vzc2lvbikgPT5cbiAgICAgIHNlc3Npb24ucGlkID09PSBvd25lclBpZCAmJlxuICAgICAgc2Vzc2lvbi5pc0xlYWRlciA9PT0gdHJ1ZSAmJlxuICAgICAgc2Vzc2lvbi5raW5kID09PSAnbWNwJyAmJlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgIT09ICdzdG9wcGVkJ1xuICAgICk7XG4gICAgcmV0dXJuIGxlYWRlclNlc3Npb24gPyBidWlsZExlYWRlckluZm9Gcm9tU2Vzc2lvbihwb3J0LCBvd25lclBpZCwgbGVhZGVyU2Vzc2lvbikgOiBudWxsO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IERpc2NvdmVyeURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxQb3J0TGVhZGVyRGlzY292ZXJ5PiB7XG4gIGNvbnN0IGZldGNoSW1wbCA9IGRlcHMuZmV0Y2hJbXBsID8/IGZldGNoO1xuICBjb25zdCBmaW5kUGlkT25Qb3J0SW1wbCA9IGRlcHMuZmluZFBpZE9uUG9ydEltcGwgPz8gZmluZFBpZE9uUG9ydDtcbiAgY29uc3QgcmVhZExlYWRlckxvY2tJbXBsID0gZGVwcy5yZWFkTGVhZGVyTG9ja0ltcGwgPz8gcmVhZExlYWRlckxvY2s7XG4gIGNvbnN0IG93bmVyUGlkID0gYXdhaXQgZmluZFBpZE9uUG9ydEltcGwocG9ydCk7XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxlYWRlckluZm8gPSBhd2FpdCBkaXNjb3ZlckxlYWRlclZpYVNlc3Npb25zQXBpKHBvcnQsIG93bmVyUGlkLCBhdXRoVG9rZW4sIGZldGNoSW1wbCk7XG4gICAgICBpZiAobGVhZGVySW5mbykge1xuICAgICAgICByZXR1cm4geyBvd25lclBpZCwgc291cmNlOiAnYXBpJywgbGVhZGVySW5mbyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZhaWxlZCB0byBxdWVyeSBhY3RpdmUgbGVhZGVyIHNlc3Npb25zJywge1xuICAgICAgICBwb3J0LFxuICAgICAgICBvd25lclBpZCxcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgaWYgKGxvY2s/LnBvcnQgPT09IHBvcnQgJiYgKG93bmVyUGlkID09PSBudWxsIHx8IGxvY2sucGlkID09PSBvd25lclBpZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duZXJQaWQ6IG93bmVyUGlkID8/IGxvY2sucGlkLFxuICAgICAgc291cmNlOiAnbG9jaycsXG4gICAgICBsZWFkZXJJbmZvOiB7XG4gICAgICAgIC4uLmxvY2ssXG4gICAgICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobG9jay5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bmVyUGlkLFxuICAgICAgc291cmNlOiAnc3ludGhldGljJyxcbiAgICAgIGxlYWRlckluZm86IGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0LCBvd25lclBpZCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGxlYWRlckluZm86IG51bGwsIG93bmVyUGlkOiBudWxsLCBzb3VyY2U6ICdub25lJyB9O1xufVxuXG5pbnRlcmZhY2UgQmluZEZhaWx1cmVSZWNvdmVyeURlcGVuZGVuY2llcyBleHRlbmRzIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGRlbGV0ZUxlYWRlckxvY2tJbXBsPzogdHlwZW9mIGRlbGV0ZUxlYWRlckxvY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyTGVhZGVyQmluZEZhaWx1cmUoXG4gIHByb3Zpc2lvbmFsTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IEJpbmRGYWlsdXJlUmVjb3ZlcnlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8QmluZEZhaWx1cmVSZWNvdmVyeVJlc3VsdD4ge1xuICBjb25zdCByZWFkTGVhZGVyTG9ja0ltcGwgPSBkZXBzLnJlYWRMZWFkZXJMb2NrSW1wbCA/PyByZWFkTGVhZGVyTG9jaztcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBiaW5kIHJlY292ZXJ5IGluaXRpYXRlZCcsIHtcbiAgICBwcm92aXNpb25hbFNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcG9ydCxcbiAgfSk7XG5cbiAgbGV0IGZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChwb3J0LCBhdXRoVG9rZW4sIGRlcHMpO1xuICBsZXQgbG9ja0NsZWFudXBBdHRlbXB0ZWQgPSBmYWxzZTtcbiAgbGV0IGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gZmFsc2U7XG4gIGNvbnN0IGN1cnJlbnRMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGNvbnN0IHByb3Zpc2lvbmFsTG9ja01hdGNoZXMgPSAoXG4gICAgY3VycmVudExvY2s/LnBpZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucGlkICYmXG4gICAgY3VycmVudExvY2sucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGN1cnJlbnRMb2NrLnNlc3Npb25JZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkXG4gICk7XG4gIGNvbnN0IGZhbGxiYWNrUG9pbnRzVG9Qcm92aXNpb25hbExlYWRlciA9IChcbiAgICBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQgPT09IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8ucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8uc2Vzc2lvbklkID09PSBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWRcbiAgKTtcblxuICBpZiAocHJvdmlzaW9uYWxMb2NrTWF0Y2hlcykge1xuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gdHJ1ZTtcbiAgICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBSZW1vdmVkIHByb3Zpc2lvbmFsIGxlYWRlciBsb2NrIGFmdGVyIGJpbmQgZmFpbHVyZScsIHtcbiAgICAgIHByb3Zpc2lvbmFsU2Vzc2lvbklkOiBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWQsXG4gICAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgICAgcG9ydCxcbiAgICB9KTtcbiAgICBpZiAoZmFsbGJhY2tQb2ludHNUb1Byb3Zpc2lvbmFsTGVhZGVyKSB7XG4gICAgICBmYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQocG9ydCwgYXV0aFRva2VuLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgYmluZCByZWNvdmVyeSBjb21wbGV0ZWQnLCB7XG4gICAgcHJvdmlzaW9uYWxTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgIHBvcnQsXG4gICAgZGlzY292ZXJ5U291cmNlOiBmYWxsYmFjay5zb3VyY2UsXG4gICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmZhbGxiYWNrLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChcbiAgY2FuZGlkYXRlTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4pOiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgaWYgKCFmYWxsYmFjay5sZWFkZXJJbmZvIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBudWxsIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBjYW5kaWRhdGVMZWFkZXIucGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZEV2aWN0OiBmYWxzZSxcbiAgICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICAgIHByZWZlcmVuY2U6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZlcmVuY2UgPSBldmFsdWF0ZUxlYWRlclByZWZlcmVuY2UoY2FuZGlkYXRlTGVhZGVyLCBmYWxsYmFjay5sZWFkZXJJbmZvKTtcbiAgcmV0dXJuIHtcbiAgICBzaG91bGRFdmljdDogcHJlZmVyZW5jZS5zaG91bGRSZXBsYWNlLFxuICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBwcmVmZXJlbmNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJvdmlzaW9uYWxMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBiaW5kUmVzdWx0OiBXZWJTZXJ2ZXJSZXN1bHRbJ2JpbmRSZXN1bHQnXSxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4gIHJlcGxhY2VtZW50PzogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbixcbiAgZm9yY2VkS2lsbD86IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbCxcbikge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGJpbmRFcnJvcjogYmluZFJlc3VsdD8uZXJyb3IsXG4gICAgYmluZERldGFpbDogYmluZFJlc3VsdD8uZGV0YWlsLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbExlYWRlclZlcnNpb246IHByb3Zpc2lvbmFsTGVhZGVyLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBwcm92aXNpb25hbExlYWRlci5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBmYWxsYmFja093bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBmYWxsYmFja1NvdXJjZTogZmFsbGJhY2suc291cmNlLFxuICAgIGZhbGxiYWNrTGVhZGVyUGlkOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQsXG4gICAgZmFsbGJhY2tMZWFkZXJTZXNzaW9uSWQ6IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlc3Npb25JZCxcbiAgICBmYWxsYmFja0xlYWRlclZlcnNpb246IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGZhbGxiYWNrTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24sXG4gICAgZm9yY2VkS2lsbFJlYXNvbjogZm9yY2VkS2lsbD8ucmVhc29uLFxuICAgIGZvcmNlZEtpbGxQaWQ6IGZvcmNlZEtpbGw/LnBpZCxcbiAgICBmb3JjZWRLaWxsRGV0YWlsOiBmb3JjZWRLaWxsPy5kZXRhaWwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXV0aG9yaXR5UmVzb2x1dGlvbkxvZ0NvbnRleHQoXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0ZWRMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsLFxuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGwsXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGVkTGVhZGVyLnBpZCxcbiAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGVkTGVhZGVyLnNlc3Npb25JZCxcbiAgICBlbGVjdGVkTGVhZGVyVmVyc2lvbjogZWxlY3RlZExlYWRlci5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBlbGVjdGVkTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBlbGVjdGVkTGVhZGVyLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHNlcnZpbmdPd25lclBpZDogZGlzY292ZXJ5Py5vd25lclBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdTb3VyY2U6IGRpc2NvdmVyeT8uc291cmNlID8/ICdub25lJyxcbiAgICBzZXJ2aW5nTGVhZGVyUGlkOiBkaXNjb3Zlcnk/LmxlYWRlckluZm8/LnBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdMZWFkZXJTZXNzaW9uSWQ6IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2Vzc2lvbklkID8/IG51bGwsXG4gICAgc2VydmluZ0xlYWRlclZlcnNpb246IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgc2VydmluZ0xlYWRlclByb3RvY29sVmVyc2lvbjogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24gPz8gbnVsbCxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8Rm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uPiB7XG4gIGNvbnN0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPSBkZXBzLmlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPz8gaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlO1xuICBjb25zdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbCA9IGRlcHMuZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwgPz8gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgY29uc3QgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsID0gZGVwcy5mb3JjZUNsYWltTGVhZGVyc2hpcEltcGwgPz8gZm9yY2VDbGFpbUxlYWRlcnNoaXA7XG4gIGNvbnN0IGRlbGV0ZUxlYWRlckxvY2tJbXBsID0gZGVwcy5kZWxldGVMZWFkZXJMb2NrSW1wbCA/PyBkZWxldGVMZWFkZXJMb2NrO1xuXG4gIGNvbnN0IHJlYWNoYWJsZSA9IGF3YWl0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIGlmICghcmVhY2hhYmxlKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRWxlY3RlZCBsZWFkZXIgaXMgbm90IHNlcnZpbmcgdGhlIGNvbnNvbGUgcG9ydDsgZm9yY2luZyB0YWtlb3ZlcicsIHtcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IGF3YWl0IGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbChzZXNzaW9uSWQsIGNvbnNvbGVQb3J0KSxcbiAgICAgIGRpc2NvdmVyeTogbnVsbCxcbiAgICAgIHJlcGxhY2VtZW50OiBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZUxlYWRlciA9IGNyZWF0ZUxlYWRlckluZm8oc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG4gIGNvbnN0IGRpc2NvdmVyeSA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsKGNvbnNvbGVQb3J0LCBudWxsKTtcbiAgaWYgKCFkaXNjb3ZlcnkubGVhZGVySW5mbyB8fCBkaXNjb3Zlcnkub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb24sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudDogbnVsbCxcbiAgICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KGNhbmRpZGF0ZUxlYWRlciwgZGlzY292ZXJ5KTtcbiAgaWYgKGRpc2NvdmVyeS5vd25lclBpZCAhPT0gZWxlY3Rpb24ubGVhZGVySW5mby5waWQpIHtcbiAgICBpZiAocmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QpIHtcbiAgICAgIGF3YWl0IGRlbGV0ZUxlYWRlckxvY2tJbXBsKCk7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBTcGxpdC1icmFpbiBjb25zb2xlIGF1dGhvcml0eSBkZXRlY3RlZDsgbmV3ZXIgc2Vzc2lvbiB3aWxsIHJlcGxhY2UgdGhlIGFjdHVhbCBwb3J0IG93bmVyJywgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIGRpc2NvdmVyeSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICApKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiBjYW5kaWRhdGVMZWFkZXIgfSxcbiAgICAgICAgZGlzY292ZXJ5LFxuICAgICAgICByZXBsYWNlbWVudCxcbiAgICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBTcGxpdC1icmFpbiBjb25zb2xlIGF1dGhvcml0eSBkZXRlY3RlZDsgZm9sbG93aW5nIHRoZSBhY3R1YWwgcG9ydCBvd25lcicsIGJ1aWxkQXV0aG9yaXR5UmVzb2x1dGlvbkxvZ0NvbnRleHQoXG4gICAgICBjb25zb2xlUG9ydCxcbiAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudCxcbiAgICApKTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZGlzY292ZXJ5LmxlYWRlckluZm8gfSxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVsZWN0aW9uLFxuICAgIGRpc2NvdmVyeSxcbiAgICByZXBsYWNlbWVudCxcbiAgICBmb3JjZWRDbGFpbTogZmFsc2UsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGN1cnJlbnRFbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIHByaW1hcnlUb2tlbjogc3RyaW5nLFxuICBzZXJ2ZXJPcHRzOiBXZWJTZXJ2ZXJPcHRpb25zLFxuICBzdGFydFdlYlNlcnZlckltcGw6IChvcHRpb25zOiBXZWJTZXJ2ZXJPcHRpb25zKSA9PiBQcm9taXNlPFdlYlNlcnZlclJlc3VsdD4sXG4pOiBQcm9taXNlPEZvcmNlVGFrZW92ZXJBdHRlbXB0UmVzdWx0PiB7XG4gIGNvbnN0IGluaXRpYWxGYWxsYmFjayA9IGF3YWl0IHJlY292ZXJMZWFkZXJCaW5kRmFpbHVyZShjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgY29uc29sZVBvcnQsIHByaW1hcnlUb2tlbik7XG4gIGNvbnN0IGluaXRpYWxSZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sIGluaXRpYWxGYWxsYmFjayk7XG5cbiAgaWYgKCFpbml0aWFsUmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QgfHwgaW5pdGlhbFJlcGxhY2VtZW50Lm93bmVyUGlkID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlYlJlc3VsdDogeyBiaW5kUmVzdWx0OiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9IH0sXG4gICAgICBlbGVjdGlvbjogY3VycmVudEVsZWN0aW9uLFxuICAgICAgZmFsbGJhY2s6IGluaXRpYWxGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBpbml0aWFsUmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF0ZXN0RmFsbGJhY2sgPSBhd2FpdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0KGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4pO1xuICBjb25zdCBsYXRlc3RSZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sIGxhdGVzdEZhbGxiYWNrKTtcbiAgaWYgKCFsYXRlc3RSZXBsYWNlbWVudC5zaG91bGRFdmljdCB8fCBsYXRlc3RSZXBsYWNlbWVudC5vd25lclBpZCA9PT0gbnVsbCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciB0YXJnZXQgY2hhbmdlZCBiZWZvcmUgZXZpY3Rpb247IHNraXBwaW5nIGZvcmNlZCBraWxsJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSxcbiAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgKSxcbiAgICAgIHByZXZpb3VzT3duZXJQaWQ6IGluaXRpYWxSZXBsYWNlbWVudC5vd25lclBpZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gQXR0ZW1wdGluZyBmb3JjZWQgdGFrZW92ZXIgZnJvbSBvbGRlciBvciBpbmNvbXBhdGlibGUgYWN0aXZlIGxlYWRlcicsIHtcbiAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICApLFxuICB9KTtcblxuICBjb25zdCBmb3JjZWRLaWxsID0gYXdhaXQga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkKGxhdGVzdFJlcGxhY2VtZW50Lm93bmVyUGlkLCBjb25zb2xlUG9ydCwge1xuICAgIGFsbG93QWN0aXZlSG9zdFBhcmVudDogdHJ1ZSxcbiAgfSk7XG4gIGlmICghZm9yY2VkS2lsbC5raWxsZWQpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIgc2tpcHBlZCBvciBmYWlsZWQgYWZ0ZXIgaWRlbnRpZnlpbmcgcmVwbGFjZWFibGUgbGVhZGVyJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSxcbiAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgICBmb3JjZWRLaWxsLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRLaWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IHRydWUsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZWJvdW5kV2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXJJbXBsKHNlcnZlck9wdHMpO1xuICBsZXQgcmVib3VuZEVsZWN0aW9uID0gY3VycmVudEVsZWN0aW9uO1xuICBsZXQgcmVib3VuZExvY2tDbGFpbWVkID0gZmFsc2U7XG5cbiAgaWYgKCFyZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQgfHwgcmVib3VuZFdlYlJlc3VsdC5iaW5kUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByZWJvdW5kTGVhZGVySW5mbyA9IGNyZWF0ZUxlYWRlckluZm8ob3B0aW9ucy5zZXNzaW9uSWQsIGNvbnNvbGVQb3J0KTtcbiAgICByZWJvdW5kTG9ja0NsYWltZWQgPSBhd2FpdCBjbGFpbUxlYWRlcnNoaXAocmVib3VuZExlYWRlckluZm8pO1xuICAgIGlmICghcmVib3VuZExvY2tDbGFpbWVkKSB7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBSZWJvdW5kIGxlYWRlciBib3VuZCBwb3J0IGJ1dCBjb3VsZCBub3QgaW1tZWRpYXRlbHkgcmUtY2xhaW0gbG9jaycsIHtcbiAgICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgICAgcmVib3VuZExlYWRlckluZm8sXG4gICAgICAgICAgcmVib3VuZFdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlZEtpbGwsXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVib3VuZEVsZWN0aW9uID0geyByb2xlOiAnbGVhZGVyJywgbGVhZGVySW5mbzogcmVib3VuZExlYWRlckluZm8gfTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIga2lsbGVkIG9sZCBsZWFkZXIgYnV0IGJpbmQgcmV0cnkgc3RpbGwgZmFpbGVkJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgcmVib3VuZFdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgIGZvcmNlZEtpbGwsXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3ZWJSZXN1bHQ6IHJlYm91bmRXZWJSZXN1bHQsXG4gICAgZWxlY3Rpb246IHJlYm91bmRFbGVjdGlvbixcbiAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgcmVwbGFjZW1lbnQ6IGxhdGVzdFJlcGxhY2VtZW50LFxuICAgIGZvcmNlZEtpbGwsXG4gICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IHRydWUsXG4gICAgcmVib3VuZExvY2tDbGFpbWVkLFxuICB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlLlxuICpcbiAqIFJ1bnMgbGVhZGVyIGVsZWN0aW9uLCB0aGVuIGVpdGhlciBzdGFydHMgdGhlIGZ1bGwgY29uc29sZSAobGVhZGVyKVxuICogb3Igc2V0cyB1cCBldmVudCBmb3J3YXJkaW5nIChmb2xsb3dlcikuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFVuaWZpZWRDb25zb2xlKG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyk6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQ+IHtcbiAgLy8gUmVzb2x2ZSBwb3J0OiBvcHRpb25zIChjb25maWcgZmlsZSkg4oaSIGVudiB2YXIg4oaSIGRlZmF1bHRcbiAgY29uc3QgY29uc29sZVBvcnQgPSBvcHRpb25zLnBvcnQgfHwgREVGQVVMVF9DT05TT0xFX1BPUlQ7XG4gIGxvZ2dlci5kZWJ1ZyhgW1VuaWZpZWRDb25zb2xlXSBQb3J0IHJlc29sdmVkOiAke2NvbnNvbGVQb3J0fWAgK1xuICAgIChvcHRpb25zLnBvcnQgPyAnIChmcm9tIGNvbmZpZyBmaWxlKScgOiBgIChmcm9tIGVudi9kZWZhdWx0KWApKTtcblxuICAvLyBMZWdhY3ktbGVhZGVyIGRldGVjdGlvbiAoIzE3OTQpIOKAlCB3YXJuIHRoZSB1c2VyIGlmIGEgcHJlLWF1dGhcbiAgLy8gRG9sbGhvdXNlTUNQIGNvbnNvbGUgaXMgcnVubmluZyBhbG9uZ3NpZGUgdGhpcyBhdXRoZW50aWNhdGVkIG9uZS5cbiAgLy8gVGhleSB3aWxsIGNvZXhpc3QgZmluZSBiZWNhdXNlIG9mIHBvcnQgKyBsb2NrICsgdG9rZW4gZmlsZSBpc29sYXRpb24sXG4gIC8vIGJ1dCB0aGUgdXNlciBzaG91bGQga25vdyBib3RoIGV4aXN0IHNvIHRoZSBkaWZmZXJpbmcgc2VjdXJpdHkgcG9zdHVyZVxuICAvLyBiZXR3ZWVuIHRoZW0gZG9lc24ndCBsb29rIGxpa2UgYSBidWcuXG4gIGF3YWl0IHdhcm5JZkxlZ2FjeUNvbnNvbGVQcmVzZW50KGNvbnNvbGVQb3J0KTtcblxuICBsZXQgZWxlY3Rpb24gPSBhd2FpdCBlbGVjdExlYWRlcihvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuXG4gIGlmIChlbGVjdGlvbi5yb2xlID09PSAnZm9sbG93ZXInKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHkob3B0aW9ucy5zZXNzaW9uSWQsIGNvbnNvbGVQb3J0LCBlbGVjdGlvbik7XG4gICAgZWxlY3Rpb24gPSByZXNvbHZlZC5lbGVjdGlvbjtcbiAgfVxuXG4gIGlmIChlbGVjdGlvbi5yb2xlID09PSAnbGVhZGVyJykge1xuICAgIHJldHVybiBzdGFydEFzTGVhZGVyKG9wdGlvbnMsIGVsZWN0aW9uLCBjb25zb2xlUG9ydCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNGb2xsb3dlcihvcHRpb25zLCBlbGVjdGlvbiwgY29uc29sZVBvcnQpO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnQgYXMgdGhlIGNvbnNvbGUgbGVhZGVyLlxuICogQmluZHMgdGhlIHJlc29sdmVkIGNvbnNvbGUgcG9ydCAoY29uZmlnIGZpbGUg4oaSIGVudiB2YXIg4oaSIGRlZmF1bHQpLFxuICogbW91bnRzIGFsbCByb3V0ZXMgaW5jbHVkaW5nIGluZ2VzdGlvbiwgc3RhcnRzIGhlYXJ0YmVhdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnRBc0xlYWRlcihcbiAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIgPSBERUZBVUxUX0NPTlNPTEVfUE9SVCxcbik6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQ+IHtcbiAgY29uc3QgeyBzdGFydFdlYlNlcnZlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2ZXIuanMnKTtcbiAgY29uc3QgeyBwaWNrUmFuZG9tVG9rZW5OYW1lIH0gPSBhd2FpdCBpbXBvcnQoJy4vU2Vzc2lvbk5hbWVzLmpzJyk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgY29uc29sZSB0b2tlbiBzdG9yZSAoIzE3ODApLiBDcmVhdGVzIHRoZSB0b2tlbiBmaWxlIG9uXG4gIC8vIGZpcnN0IHJ1biwgcmVhZHMgdGhlIGV4aXN0aW5nIHRva2VucyBvbiBzdWJzZXF1ZW50IHJ1bnMuIFRoZSB0b2tlbiBpc1xuICAvLyBwZXJzaXN0ZW50IGFjcm9zcyByZXN0YXJ0cyDigJQgb25seSByb3RhdGVkIG9uIGV4cGxpY2l0IHJlcXVlc3QgKFBoYXNlIDIpLlxuICAvLyBGZWF0dXJlIGZsYWcgRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQgY29udHJvbHMgZW5mb3JjZW1lbnQ7IHRoZSBmaWxlXG4gIC8vIGlzIGdlbmVyYXRlZCByZWdhcmRsZXNzIHNvIGNvbnN1bWVycyBjYW4gYXR0YWNoIHRva2VucyBwcmVlbXB0aXZlbHkuXG4gIGNvbnN0IHRva2VuU3RvcmUgPSBuZXcgQ29uc29sZVRva2VuU3RvcmUoZW52LkRPTExIT1VTRV9DT05TT0xFX1RPS0VOX0ZJTEUpO1xuICBjb25zdCBwcmltYXJ5VG9rZW4gPSBhd2FpdCB0b2tlblN0b3JlLmVuc3VyZUluaXRpYWxpemVkKHBpY2tSYW5kb21Ub2tlbk5hbWUoKSk7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIENvbnNvbGUgdG9rZW4gc3RvcmUgaW5pdGlhbGl6ZWQnLCB7XG4gICAgdG9rZW5JZDogcHJpbWFyeVRva2VuLmlkLFxuICAgIHRva2VuTmFtZTogcHJpbWFyeVRva2VuLm5hbWUsXG4gICAgZmlsZTogdG9rZW5TdG9yZS5nZXRGaWxlUGF0aCgpLFxuICAgIGF1dGhFbmZvcmNlZDogZW52LkRPTExIT1VTRV9XRUJfQVVUSF9FTkFCTEVELFxuICB9KTtcblxuICAvLyBQcmUtY3JlYXRlIGEgcGxhY2Vob2xkZXIgYnJvYWRjYXN0IHRoYXQgd2UnbGwgd2lyZSB1cCBhZnRlciB0aGUgc2VydmVyIHN0YXJ0c1xuICBsZXQgbGl2ZUJyb2FkY2FzdDogKChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGxpdmVNZXRyaWNzT25TbmFwc2hvdDogKChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIC8vIENyZWF0ZSBpbmdlc3Rpb24gcm91dGVzIHdpdGggYSBkZWZlcnJlZCBicm9hZGNhc3QgKHdpcmVkIGFmdGVyIHNlcnZlciBzdGFydHMpXG4gIGNvbnN0IGluZ2VzdFJlc3VsdCA9IGNyZWF0ZUluZ2VzdFJvdXRlcyh7XG4gICAgbG9nQnJvYWRjYXN0OiAoZW50cnkpID0+IGxpdmVCcm9hZGNhc3Q/LihlbnRyeSksXG4gICAgbWV0cmljc09uU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gbGl2ZU1ldHJpY3NPblNuYXBzaG90Py4oc25hcHNob3QpLFxuICAgIHN0b3JlTWV0cmljc1NuYXBzaG90OiAoc25hcHNob3QpID0+IG9wdGlvbnMubWV0cmljc1Npbms/Lm9uU25hcHNob3Qoc25hcHNob3QpLFxuICB9KTtcblxuICAvLyBTdGFydCB0aGUgd2ViIHNlcnZlciB3aXRoIGluZ2VzdCByb3V0ZXMgbW91bnRlZCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFjay5cbiAgLy8gSWYgdGhlIHBvcnQgaXMgb2NjdXBpZWQgYnkgYSBzdGFsZSBwcm9jZXNzLCByZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcG9ydGZvbGlvRGlyOiBvcHRpb25zLnBvcnRmb2xpb0RpcixcbiAgICBtZW1vcnlTaW5rOiBvcHRpb25zLm1lbW9yeVNpbmssXG4gICAgbWV0cmljc1Npbms6IG9wdGlvbnMubWV0cmljc1NpbmssXG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgc2Vzc2lvbklkOiBvcHRpb25zLnN0YWJsZVNlc3Npb25JZCxcbiAgICBydW50aW1lU2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICBhZGRpdGlvbmFsUm91dGVyczogW2luZ2VzdFJlc3VsdC5yb3V0ZXJdLFxuICAgIHRva2VuU3RvcmUsXG4gICAgLi4uKG9wdGlvbnMubWNwQXFsSGFuZGxlciA/IHsgbWNwQXFsSGFuZGxlcjogb3B0aW9ucy5tY3BBcWxIYW5kbGVyIH0gOiB7fSksXG4gIH07XG4gIC8vIGJpbmRBbmRMaXN0ZW4gbm93IGhhbmRsZXMgRUFERFJJTlVTRSBieSBmaW5kaW5nIGFuZCBraWxsaW5nIHRoZSBzdGFsZVxuICAvLyBwcm9jZXNzIG9uIHRoZSBwb3J0LCB0aGVuIHJldHJ5aW5nLiBObyBleHRlcm5hbCByZXRyeSBsb29wIG5lZWRlZC5cbiAgbGV0IHdlYlJlc3VsdCA9IGF3YWl0IHN0YXJ0V2ViU2VydmVyKHNlcnZlck9wdHMpO1xuXG4gIGlmICh3ZWJSZXN1bHQuYmluZFJlc3VsdCAmJiAhd2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcmNlVGFrZW92ZXIgPSBhd2FpdCBhdHRlbXB0Rm9yY2VUYWtlb3ZlcihcbiAgICAgIG9wdGlvbnMsXG4gICAgICBlbGVjdGlvbixcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgcHJpbWFyeVRva2VuLnRva2VuLFxuICAgICAgc2VydmVyT3B0cyxcbiAgICAgIHN0YXJ0V2ViU2VydmVyLFxuICAgICk7XG4gICAgd2ViUmVzdWx0ID0gZm9yY2VUYWtlb3Zlci53ZWJSZXN1bHQ7XG4gICAgZWxlY3Rpb24gPSBmb3JjZVRha2VvdmVyLmVsZWN0aW9uO1xuXG4gICAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBpZiAoZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5sZWFkZXJJbmZvKSB7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgcm9sZSBhYm9ydGVkOiBiaW5kIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGZvbGxvd2VyJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICBlbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICAgIHdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZmFsbGJhY2ssXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5yZXBsYWNlbWVudCxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLmZvcmNlZEtpbGwsXG4gICAgICAgICksXG4gICAgICAgIHRha2VvdmVyQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLnRha2VvdmVyQXR0ZW1wdGVkLFxuICAgICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZvcmNlVGFrZW92ZXIucmVib3VuZExvY2tDbGFpbWVkLFxuICAgICAgICBsb2NrQ2xlYW51cEF0dGVtcHRlZDogZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5zb3VyY2UgIT09ICdub25lJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZm9sbG93ZXJFbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQgPSB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IGZvcmNlVGFrZW92ZXIuZmFsbGJhY2subGVhZGVySW5mbyB9O1xuICAgICAgcmV0dXJuIHN0YXJ0QXNGb2xsb3dlcihvcHRpb25zLCBmb2xsb3dlckVsZWN0aW9uLCBjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuLnRva2VuKTtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmVycm9yKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBmYWlsZWQgdG8gYmluZCBhbmQgbm8gYWN0aXZlIGxlYWRlciBjb3VsZCBiZSBpZGVudGlmaWVkJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICBlbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICAgIHdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZmFsbGJhY2ssXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5yZXBsYWNlbWVudCxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLmZvcmNlZEtpbGwsXG4gICAgICAgICksXG4gICAgICAgIHRha2VvdmVyQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLnRha2VvdmVyQXR0ZW1wdGVkLFxuICAgICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZvcmNlVGFrZW92ZXIucmVib3VuZExvY2tDbGFpbWVkLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExlYWRlciBmYWlsZWQgdG8gYmluZCBwb3J0ICR7Y29uc29sZVBvcnR9IGFuZCBubyBhY3RpdmUgbGVhZGVyIHdhcyBkaXNjb3ZlcmFibGVgKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWdpc3RlciB0aGUgbGVhZGVyIG9ubHkgYWZ0ZXIgdGhlIEhUVFAgbGlzdGVuZXIgaXMgYWN0dWFsbHkgc2VydmluZyB0aGUgcG9ydC5cbiAgaW5nZXN0UmVzdWx0LnJlZ2lzdGVyTGVhZGVyU2Vzc2lvbihvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQpO1xuXG4gIC8vIFJlZ2lzdGVyIHRoZSB3ZWIgY29uc29sZSBpdHNlbGYgc28gdGhlIHNlc3Npb24gaW5kaWNhdG9yIGlzIG5ldmVyIGVtcHR5ICgjMTgwNSlcbiAgaW5nZXN0UmVzdWx0LnJlZ2lzdGVyQ29uc29sZVNlc3Npb24oKTtcblxuICAvLyBXaXJlIFNTRSBicm9hZGNhc3RzIGZvciB0aGlzIGxlYWRlcidzIG93biBldmVudHNcbiAgb3B0aW9ucy53aXJlU1NFQnJvYWRjYXN0cyh3ZWJSZXN1bHQsIG9wdGlvbnMubWV0cmljc1NpbmspO1xuXG4gIC8vIE5vdyB3aXJlIHRoZSBsaXZlIGJyb2FkY2FzdCBmdW5jdGlvbnMgaW50byB0aGUgaW5nZXN0IHJvdXRlc1xuICBpZiAod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQnJvYWRjYXN0ID0gd2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdDtcbiAgICAvLyBTdGFtcCBsZWFkZXIncyBvd24gZW50cmllcyB3aXRoIHNlc3Npb24gSURcbiAgICBsaXZlQnJvYWRjYXN0ID0gKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHN0YW1wZWQ6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnksXG4gICAgICAgIGRhdGE6IHsgLi4uZW50cnkuZGF0YSwgX3Nlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQgfSxcbiAgICAgIH07XG4gICAgICBvcmlnaW5hbEJyb2FkY2FzdChzdGFtcGVkKTtcbiAgICB9O1xuICB9XG4gIGxpdmVNZXRyaWNzT25TbmFwc2hvdCA9IHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdDtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBJbmdlc3Rpb24gcm91dGVzIG1vdW50ZWQnKTtcblxuICAvLyBTdGFydCBoZWFydGJlYXQgYW5kIHJlZ2lzdGVyIGNsZWFudXBcbiAgY29uc3Qgc3RvcEhlYXJ0YmVhdCA9IHN0YXJ0SGVhcnRiZWF0KGVsZWN0aW9uLmxlYWRlckluZm8pO1xuICByZWdpc3RlckxlYWRlckNsZWFudXAoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgc3RhcnRlZCcsIHtcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLCBwb3J0OiBjb25zb2xlUG9ydCwgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICByb2xlOiAnbGVhZGVyJywgaW5nZXN0Um91dGVzOiBbJy9hcGkvaW5nZXN0L2xvZ3MnLCAnL2FwaS9pbmdlc3QvbWV0cmljcycsICcvYXBpL2luZ2VzdC9zZXNzaW9uJywgJy9hcGkvc2Vzc2lvbnMnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnbGVhZGVyJyxcbiAgICBlbGVjdGlvbixcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBzdG9wSGVhcnRiZWF0KCk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGFydCBhcyBhIGZvbGxvd2VyLlxuICogUmVnaXN0ZXJzIGZvcndhcmRpbmcgc2lua3Mgd2l0aCB0aGUgTG9nTWFuYWdlciwgc3RhcnRzIHNlc3Npb24gaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzRm9sbG93ZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBjb25zb2xlUG9ydDogbnVtYmVyID0gREVGQVVMVF9DT05TT0xFX1BPUlQsXG4gIGluaXRpYWxBdXRoVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsLFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCBsZWFkZXJVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke2VsZWN0aW9uLmxlYWRlckluZm8ucG9ydH1gO1xuXG4gIC8vIFJlYWQgdGhlIGNvbnNvbGUgYXV0aCB0b2tlbiAoIzE3ODApIHdyaXR0ZW4gYnkgdGhlIGxlYWRlci4gTWF5IGJlIG51bGxcbiAgLy8gaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXQg4oCUIHRoZSBzaW5rcyBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5IGFuZFxuICAvLyBzaW1wbHkgb21pdCB0aGUgQmVhcmVyIGhlYWRlciwgd2hpY2ggaXMgZmluZSB3aGVuIGF1dGggaXMgbm90IGVuZm9yY2VkLlxuICBsZXQgYXV0aFRva2VuID0gaW5pdGlhbEF1dGhUb2tlbjtcbiAgaWYgKGF1dGhUb2tlbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHsgZ2V0UHJpbWFyeVRva2VuRnJvbUZpbGUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25zb2xlVG9rZW4uanMnKTtcbiAgICBhdXRoVG9rZW4gPSBhd2FpdCBnZXRQcmltYXJ5VG9rZW5Gcm9tRmlsZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIH1cbiAgaWYgKGF1dGhUb2tlbikge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBsb2FkZWQgY29uc29sZSBhdXRoIHRva2VuJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIE5vIGNvbnNvbGUgYXV0aCB0b2tlbiBmaWxlIGZvdW5kOyBmb2xsb3dlciB3aWxsIFBPU1Qgd2l0aG91dCBCZWFyZXIgaGVhZGVyJyk7XG4gIH1cblxuICAvLyBQZXItaW5zdGFuY2UgcHJvbW90aW9uIG1hbmFnZXIg4oCUIHRyYWNrcyBpdHMgb3duIGF0dGVtcHQgY291bnRlciBzb1xuICAvLyBtdWx0aXBsZSBmb2xsb3dlcnMgZG9uJ3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlcidzIHByb21vdGlvbiBidWRnZXRzLlxuICBjb25zdCBwcm9tb3Rpb25NZ3IgPSBuZXcgUHJvbW90aW9uTWFuYWdlcihvcHRpb25zLCBjb25zb2xlUG9ydCwgc3RhcnRBc0xlYWRlciwgc3RhcnRBc0ZvbGxvd2VyKTtcblxuICAvLyBEZWNsYXJlIHNlc3Npb25IZWFydGJlYXQgYmVmb3JlIHRoZSBzaW5rIHNvIHRoZSBjbG9zdXJlIGNhbiBjYXB0dXJlIGl0LlxuICAvLyBCb3RoIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGNvdWxkIHBvc3NpYmx5IGZpcmUgKG5lZWRzIDUrIGZhaWxlZCBmbHVzaGVzKS5cbiAgbGV0IHNlc3Npb25IZWFydGJlYXQ6IFNlc3Npb25IZWFydGJlYXQ7XG5cbiAgLy8gUmVnaXN0ZXIgYSBmb3J3YXJkaW5nIGxvZyBzaW5rIHdpdGggbGVhZGVyLWRlYXRoIGNhbGxiYWNrICgjMTg1MCkuXG4gIGNvbnN0IGZvcndhcmRpbmdTaW5rID0gbmV3IExlYWRlckZvcndhcmRpbmdMb2dTaW5rKGxlYWRlclVybCwgb3B0aW9ucy5zZXNzaW9uSWQsIGF1dGhUb2tlbiwgKCkgPT4ge1xuICAgIHByb21vdGlvbk1nci5wcm9tb3RlKGZvcndhcmRpbmdTaW5rLCBzZXNzaW9uSGVhcnRiZWF0KVxuICAgICAgLmNhdGNoKGVyciA9PiBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gUHJvbW90aW9uIGNyYXNoZWQnLCB7IGVycm9yOiBTdHJpbmcoZXJyKSB9KSk7XG4gIH0pO1xuICBvcHRpb25zLnJlZ2lzdGVyTG9nU2luayhmb3J3YXJkaW5nU2luayk7XG5cbiAgLy8gU3RhcnQgc2Vzc2lvbiBoZWFydGJlYXQgdG8gdGhlIGxlYWRlclxuICBzZXNzaW9uSGVhcnRiZWF0ID0gbmV3IFNlc3Npb25IZWFydGJlYXQobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQsIGF1dGhUb2tlbik7XG4gIGF3YWl0IHNlc3Npb25IZWFydGJlYXQuc3RhcnQoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBpZDogcHJvY2Vzcy5waWQsIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgbGVhZGVyU2Vzc2lvbjogZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsIGxlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgbGVhZGVyUG9ydDogZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0LCBsZWFkZXJVcmwsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBlbGVjdGlvbixcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXNzaW9uSGVhcnRiZWF0LnN0b3AoKTtcbiAgICAgIGF3YWl0IGZvcndhcmRpbmdTaW5rLmNsb3NlKCk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
710
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU9ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUl6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7QUFDNUQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFD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Q0FBQztJQUNILE9BQU8sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFeEMsd0NBQXdDO0lBQ3hDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RixNQUFNLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBRS9CLE1BQU0sb0JBQW9CLEdBQUcsNkJBQTZCLENBQ3hELE9BQU8sRUFDUCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsZ0JBQWdCLENBQ2pCLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFO1FBQy9DLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVO1FBQ2hFLGFBQWEsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHO1FBQ2hGLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTO0tBQ2hELENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRO1FBQ1IsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xCLG9CQUFvQixFQUFFLENBQUM7WUFDdkIsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgd2ViIGNvbnNvbGUgb3JjaGVzdHJhdG9yLlxuICpcbiAqIFRpZXMgdG9nZXRoZXIgbGVhZGVyIGVsZWN0aW9uLCBjb25zb2xlIHN0YXJ0dXAsIGZvbGxvd2VyIHdpcmluZyxcbiAqIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50XG4gKiBjYWxsZWQgYnkgdGhlIERJIGNvbnRhaW5lciBkdXJpbmcgZGVmZXJyZWQgc2V0dXAuXG4gKlxuICogRmxvdzpcbiAqIDEuIFJ1biBsZWFkZXIgZWxlY3Rpb24gKHJlYWQgbG9jayBmaWxlLCBjbGFpbSBvciBmb2xsb3cpXG4gKiAyLiBJZiBsZWFkZXI6IHN0YXJ0IHdlYiBzZXJ2ZXIgb24gZml4ZWQgcG9ydCwgbW91bnQgaW5nZXN0IHJvdXRlcywgc3RhcnQgaGVhcnRiZWF0XG4gKiAzLiBJZiBmb2xsb3dlcjogcmVnaXN0ZXIgZm9yd2FyZGluZyBzaW5rcyB3aXRoIExvZ01hbmFnZXIsIHN0YXJ0IHNlc3Npb24gaGVhcnRiZWF0XG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi8uLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgV2ViU2VydmVyT3B0aW9ucywgV2ViU2VydmVyUmVzdWx0IH0gZnJvbSAnLi4vc2VydmVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGVsZWN0TGVhZGVyLFxuICBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGUsXG4gIGZvcmNlQ2xhaW1MZWFkZXJzaGlwLFxuICBzdGFydEhlYXJ0YmVhdCxcbiAgcmVnaXN0ZXJMZWFkZXJDbGVhbnVwLFxuICBkZXRlY3RMZWdhY3lMZWFkZXIsXG4gIHJlYWRMZWFkZXJMb2NrLFxuICBkZWxldGVMZWFkZXJMb2NrLFxuICBjbGFpbUxlYWRlcnNoaXAsXG4gIGNyZWF0ZUxlYWRlckluZm8sXG4gIExPQ0tfVkVSU0lPTixcbiAgQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gIGV2YWx1YXRlTGVhZGVyUHJlZmVyZW5jZSxcbiAgdHlwZSBFbGVjdGlvblJlc3VsdCxcbiAgdHlwZSBDb25zb2xlTGVhZGVySW5mbyxcbiAgdHlwZSBMZWFkZXJQcmVmZXJlbmNlRGVjaXNpb24sXG59IGZyb20gJy4vTGVhZGVyRWxlY3Rpb24uanMnO1xuaW1wb3J0IHsgY3JlYXRlSW5nZXN0Um91dGVzIH0gZnJvbSAnLi9Jbmdlc3RSb3V0ZXMuanMnO1xuaW1wb3J0IHtcbiAgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmssXG4gIFNlc3Npb25IZWFydGJlYXQsXG59IGZyb20gJy4vTGVhZGVyRm9yd2FyZGluZ1NpbmsuanMnO1xuaW1wb3J0IHsgUHJvbW90aW9uTWFuYWdlciB9IGZyb20gJy4vUHJvbW90aW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBDb25zb2xlVG9rZW5TdG9yZSB9IGZyb20gJy4vY29uc29sZVRva2VuLmpzJztcbmltcG9ydCB7XG4gIGZpbmRQaWRPblBvcnQsXG4gIGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZCxcbiAgdHlwZSBLaWxsU3RhbGVQcm9jZXNzT3V0Y29tZSxcbn0gZnJvbSAnLi9TdGFsZVByb2Nlc3NSZWNvdmVyeS5qcyc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi9jb25maWcvZW52LmpzJztcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnNvbGUgcG9ydCBmcm9tIHRoZSBlbnYgdmFyLiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gbm8gcG9ydFxuICogaXMgcHJvdmlkZWQgdmlhIGNvbmZpZyBmaWxlIG9yIG9wdGlvbnMuIFRoZSByZXNvbHV0aW9uIGhpZXJhcmNoeSBpczpcbiAqICAgMS4gb3B0aW9ucy5wb3J0IChmcm9tIGNvbmZpZyBmaWxlLCByZXNvbHZlZCBieSB0aGUgREkgY29udGFpbmVyKVxuICogICAyLiBET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCBlbnYgdmFyXG4gKiAgIDMuIDQxNzE1IChoYXJkY29kZWQgZGVmYXVsdCBpbiBlbnYudHMpXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09OU09MRV9QT1JUID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUO1xuY29uc3QgTEVHQUNZX0NPTlNPTEVfRkFMTEJBQ0tfUE9SVCA9IDM5Mzk7XG5jb25zdCBTWU5USEVUSUNfUE9SVF9PV05FUl9TRVNTSU9OX1BSRUZJWCA9ICdwb3J0LW93bmVyLSc7XG5jb25zdCBMRUFERVJfRElTQ09WRVJZX1RJTUVPVVRfTVMgPSAyXzAwMDtcbmNvbnN0IEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRyA9IHtcbiAgaW50ZXJ2YWxNczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX01TLFxuICBqaXR0ZXJNczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0pJVFRFUl9NUyxcbiAgZmFpbHVyZVRocmVzaG9sZDogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0ZBSUxVUkVfVEhSRVNIT0xELFxuICBmYWlsdXJlQ29vbGRvd25NczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0ZBSUxVUkVfQ09PTERPV05fTVMsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjdXJyZW50VGltZXN0YW1wKCk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGb2xsb3dlckF1dGhvcml0eVJlY2hlY2tJbnRlcnZhbChzZXNzaW9uSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTZXNzaW9uSWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50O1xuICBsZXQgaGFzaCA9IDA7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub3JtYWxpemVkU2Vzc2lvbklkLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNvZGVQb2ludCA9IG5vcm1hbGl6ZWRTZXNzaW9uSWQuY29kZVBvaW50QXQoaW5kZXgpID8/IDA7XG4gICAgaGFzaCA9IChoYXNoICogMzEgKyBjb2RlUG9pbnQpID4+PiAwO1xuICAgIGlmIChjb2RlUG9pbnQgPiAweGZmZmYpIHtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuaW50ZXJ2YWxNcyArIChoYXNoICUgKEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRy5qaXR0ZXJNcyArIDEpKTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlT3B0aW9ucyB7XG4gIC8qKiBUaGlzIHByb2Nlc3MncyB1bmlxdWUgc2Vzc2lvbiBJRCAqL1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBEb2xsaG91c2Ugc2Vzc2lvbiBpZGVudGl0eSBzaG93biB0byBodW1hbnMgYW5kIHVzZWQgZm9yIHBlcnNpc3RlbmNlLiAqL1xuICBzdGFibGVTZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFBvcnRmb2xpbyBiYXNlIGRpcmVjdG9yeSAoZm9yIHN0YXJ0V2ViU2VydmVyKSAqL1xuICBwb3J0Zm9saW9EaXI6IHN0cmluZztcbiAgLyoqIExvZyBtZW1vcnkgc2luayAoZm9yIGNvbnNvbGUgaGlzdG9yeSkgKi9cbiAgbWVtb3J5U2luazogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1ldHJpY3MgbWVtb3J5IHNpbmsgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIE1DUC1BUUwgaGFuZGxlciBmb3IgcGVybWlzc2lvbiByb3V0ZXMgKHR5cGVkIGFzIGFueSB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzKSAqL1xuICBtY3BBcWxIYW5kbGVyPzogYW55O1xuICAvKiogQ2FsbGJhY2sgdG8gcmVnaXN0ZXIgYSBsb2cgc2luayB3aXRoIHRoZSBMb2dNYW5hZ2VyICovXG4gIHJlZ2lzdGVyTG9nU2luazogKHNpbms6IHsgd3JpdGUoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSk6IHZvaWQ7IGZsdXNoKCk6IFByb21pc2U8dm9pZD47IGNsb3NlKCk6IFByb21pc2U8dm9pZD4gfSkgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHRvIHdpcmUgU1NFIGJyb2FkY2FzdHMgYWZ0ZXIgd2ViIHNlcnZlciBzdGFydHMgKi9cbiAgd2lyZVNTRUJyb2FkY2FzdHM6ICh3ZWJSZXN1bHQ6IHsgbG9nQnJvYWRjYXN0PzogKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7IG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCB9LCBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rKSA9PiB2b2lkO1xuICAvKiogQ29uc29sZSBwb3J0IG92ZXJyaWRlIGZyb20gY29uZmlnIGZpbGUuIEZhbGxzIGJhY2sgdG8gZW52IHZhciBpZiBub3QgcHJvdmlkZWQuICovXG4gIHBvcnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIHRoZSB1bmlmaWVkIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENvbnNvbGVSZXN1bHQge1xuICByb2xlOiAnbGVhZGVyJyB8ICdmb2xsb3dlcic7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgLyoqIFBvcnQgdGhlIGNvbnNvbGUgaXMgcnVubmluZyBvbiAobGVhZGVyIG9ubHkpICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBDbGVhbnVwIGZ1bmN0aW9uIHRvIGNhbGwgb24gc2h1dGRvd24gKi9cbiAgY2xlYW51cDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBDaGVjayBmb3IgYSBydW5uaW5nIGxlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBhbmRcbiAqIGxvZyBhIFdBUk4tbGV2ZWwgbWVzc2FnZSBpZiBvbmUgaXMgZm91bmQgKCMxNzk0KS5cbiAqXG4gKiBFeHRyYWN0ZWQgZnJvbSBgc3RhcnRVbmlmaWVkQ29uc29sZWAgc28gdGhlIHdpcmluZyBjYW4gYmUgaW50ZWdyYXRpb24tXG4gKiB0ZXN0ZWQgaW4gaXNvbGF0aW9uIHdpdGhvdXQgc3Bpbm5pbmcgdXAgYSBmdWxsIHdlYiBzZXJ2ZXIgYW5kIGxlYWRlclxuICogZWxlY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBmaXJlLWFuZC1mb3JnZXQ6IGRldGVjdGlvbiBmYWlsdXJlc1xuICogYXJlIGxvZ2dlZCBhdCBERUJVRyBhbmQgbmV2ZXIgcHJvcGFnYXRlLCBiZWNhdXNlIGEgZmFpbHVyZSBoZXJlIG11c3RcbiAqIG5vdCBibG9jayBsZWFkZXIgZWxlY3Rpb24gb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudFBvcnQgLSBUaGUgcG9ydCB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlIGludGVuZHMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgIGJpbmQgdG8uIFVzZWQgaW4gdGhlIHdhcm5pbmcgbWVzc2FnZSB0byBoZWxwIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgdXNlciB0ZWxsIHRoZSB0d28gY29uc29sZXMgYXBhcnQuXG4gKiBAcGFyYW0gZGV0ZWN0ICAgICAgLSBPcHRpb25hbCBpbmplY3Rpb24gcG9pbnQgZm9yIHRoZSBkZXRlY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBgZGV0ZWN0TGVnYWN5TGVhZGVyYC4gVGVzdHNcbiAqICAgICAgICAgICAgICAgICAgICAgIHBhc3MgYSBzdHViLlxuICogQHBhcmFtIGxvZyAgICAgICAgIC0gT3B0aW9uYWwgaW5qZWN0aW9uIHBvaW50IGZvciB0aGUgbG9nZ2VyLiBEZWZhdWx0c1xuICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG1vZHVsZSBsb2dnZXIuIFRlc3RzIHBhc3MgYSBzcHkuXG4gKiBAcmV0dXJucyBUaGUgbGVnYWN5IGxlYWRlciBpbmZvIGZyb20gYGRldGVjdCgpYCwgb3IgbnVsbCBpZiBkZXRlY3Rpb25cbiAqICAgICAgICAgIHRocmV3LiBFeHBvc2VkIHNvIHRlc3RzIGNhbiBhc3NlcnQgdGhlIGZ1bGwgcmVzdWx0IHNoYXBlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoXG4gIGN1cnJlbnRQb3J0OiBudW1iZXIsXG4gIGRldGVjdDogdHlwZW9mIGRldGVjdExlZ2FjeUxlYWRlciA9IGRldGVjdExlZ2FjeUxlYWRlcixcbiAgbG9nOiB0eXBlb2YgbG9nZ2VyID0gbG9nZ2VyLFxuKTogUHJvbWlzZTxBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGRldGVjdExlZ2FjeUxlYWRlcj4+IHwgbnVsbD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGxlZ2FjeSA9IGF3YWl0IGRldGVjdCgpO1xuICAgIGlmIChsZWdhY3kubGVnYWN5UnVubmluZykge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBbVW5pZmllZENvbnNvbGVdIExlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBkZXRlY3RlZCBgICtcbiAgICAgICAgYChwaWQ9JHtsZWdhY3kucGlkfSwgcG9ydD0ke2xlZ2FjeS5wb3J0fSkuIEJvdGggY29uc29sZXMgd2lsbCBydW4gYCArXG4gICAgICAgIGBpbmRlcGVuZGVudGx5IG9uIGRpZmZlcmVudCBwb3J0cyB3aXRoIGRpZmZlcmVudCBzZWN1cml0eSBwb3N0dXJlLiBgICtcbiAgICAgICAgYFRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUgKHRoaXMgcHJvY2VzcykgdXNlcyBwb3J0ICR7Y3VycmVudFBvcnR9OyBgICtcbiAgICAgICAgYHRoZSBsZWdhY3kgY29uc29sZSB1c2VzIHBvcnQgJHtsZWdhY3kucG9ydCA/PyBMRUdBQ1lfQ09OU09MRV9GQUxMQkFDS19QT1JUfS4gYCArXG4gICAgICAgIGBGb3IgY29uc2lzdGVudCBzZWN1cml0eSwgdXBkYXRlIHRoZSBsZWdhY3kgaW5zdGFsbGF0aW9uIHRvIGEgYCArXG4gICAgICAgIGB2ZXJzaW9uIHdpdGggdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2FjeTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQmVzdC1lZmZvcnQg4oCUIG5ldmVyIGJsb2NrIGVsZWN0aW9uIG9uIGEgZGV0ZWN0aW9uIGZhaWx1cmVcbiAgICBsb2cuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTGVnYWN5IGxlYWRlciBkZXRlY3Rpb24gZmFpbGVkJywge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2Vzc2lvbkFwaVJlY29yZCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBwaWQ6IG51bWJlcjtcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBsYXN0SGVhcnRiZWF0Pzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIGlzTGVhZGVyPzogYm9vbGVhbjtcbiAga2luZD86IHN0cmluZztcbiAgc2VydmVyVmVyc2lvbj86IHN0cmluZztcbiAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3J0TGVhZGVyRGlzY292ZXJ5IHtcbiAgbGVhZGVySW5mbzogQ29uc29sZUxlYWRlckluZm8gfCBudWxsO1xuICBvd25lclBpZDogbnVtYmVyIHwgbnVsbDtcbiAgc291cmNlOiAnYXBpJyB8ICdsb2NrJyB8ICdzeW50aGV0aWMnIHwgJ25vbmUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRGYWlsdXJlUmVjb3ZlcnlSZXN1bHQgZXh0ZW5kcyBQb3J0TGVhZGVyRGlzY292ZXJ5IHtcbiAgbG9ja0NsZWFudXBBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIGxvY2tDbGVhbnVwUGVyZm9ybWVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24ge1xuICBzaG91bGRFdmljdDogYm9vbGVhbjtcbiAgb3duZXJQaWQ6IG51bWJlciB8IG51bGw7XG4gIHByZWZlcmVuY2U6IExlYWRlclByZWZlcmVuY2VEZWNpc2lvbiB8IG51bGw7XG59XG5cbmludGVyZmFjZSBGb3JjZVRha2VvdmVyQXR0ZW1wdFJlc3VsdCB7XG4gIHdlYlJlc3VsdDogV2ViU2VydmVyUmVzdWx0O1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIGZhbGxiYWNrOiBQb3J0TGVhZGVyRGlzY292ZXJ5O1xuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbjtcbiAgZm9yY2VkS2lsbDogS2lsbFN0YWxlUHJvY2Vzc091dGNvbWUgfCBudWxsO1xuICB0YWtlb3ZlckF0dGVtcHRlZDogYm9vbGVhbjtcbiAgcmVib3VuZExvY2tDbGFpbWVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uIHtcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsO1xuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGw7XG4gIGZvcmNlZENsYWltOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMge1xuICBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGVJbXBsPzogdHlwZW9mIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZTtcbiAgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGw/OiB0eXBlb2YgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsPzogdHlwZW9mIGZvcmNlQ2xhaW1MZWFkZXJzaGlwO1xuICBkZWxldGVMZWFkZXJMb2NrSW1wbD86IHR5cGVvZiBkZWxldGVMZWFkZXJMb2NrO1xufVxuXG5pbnRlcmZhY2UgRm9sbG93ZXJBdXRob3JpdHlNb25pdG9yRGVwZW5kZW5jaWVzIGV4dGVuZHMgRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMge1xuICByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHlJbXBsPzogdHlwZW9mIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eTtcbiAgc2V0SW50ZXJ2YWxJbXBsPzogdHlwZW9mIHNldEludGVydmFsO1xuICBjbGVhckludGVydmFsSW1wbD86IHR5cGVvZiBjbGVhckludGVydmFsO1xuICBub3dJbXBsPzogKCkgPT4gbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRGlzY292ZXJ5RGVwZW5kZW5jaWVzIHtcbiAgZmV0Y2hJbXBsPzogdHlwZW9mIGZldGNoO1xuICBmaW5kUGlkT25Qb3J0SW1wbD86IHR5cGVvZiBmaW5kUGlkT25Qb3J0O1xuICByZWFkTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgcmVhZExlYWRlckxvY2s7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRGlzY292ZXJ5SGVhZGVycyhhdXRoVG9rZW46IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIGF1dGhUb2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2F1dGhUb2tlbn1gIH0gOiB7fTtcbn1cblxuZnVuY3Rpb24gYnVpbGRMZWFkZXJJbmZvRnJvbVNlc3Npb24ocG9ydDogbnVtYmVyLCBvd25lclBpZDogbnVtYmVyLCBsZWFkZXJTZXNzaW9uOiBTZXNzaW9uQXBpUmVjb3JkKTogQ29uc29sZUxlYWRlckluZm8ge1xuICByZXR1cm4ge1xuICAgIHZlcnNpb246IExPQ0tfVkVSU0lPTixcbiAgICBwaWQ6IG93bmVyUGlkLFxuICAgIHBvcnQsXG4gICAgc2Vzc2lvbklkOiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShsZWFkZXJTZXNzaW9uLnNlc3Npb25JZCkubm9ybWFsaXplZENvbnRlbnQsXG4gICAgc3RhcnRlZEF0OiBsZWFkZXJTZXNzaW9uLnN0YXJ0ZWRBdCA/PyBjdXJyZW50VGltZXN0YW1wKCksXG4gICAgaGVhcnRiZWF0OiBsZWFkZXJTZXNzaW9uLmxhc3RIZWFydGJlYXQgPz8gY3VycmVudFRpbWVzdGFtcCgpLFxuICAgIHNlcnZlclZlcnNpb246IGxlYWRlclNlc3Npb24uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbGVhZGVyU2Vzc2lvbi5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTeW50aGV0aWNMZWFkZXJJbmZvKHBvcnQ6IG51bWJlciwgb3duZXJQaWQ6IG51bWJlcik6IENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgY29uc3Qgbm93ID0gY3VycmVudFRpbWVzdGFtcCgpO1xuICByZXR1cm4ge1xuICAgIHZlcnNpb246IExPQ0tfVkVSU0lPTixcbiAgICBwaWQ6IG93bmVyUGlkLFxuICAgIHBvcnQsXG4gICAgc2Vzc2lvbklkOiBgJHtTWU5USEVUSUNfUE9SVF9PV05FUl9TRVNTSU9OX1BSRUZJWH0ke293bmVyUGlkfWAsXG4gICAgc3RhcnRlZEF0OiBub3csXG4gICAgaGVhcnRiZWF0OiBub3csXG4gICAgc2VydmVyVmVyc2lvbjogTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMZWFkZXJWaWFTZXNzaW9uc0FwaShcbiAgcG9ydDogbnVtYmVyLFxuICBvd25lclBpZDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGZldGNoSW1wbDogdHlwZW9mIGZldGNoLFxuKTogUHJvbWlzZTxDb25zb2xlTGVhZGVySW5mbyB8IG51bGw+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUFERVJfRElTQ09WRVJZX1RJTUVPVVRfTVMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEltcGwoYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fS9hcGkvc2Vzc2lvbnNgLCB7XG4gICAgICBoZWFkZXJzOiBidWlsZERpc2NvdmVyeUhlYWRlcnMoYXV0aFRva2VuKSxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IHNlc3Npb25zPzogU2Vzc2lvbkFwaVJlY29yZFtdIH07XG4gICAgY29uc3Qgc2Vzc2lvbnMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQuc2Vzc2lvbnMpID8gcGF5bG9hZC5zZXNzaW9ucyA6IFtdO1xuICAgIGNvbnN0IGxlYWRlclNlc3Npb24gPSBzZXNzaW9ucy5maW5kKChzZXNzaW9uKSA9PlxuICAgICAgc2Vzc2lvbi5waWQgPT09IG93bmVyUGlkICYmXG4gICAgICBzZXNzaW9uLmlzTGVhZGVyID09PSB0cnVlICYmXG4gICAgICBzZXNzaW9uLmtpbmQgPT09ICdtY3AnICYmXG4gICAgICBzZXNzaW9uLnN0YXR1cyAhPT0gJ3N0b3BwZWQnXG4gICAgKTtcbiAgICByZXR1cm4gbGVhZGVyU2Vzc2lvbiA/IGJ1aWxkTGVhZGVySW5mb0Zyb21TZXNzaW9uKHBvcnQsIG93bmVyUGlkLCBsZWFkZXJTZXNzaW9uKSA6IG51bGw7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0KFxuICBwb3J0OiBudW1iZXIsXG4gIGF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCxcbiAgZGVwczogRGlzY292ZXJ5RGVwZW5kZW5jaWVzID0ge30sXG4pOiBQcm9taXNlPFBvcnRMZWFkZXJEaXNjb3Zlcnk+IHtcbiAgY29uc3QgZmV0Y2hJbXBsID0gZGVwcy5mZXRjaEltcGwgPz8gZmV0Y2g7XG4gIGNvbnN0IGZpbmRQaWRPblBvcnRJbXBsID0gZGVwcy5maW5kUGlkT25Qb3J0SW1wbCA/PyBmaW5kUGlkT25Qb3J0O1xuICBjb25zdCByZWFkTGVhZGVyTG9ja0ltcGwgPSBkZXBzLnJlYWRMZWFkZXJMb2NrSW1wbCA/PyByZWFkTGVhZGVyTG9jaztcbiAgY29uc3Qgb3duZXJQaWQgPSBhd2FpdCBmaW5kUGlkT25Qb3J0SW1wbChwb3J0KTtcblxuICBpZiAob3duZXJQaWQgIT09IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGVhZGVySW5mbyA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyVmlhU2Vzc2lvbnNBcGkocG9ydCwgb3duZXJQaWQsIGF1dGhUb2tlbiwgZmV0Y2hJbXBsKTtcbiAgICAgIGlmIChsZWFkZXJJbmZvKSB7XG4gICAgICAgIHJldHVybiB7IG93bmVyUGlkLCBzb3VyY2U6ICdhcGknLCBsZWFkZXJJbmZvIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gRmFpbGVkIHRvIHF1ZXJ5IGFjdGl2ZSBsZWFkZXIgc2Vzc2lvbnMnLCB7XG4gICAgICAgIHBvcnQsXG4gICAgICAgIG93bmVyUGlkLFxuICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbG9jayA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrSW1wbCgpO1xuICBpZiAobG9jaz8ucG9ydCA9PT0gcG9ydCAmJiAob3duZXJQaWQgPT09IG51bGwgfHwgbG9jay5waWQgPT09IG93bmVyUGlkKSkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25lclBpZDogb3duZXJQaWQgPz8gbG9jay5waWQsXG4gICAgICBzb3VyY2U6ICdsb2NrJyxcbiAgICAgIGxlYWRlckluZm86IHtcbiAgICAgICAgLi4ubG9jayxcbiAgICAgICAgc2Vzc2lvbklkOiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShsb2NrLnNlc3Npb25JZCkubm9ybWFsaXplZENvbnRlbnQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAob3duZXJQaWQgIT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duZXJQaWQsXG4gICAgICBzb3VyY2U6ICdzeW50aGV0aWMnLFxuICAgICAgbGVhZGVySW5mbzogYnVpbGRTeW50aGV0aWNMZWFkZXJJbmZvKHBvcnQsIG93bmVyUGlkKSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgbGVhZGVySW5mbzogbnVsbCwgb3duZXJQaWQ6IG51bGwsIHNvdXJjZTogJ25vbmUnIH07XG59XG5cbmludGVyZmFjZSBCaW5kRmFpbHVyZVJlY292ZXJ5RGVwZW5kZW5jaWVzIGV4dGVuZHMgRGlzY292ZXJ5RGVwZW5kZW5jaWVzIHtcbiAgZGVsZXRlTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgZGVsZXRlTGVhZGVyTG9jaztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJMZWFkZXJCaW5kRmFpbHVyZShcbiAgcHJvdmlzaW9uYWxMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBwb3J0OiBudW1iZXIsXG4gIGF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCxcbiAgZGVwczogQmluZEZhaWx1cmVSZWNvdmVyeURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxCaW5kRmFpbHVyZVJlY292ZXJ5UmVzdWx0PiB7XG4gIGNvbnN0IHJlYWRMZWFkZXJMb2NrSW1wbCA9IGRlcHMucmVhZExlYWRlckxvY2tJbXBsID8/IHJlYWRMZWFkZXJMb2NrO1xuICBjb25zdCBkZWxldGVMZWFkZXJMb2NrSW1wbCA9IGRlcHMuZGVsZXRlTGVhZGVyTG9ja0ltcGwgPz8gZGVsZXRlTGVhZGVyTG9jaztcbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGJpbmQgcmVjb3ZlcnkgaW5pdGlhdGVkJywge1xuICAgIHByb3Zpc2lvbmFsU2Vzc2lvbklkOiBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWQsXG4gICAgcHJvdmlzaW9uYWxQaWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCxcbiAgICBwb3J0LFxuICB9KTtcblxuICBsZXQgZmFsbGJhY2sgPSBhd2FpdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0KHBvcnQsIGF1dGhUb2tlbiwgZGVwcyk7XG4gIGxldCBsb2NrQ2xlYW51cEF0dGVtcHRlZCA9IGZhbHNlO1xuICBsZXQgbG9ja0NsZWFudXBQZXJmb3JtZWQgPSBmYWxzZTtcbiAgY29uc3QgY3VycmVudExvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgY29uc3QgcHJvdmlzaW9uYWxMb2NrTWF0Y2hlcyA9IChcbiAgICBjdXJyZW50TG9jaz8ucGlkID09PSBwcm92aXNpb25hbExlYWRlci5waWQgJiZcbiAgICBjdXJyZW50TG9jay5wb3J0ID09PSBwcm92aXNpb25hbExlYWRlci5wb3J0ICYmXG4gICAgY3VycmVudExvY2suc2Vzc2lvbklkID09PSBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWRcbiAgKTtcbiAgY29uc3QgZmFsbGJhY2tQb2ludHNUb1Byb3Zpc2lvbmFsTGVhZGVyID0gKFxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8/LnBpZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucGlkICYmXG4gICAgZmFsbGJhY2subGVhZGVySW5mby5wb3J0ID09PSBwcm92aXNpb25hbExlYWRlci5wb3J0ICYmXG4gICAgZmFsbGJhY2subGVhZGVySW5mby5zZXNzaW9uSWQgPT09IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZFxuICApO1xuXG4gIGlmIChwcm92aXNpb25hbExvY2tNYXRjaGVzKSB7XG4gICAgbG9ja0NsZWFudXBBdHRlbXB0ZWQgPSB0cnVlO1xuICAgIGF3YWl0IGRlbGV0ZUxlYWRlckxvY2tJbXBsKCk7XG4gICAgbG9ja0NsZWFudXBQZXJmb3JtZWQgPSB0cnVlO1xuICAgIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIFJlbW92ZWQgcHJvdmlzaW9uYWwgbGVhZGVyIGxvY2sgYWZ0ZXIgYmluZCBmYWlsdXJlJywge1xuICAgICAgcHJvdmlzaW9uYWxTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgICBwb3J0LFxuICAgIH0pO1xuICAgIGlmIChmYWxsYmFja1BvaW50c1RvUHJvdmlzaW9uYWxMZWFkZXIpIHtcbiAgICAgIGZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChwb3J0LCBhdXRoVG9rZW4sIGRlcHMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBiaW5kIHJlY292ZXJ5IGNvbXBsZXRlZCcsIHtcbiAgICBwcm92aXNpb25hbFNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcG9ydCxcbiAgICBkaXNjb3ZlcnlTb3VyY2U6IGZhbGxiYWNrLnNvdXJjZSxcbiAgICBvd25lclBpZDogZmFsbGJhY2sub3duZXJQaWQsXG4gICAgbG9ja0NsZWFudXBBdHRlbXB0ZWQsXG4gICAgbG9ja0NsZWFudXBQZXJmb3JtZWQsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uZmFsbGJhY2ssXG4gICAgbG9ja0NsZWFudXBBdHRlbXB0ZWQsXG4gICAgbG9ja0NsZWFudXBQZXJmb3JtZWQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KFxuICBjYW5kaWRhdGVMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBmYWxsYmFjazogUG9ydExlYWRlckRpc2NvdmVyeSxcbik6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24ge1xuICBpZiAoIWZhbGxiYWNrLmxlYWRlckluZm8gfHwgZmFsbGJhY2sub3duZXJQaWQgPT09IG51bGwgfHwgZmFsbGJhY2sub3duZXJQaWQgPT09IGNhbmRpZGF0ZUxlYWRlci5waWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdWxkRXZpY3Q6IGZhbHNlLFxuICAgICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgICAgcHJlZmVyZW5jZTogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJlZmVyZW5jZSA9IGV2YWx1YXRlTGVhZGVyUHJlZmVyZW5jZShjYW5kaWRhdGVMZWFkZXIsIGZhbGxiYWNrLmxlYWRlckluZm8pO1xuICByZXR1cm4ge1xuICAgIHNob3VsZEV2aWN0OiBwcmVmZXJlbmNlLnNob3VsZFJlcGxhY2UsXG4gICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIHByZWZlcmVuY2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICBjb25zb2xlUG9ydDogbnVtYmVyLFxuICBwcm92aXNpb25hbExlYWRlcjogQ29uc29sZUxlYWRlckluZm8sXG4gIGJpbmRSZXN1bHQ6IFdlYlNlcnZlclJlc3VsdFsnYmluZFJlc3VsdCddLFxuICBmYWxsYmFjazogUG9ydExlYWRlckRpc2NvdmVyeSxcbiAgcmVwbGFjZW1lbnQ/OiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uLFxuICBmb3JjZWRLaWxsPzogS2lsbFN0YWxlUHJvY2Vzc091dGNvbWUgfCBudWxsLFxuKSB7XG4gIHJldHVybiB7XG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgYmluZEVycm9yOiBiaW5kUmVzdWx0Py5lcnJvcixcbiAgICBiaW5kRGV0YWlsOiBiaW5kUmVzdWx0Py5kZXRhaWwsXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJQaWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCxcbiAgICBwcm92aXNpb25hbExlYWRlclNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyVmVyc2lvbjogcHJvdmlzaW9uYWxMZWFkZXIuc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJQcm90b2NvbFZlcnNpb246IHByb3Zpc2lvbmFsTGVhZGVyLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIGZhbGxiYWNrT3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIGZhbGxiYWNrU291cmNlOiBmYWxsYmFjay5zb3VyY2UsXG4gICAgZmFsbGJhY2tMZWFkZXJQaWQ6IGZhbGxiYWNrLmxlYWRlckluZm8/LnBpZCxcbiAgICBmYWxsYmFja0xlYWRlclNlc3Npb25JZDogZmFsbGJhY2subGVhZGVySW5mbz8uc2Vzc2lvbklkLFxuICAgIGZhbGxiYWNrTGVhZGVyVmVyc2lvbjogZmFsbGJhY2subGVhZGVySW5mbz8uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgZmFsbGJhY2tMZWFkZXJQcm90b2NvbFZlcnNpb246IGZhbGxiYWNrLmxlYWRlckluZm8/LmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHJlcGxhY2VtZW50U2hvdWxkRXZpY3Q6IHJlcGxhY2VtZW50Py5zaG91bGRFdmljdCA/PyBmYWxzZSxcbiAgICByZXBsYWNlbWVudFJlYXNvbjogcmVwbGFjZW1lbnQ/LnByZWZlcmVuY2U/LnJlYXNvbixcbiAgICBmb3JjZWRLaWxsUmVhc29uOiBmb3JjZWRLaWxsPy5yZWFzb24sXG4gICAgZm9yY2VkS2lsbFBpZDogZm9yY2VkS2lsbD8ucGlkLFxuICAgIGZvcmNlZEtpbGxEZXRhaWw6IGZvcmNlZEtpbGw/LmRldGFpbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgZWxlY3RlZExlYWRlcjogQ29uc29sZUxlYWRlckluZm8sXG4gIGRpc2NvdmVyeTogUG9ydExlYWRlckRpc2NvdmVyeSB8IG51bGwsXG4gIHJlcGxhY2VtZW50OiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHwgbnVsbCxcbikge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGVsZWN0ZWRMZWFkZXJQaWQ6IGVsZWN0ZWRMZWFkZXIucGlkLFxuICAgIGVsZWN0ZWRMZWFkZXJTZXNzaW9uSWQ6IGVsZWN0ZWRMZWFkZXIuc2Vzc2lvbklkLFxuICAgIGVsZWN0ZWRMZWFkZXJWZXJzaW9uOiBlbGVjdGVkTGVhZGVyLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGVsZWN0ZWRMZWFkZXJQcm90b2NvbFZlcnNpb246IGVsZWN0ZWRMZWFkZXIuY29uc29sZVByb3RvY29sVmVyc2lvbiA/PyBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gICAgc2VydmluZ093bmVyUGlkOiBkaXNjb3Zlcnk/Lm93bmVyUGlkID8/IG51bGwsXG4gICAgc2VydmluZ1NvdXJjZTogZGlzY292ZXJ5Py5zb3VyY2UgPz8gJ25vbmUnLFxuICAgIHNlcnZpbmdMZWFkZXJQaWQ6IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8ucGlkID8/IG51bGwsXG4gICAgc2VydmluZ0xlYWRlclNlc3Npb25JZDogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5zZXNzaW9uSWQgPz8gbnVsbCxcbiAgICBzZXJ2aW5nTGVhZGVyVmVyc2lvbjogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBzZXJ2aW5nTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBkaXNjb3Zlcnk/LmxlYWRlckluZm8/LmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHJlcGxhY2VtZW50U2hvdWxkRXZpY3Q6IHJlcGxhY2VtZW50Py5zaG91bGRFdmljdCA/PyBmYWxzZSxcbiAgICByZXBsYWNlbWVudFJlYXNvbjogcmVwbGFjZW1lbnQ/LnByZWZlcmVuY2U/LnJlYXNvbiA/PyBudWxsLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5KFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBkZXBzOiBGb2xsb3dlckF1dGhvcml0eURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxGb2xsb3dlckF1dGhvcml0eVJlc29sdXRpb24+IHtcbiAgY29uc3QgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbCA9IGRlcHMuaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbCA/PyBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGU7XG4gIGNvbnN0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsID0gZGVwcy5kaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbCA/PyBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0O1xuICBjb25zdCBmb3JjZUNsYWltTGVhZGVyc2hpcEltcGwgPSBkZXBzLmZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbCA/PyBmb3JjZUNsYWltTGVhZGVyc2hpcDtcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG5cbiAgY29uc3QgcmVhY2hhYmxlID0gYXdhaXQgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbChlbGVjdGlvbi5sZWFkZXJJbmZvKTtcbiAgaWYgKCFyZWFjaGFibGUpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBFbGVjdGVkIGxlYWRlciBpcyBub3Qgc2VydmluZyB0aGUgY29uc29sZSBwb3J0OyBmb3JjaW5nIHRha2VvdmVyJywge1xuICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICAgIGVsZWN0ZWRMZWFkZXJTZXNzaW9uSWQ6IGVsZWN0aW9uLmxlYWRlckluZm8uc2Vzc2lvbklkLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbjogYXdhaXQgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsKHNlc3Npb25JZCwgY29uc29sZVBvcnQpLFxuICAgICAgZGlzY292ZXJ5OiBudWxsLFxuICAgICAgcmVwbGFjZW1lbnQ6IG51bGwsXG4gICAgICBmb3JjZWRDbGFpbTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlTGVhZGVyID0gY3JlYXRlTGVhZGVySW5mbyhzZXNzaW9uSWQsIGNvbnNvbGVQb3J0KTtcbiAgY29uc3QgZGlzY292ZXJ5ID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwoY29uc29sZVBvcnQsIG51bGwpO1xuICBpZiAoIWRpc2NvdmVyeS5sZWFkZXJJbmZvIHx8IGRpc2NvdmVyeS5vd25lclBpZCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbixcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50OiBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoY2FuZGlkYXRlTGVhZGVyLCBkaXNjb3ZlcnkpO1xuICBpZiAocmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QpIHtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgZGlzY292ZXJ5Lm93bmVyUGlkID09PSBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZFxuICAgICAgICA/ICdbVW5pZmllZENvbnNvbGVdIE9sZGVyIGNvbnNvbGUgbGVhZGVyIGRldGVjdGVkIG9uIHRoZSBjb25zb2xlIHBvcnQ7IG5ld2VyIHNlc3Npb24gd2lsbCB0YWtlIG92ZXInXG4gICAgICAgIDogJ1tVbmlmaWVkQ29uc29sZV0gU3BsaXQtYnJhaW4gY29uc29sZSBhdXRob3JpdHkgZGV0ZWN0ZWQ7IG5ld2VyIHNlc3Npb24gd2lsbCByZXBsYWNlIHRoZSBhY3R1YWwgcG9ydCBvd25lcicsXG4gICAgICBidWlsZEF1dGhvcml0eVJlc29sdXRpb25Mb2dDb250ZXh0KFxuICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgZWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgZGlzY292ZXJ5LFxuICAgICAgICByZXBsYWNlbWVudCxcbiAgICAgICksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IHsgcm9sZTogJ2xlYWRlcicsIGxlYWRlckluZm86IGNhbmRpZGF0ZUxlYWRlciB9LFxuICAgICAgZGlzY292ZXJ5LFxuICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRDbGFpbTogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkaXNjb3Zlcnkub3duZXJQaWQgIT09IGVsZWN0aW9uLmxlYWRlckluZm8ucGlkKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gU3BsaXQtYnJhaW4gY29uc29sZSBhdXRob3JpdHkgZGV0ZWN0ZWQ7IGZvbGxvd2luZyB0aGUgYWN0dWFsIHBvcnQgb3duZXInLCBidWlsZEF1dGhvcml0eVJlc29sdXRpb25Mb2dDb250ZXh0KFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBlbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgZGlzY292ZXJ5LFxuICAgICAgcmVwbGFjZW1lbnQsXG4gICAgKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IGRpc2NvdmVyeS5sZWFkZXJJbmZvIH0sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbGVjdGlvbixcbiAgICBkaXNjb3ZlcnksXG4gICAgcmVwbGFjZW1lbnQsXG4gICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRGb2xsb3dlckF1dGhvcml0eU1vbml0b3IoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBwcm9tb3Rpb25NZ3I6IFByb21vdGlvbk1hbmFnZXIsXG4gIGZvcndhcmRpbmdTaW5rOiBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlNb25pdG9yRGVwZW5kZW5jaWVzID0ge30sXG4pOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbCA9IGRlcHMucmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbCA/PyByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHk7XG4gIGNvbnN0IHNldEludGVydmFsSW1wbCA9IGRlcHMuc2V0SW50ZXJ2YWxJbXBsID8/IHNldEludGVydmFsO1xuICBjb25zdCBjbGVhckludGVydmFsSW1wbCA9IGRlcHMuY2xlYXJJbnRlcnZhbEltcGwgPz8gY2xlYXJJbnRlcnZhbDtcbiAgY29uc3Qgbm93SW1wbCA9IGRlcHMubm93SW1wbCA/PyBEYXRlLm5vdztcbiAgbGV0IGN1cnJlbnRFbGVjdGlvbiA9IGVsZWN0aW9uO1xuICBsZXQgY2hlY2tJblByb2dyZXNzID0gZmFsc2U7XG4gIGxldCBwcm9tb3Rpb25RdWV1ZWQgPSBmYWxzZTtcbiAgbGV0IGNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICBsZXQgY2lyY3VpdE9wZW5VbnRpbE1zID0gMDtcbiAgbGV0IGF1dGhvcml0eVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgcmVjaGVja0ludGVydmFsTXMgPSBjb21wdXRlRm9sbG93ZXJBdXRob3JpdHlSZWNoZWNrSW50ZXJ2YWwob3B0aW9ucy5zZXNzaW9uSWQpO1xuXG4gIGNvbnN0IHF1ZXVlQXV0aG9yaXR5UHJvbW90aW9uID0gKCkgPT4ge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHByb21vdGlvbk1nci5wcm9tb3RlKGZvcndhcmRpbmdTaW5rLCBzZXNzaW9uSGVhcnRiZWF0KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbG9nZ2VyLmVycm9yKCdbVW5pZmllZENvbnNvbGVdIEF1dGhvcml0eS1iYXNlZCBwcm9tb3Rpb24gY3Jhc2hlZCcsIHtcbiAgICAgICAgICBlcnJvcjogU3RyaW5nKGVyciksXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNvbHZlZEF1dGhvcml0eSA9IChyZXNvbHZlZDogRm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uKSA9PiB7XG4gICAgY3VycmVudEVsZWN0aW9uID0gcmVzb2x2ZWQuZWxlY3Rpb247XG4gICAgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgY2lyY3VpdE9wZW5VbnRpbE1zID0gMDtcblxuICAgIGlmIChyZXNvbHZlZC5lbGVjdGlvbi5yb2xlICE9PSAnbGVhZGVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21vdGlvblF1ZXVlZCA9IHRydWU7XG4gICAgaWYgKGF1dGhvcml0eVRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsSW1wbChhdXRob3JpdHlUaW1lcik7XG4gICAgICBhdXRob3JpdHlUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgYXV0aG9yaXR5IHJlLWV2YWx1YXRpb24gcXVldWVkIGEgbGVhZGVyIHRha2VvdmVyJywge1xuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgIHN0YWJsZVNlc3Npb25JZDogb3B0aW9ucy5zdGFibGVTZXNzaW9uSWQsXG4gICAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICAgIHJlc29sdmVkTGVhZGVyUGlkOiByZXNvbHZlZC5lbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICAgIHJlc29sdmVkTGVhZGVyU2Vzc2lvbklkOiByZXNvbHZlZC5lbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICAgIHJlcGxhY2VtZW50UmVhc29uOiByZXNvbHZlZC5yZXBsYWNlbWVudD8ucHJlZmVyZW5jZT8ucmVhc29uID8/IG51bGwsXG4gICAgICBmb3JjZWRDbGFpbTogcmVzb2x2ZWQuZm9yY2VkQ2xhaW0sXG4gICAgfSk7XG5cbiAgICBxdWV1ZUF1dGhvcml0eVByb21vdGlvbigpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUF1dGhvcml0eUZhaWx1cmUgPSAoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgY29uc2VjdXRpdmVGYWlsdXJlcyArPSAxO1xuICAgIGlmIChjb25zZWN1dGl2ZUZhaWx1cmVzID49IEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRy5mYWlsdXJlVGhyZXNob2xkKSB7XG4gICAgICBjaXJjdWl0T3BlblVudGlsTXMgPSBub3dJbXBsKCkgKyBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuZmFpbHVyZUNvb2xkb3duTXM7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBhdXRob3JpdHkgcmUtZXZhbHVhdGlvbiBjaXJjdWl0IG9wZW5lZCBhZnRlciByZXBlYXRlZCBmYWlsdXJlcycsIHtcbiAgICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgICBjb25zZWN1dGl2ZUZhaWx1cmVzLFxuICAgICAgICBjaXJjdWl0T3BlblVudGlsTXM6IG5ldyBEYXRlKGNpcmN1aXRPcGVuVW50aWxNcykudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGF1dGhvcml0eSByZS1ldmFsdWF0aW9uIGZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICByZWNoZWNrSW50ZXJ2YWxNcyxcbiAgICAgIGNpcmN1aXRPcGVuVW50aWxNczogY2lyY3VpdE9wZW5VbnRpbE1zID8gbmV3IERhdGUoY2lyY3VpdE9wZW5VbnRpbE1zKS50b0lTT1N0cmluZygpIDogbnVsbCxcbiAgICB9KTtcbiAgfTtcblxuICBhdXRob3JpdHlUaW1lciA9IHNldEludGVydmFsSW1wbCgoKSA9PiB7XG4gICAgaWYgKGNoZWNrSW5Qcm9ncmVzcyB8fCBwcm9tb3Rpb25RdWV1ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2lyY3VpdE9wZW5VbnRpbE1zID4gbm93SW1wbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1aXRPcGVuVW50aWxNcyAhPT0gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgYXV0aG9yaXR5IHJlLWV2YWx1YXRpb24gY2lyY3VpdCBjbG9zZWQ7IHJlc3VtaW5nIGNoZWNrcycsIHtcbiAgICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgfSk7XG4gICAgICBjaXJjdWl0T3BlblVudGlsTXMgPSAwO1xuICAgIH1cblxuICAgIGNoZWNrSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbChvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGN1cnJlbnRFbGVjdGlvbilcbiAgICAgIC50aGVuKGhhbmRsZVJlc29sdmVkQXV0aG9yaXR5KVxuICAgICAgLmNhdGNoKGhhbmRsZUF1dGhvcml0eUZhaWx1cmUpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGNoZWNrSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH0sIHJlY2hlY2tJbnRlcnZhbE1zKTtcbiAgYXV0aG9yaXR5VGltZXIudW5yZWYoKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChhdXRob3JpdHlUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbEltcGwoYXV0aG9yaXR5VGltZXIpO1xuICAgICAgYXV0aG9yaXR5VGltZXIgPSBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXR0ZW1wdEZvcmNlVGFrZW92ZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgY3VycmVudEVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJpbWFyeVRva2VuOiBzdHJpbmcsXG4gIHNlcnZlck9wdHM6IFdlYlNlcnZlck9wdGlvbnMsXG4gIHN0YXJ0V2ViU2VydmVySW1wbDogKG9wdGlvbnM6IFdlYlNlcnZlck9wdGlvbnMpID0+IFByb21pc2U8V2ViU2VydmVyUmVzdWx0Pixcbik6IFByb21pc2U8Rm9yY2VUYWtlb3ZlckF0dGVtcHRSZXN1bHQ+IHtcbiAgY29uc3QgaW5pdGlhbEZhbGxiYWNrID0gYXdhaXQgcmVjb3ZlckxlYWRlckJpbmRGYWlsdXJlKGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLCBjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuKTtcbiAgY29uc3QgaW5pdGlhbFJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgaW5pdGlhbEZhbGxiYWNrKTtcblxuICBpZiAoIWluaXRpYWxSZXBsYWNlbWVudC5zaG91bGRFdmljdCB8fCBpbml0aWFsUmVwbGFjZW1lbnQub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogaW5pdGlhbEZhbGxiYWNrLFxuICAgICAgcmVwbGFjZW1lbnQ6IGluaXRpYWxSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGw6IG51bGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogZmFsc2UsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXRlc3RGYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQoY29uc29sZVBvcnQsIHByaW1hcnlUb2tlbik7XG4gIGNvbnN0IGxhdGVzdFJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgbGF0ZXN0RmFsbGJhY2spO1xuICBpZiAoIWxhdGVzdFJlcGxhY2VtZW50LnNob3VsZEV2aWN0IHx8IGxhdGVzdFJlcGxhY2VtZW50Lm93bmVyUGlkID09PSBudWxsKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRm9yY2VkIHRha2VvdmVyIHRhcmdldCBjaGFuZ2VkIGJlZm9yZSBldmljdGlvbjsgc2tpcHBpbmcgZm9yY2VkIGtpbGwnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICApLFxuICAgICAgcHJldmlvdXNPd25lclBpZDogaW5pdGlhbFJlcGxhY2VtZW50Lm93bmVyUGlkLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB3ZWJSZXN1bHQ6IHsgYmluZFJlc3VsdDogeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSB9LFxuICAgICAgZWxlY3Rpb246IGN1cnJlbnRFbGVjdGlvbixcbiAgICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGw6IG51bGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogZmFsc2UsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBBdHRlbXB0aW5nIGZvcmNlZCB0YWtlb3ZlciBmcm9tIG9sZGVyIG9yIGluY29tcGF0aWJsZSBhY3RpdmUgbGVhZGVyJywge1xuICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0sXG4gICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICksXG4gIH0pO1xuXG4gIGNvbnN0IGZvcmNlZEtpbGwgPSBhd2FpdCBraWxsU3RhbGVQcm9jZXNzRGV0YWlsZWQobGF0ZXN0UmVwbGFjZW1lbnQub3duZXJQaWQsIGNvbnNvbGVQb3J0LCB7XG4gICAgYWxsb3dBY3RpdmVIb3N0UGFyZW50OiB0cnVlLFxuICB9KTtcbiAgaWYgKCFmb3JjZWRLaWxsLmtpbGxlZCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBza2lwcGVkIG9yIGZhaWxlZCBhZnRlciBpZGVudGlmeWluZyByZXBsYWNlYWJsZSBsZWFkZXInLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgIGZvcmNlZEtpbGwsXG4gICAgICApLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB3ZWJSZXN1bHQ6IHsgYmluZFJlc3VsdDogeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSB9LFxuICAgICAgZWxlY3Rpb246IGN1cnJlbnRFbGVjdGlvbixcbiAgICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlYm91bmRXZWJSZXN1bHQgPSBhd2FpdCBzdGFydFdlYlNlcnZlckltcGwoc2VydmVyT3B0cyk7XG4gIGxldCByZWJvdW5kRWxlY3Rpb24gPSBjdXJyZW50RWxlY3Rpb247XG4gIGxldCByZWJvdW5kTG9ja0NsYWltZWQgPSBmYWxzZTtcblxuICBpZiAoIXJlYm91bmRXZWJSZXN1bHQuYmluZFJlc3VsdCB8fCByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHJlYm91bmRMZWFkZXJJbmZvID0gY3JlYXRlTGVhZGVySW5mbyhvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuICAgIHJlYm91bmRMb2NrQ2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChyZWJvdW5kTGVhZGVySW5mbyk7XG4gICAgaWYgKCFyZWJvdW5kTG9ja0NsYWltZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFJlYm91bmQgbGVhZGVyIGJvdW5kIHBvcnQgYnV0IGNvdWxkIG5vdCBpbW1lZGlhdGVseSByZS1jbGFpbSBsb2NrJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICByZWJvdW5kTGVhZGVySW5mbyxcbiAgICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZWJvdW5kRWxlY3Rpb24gPSB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiByZWJvdW5kTGVhZGVySW5mbyB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBraWxsZWQgb2xkIGxlYWRlciBidXQgYmluZCByZXRyeSBzdGlsbCBmYWlsZWQnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdlYlJlc3VsdDogcmVib3VuZFdlYlJlc3VsdCxcbiAgICBlbGVjdGlvbjogcmVib3VuZEVsZWN0aW9uLFxuICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgZm9yY2VkS2lsbCxcbiAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICByZWJvdW5kTG9ja0NsYWltZWQsXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICAvLyBSZXNvbHZlIHBvcnQ6IG9wdGlvbnMgKGNvbmZpZyBmaWxlKSDihpIgZW52IHZhciDihpIgZGVmYXVsdFxuICBjb25zdCBjb25zb2xlUG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX0NPTlNPTEVfUE9SVDtcbiAgbG9nZ2VyLmRlYnVnKGBbVW5pZmllZENvbnNvbGVdIFBvcnQgcmVzb2x2ZWQ6ICR7Y29uc29sZVBvcnR9YCArXG4gICAgKG9wdGlvbnMucG9ydCA/ICcgKGZyb20gY29uZmlnIGZpbGUpJyA6IGAgKGZyb20gZW52L2RlZmF1bHQpYCkpO1xuXG4gIC8vIExlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uICgjMTc5NCkg4oCUIHdhcm4gdGhlIHVzZXIgaWYgYSBwcmUtYXV0aFxuICAvLyBEb2xsaG91c2VNQ1AgY29uc29sZSBpcyBydW5uaW5nIGFsb25nc2lkZSB0aGlzIGF1dGhlbnRpY2F0ZWQgb25lLlxuICAvLyBUaGV5IHdpbGwgY29leGlzdCBmaW5lIGJlY2F1c2Ugb2YgcG9ydCArIGxvY2sgKyB0b2tlbiBmaWxlIGlzb2xhdGlvbixcbiAgLy8gYnV0IHRoZSB1c2VyIHNob3VsZCBrbm93IGJvdGggZXhpc3Qgc28gdGhlIGRpZmZlcmluZyBzZWN1cml0eSBwb3N0dXJlXG4gIC8vIGJldHdlZW4gdGhlbSBkb2Vzbid0IGxvb2sgbGlrZSBhIGJ1Zy5cbiAgYXdhaXQgd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoY29uc29sZVBvcnQpO1xuXG4gIGxldCBlbGVjdGlvbiA9IGF3YWl0IGVsZWN0TGVhZGVyKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdmb2xsb3dlcicpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGVsZWN0aW9uKTtcbiAgICBlbGVjdGlvbiA9IHJlc29sdmVkLmVsZWN0aW9uO1xuICB9XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdsZWFkZXInKSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNMZWFkZXIob3B0aW9ucywgZWxlY3Rpb24sIGNvbnNvbGVQb3J0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGVsZWN0aW9uLCBjb25zb2xlUG9ydCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhcyB0aGUgY29uc29sZSBsZWFkZXIuXG4gKiBCaW5kcyB0aGUgcmVzb2x2ZWQgY29uc29sZSBwb3J0IChjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCksXG4gKiBtb3VudHMgYWxsIHJvdXRlcyBpbmNsdWRpbmcgaW5nZXN0aW9uLCBzdGFydHMgaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzTGVhZGVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlciA9IERFRkFVTFRfQ09OU09MRV9QT1JULFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZlci5qcycpO1xuICBjb25zdCB7IHBpY2tSYW5kb21Ub2tlbk5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9TZXNzaW9uTmFtZXMuanMnKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBjb25zb2xlIHRva2VuIHN0b3JlICgjMTc4MCkuIENyZWF0ZXMgdGhlIHRva2VuIGZpbGUgb25cbiAgLy8gZmlyc3QgcnVuLCByZWFkcyB0aGUgZXhpc3RpbmcgdG9rZW5zIG9uIHN1YnNlcXVlbnQgcnVucy4gVGhlIHRva2VuIGlzXG4gIC8vIHBlcnNpc3RlbnQgYWNyb3NzIHJlc3RhcnRzIOKAlCBvbmx5IHJvdGF0ZWQgb24gZXhwbGljaXQgcmVxdWVzdCAoUGhhc2UgMikuXG4gIC8vIEZlYXR1cmUgZmxhZyBET0xMSE9VU0VfV0VCX0FVVEhfRU5BQkxFRCBjb250cm9scyBlbmZvcmNlbWVudDsgdGhlIGZpbGVcbiAgLy8gaXMgZ2VuZXJhdGVkIHJlZ2FyZGxlc3Mgc28gY29uc3VtZXJzIGNhbiBhdHRhY2ggdG9rZW5zIHByZWVtcHRpdmVseS5cbiAgY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBDb25zb2xlVG9rZW5TdG9yZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIGNvbnN0IHByaW1hcnlUb2tlbiA9IGF3YWl0IHRva2VuU3RvcmUuZW5zdXJlSW5pdGlhbGl6ZWQocGlja1JhbmRvbVRva2VuTmFtZSgpKTtcbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gQ29uc29sZSB0b2tlbiBzdG9yZSBpbml0aWFsaXplZCcsIHtcbiAgICB0b2tlbklkOiBwcmltYXJ5VG9rZW4uaWQsXG4gICAgdG9rZW5OYW1lOiBwcmltYXJ5VG9rZW4ubmFtZSxcbiAgICBmaWxlOiB0b2tlblN0b3JlLmdldEZpbGVQYXRoKCksXG4gICAgYXV0aEVuZm9yY2VkOiBlbnYuRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQsXG4gIH0pO1xuXG4gIC8vIFByZS1jcmVhdGUgYSBwbGFjZWhvbGRlciBicm9hZGNhc3QgdGhhdCB3ZSdsbCB3aXJlIHVwIGFmdGVyIHRoZSBzZXJ2ZXIgc3RhcnRzXG4gIGxldCBsaXZlQnJvYWRjYXN0OiAoKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgbGl2ZU1ldHJpY3NPblNuYXBzaG90OiAoKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgLy8gQ3JlYXRlIGluZ2VzdGlvbiByb3V0ZXMgd2l0aCBhIGRlZmVycmVkIGJyb2FkY2FzdCAod2lyZWQgYWZ0ZXIgc2VydmVyIHN0YXJ0cylcbiAgY29uc3QgaW5nZXN0UmVzdWx0ID0gY3JlYXRlSW5nZXN0Um91dGVzKHtcbiAgICBsb2dCcm9hZGNhc3Q6IChlbnRyeSkgPT4gbGl2ZUJyb2FkY2FzdD8uKGVudHJ5KSxcbiAgICBtZXRyaWNzT25TbmFwc2hvdDogKHNuYXBzaG90KSA9PiBsaXZlTWV0cmljc09uU25hcHNob3Q/LihzbmFwc2hvdCksXG4gICAgc3RvcmVNZXRyaWNzU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gb3B0aW9ucy5tZXRyaWNzU2luaz8ub25TbmFwc2hvdChzbmFwc2hvdCksXG4gIH0pO1xuXG4gIC8vIFN0YXJ0IHRoZSB3ZWIgc2VydmVyIHdpdGggaW5nZXN0IHJvdXRlcyBtb3VudGVkIGJlZm9yZSB0aGUgU1BBIGZhbGxiYWNrLlxuICAvLyBJZiB0aGUgcG9ydCBpcyBvY2N1cGllZCBieSBhIHN0YWxlIHByb2Nlc3MsIHJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAgY29uc3Qgc2VydmVyT3B0cyA9IHtcbiAgICBwb3J0Zm9saW9EaXI6IG9wdGlvbnMucG9ydGZvbGlvRGlyLFxuICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICBtZXRyaWNzU2luazogb3B0aW9ucy5tZXRyaWNzU2luayxcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc3RhYmxlU2Vzc2lvbklkLFxuICAgIHJ1bnRpbWVTZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgIGFkZGl0aW9uYWxSb3V0ZXJzOiBbaW5nZXN0UmVzdWx0LnJvdXRlcl0sXG4gICAgdG9rZW5TdG9yZSxcbiAgICAuLi4ob3B0aW9ucy5tY3BBcWxIYW5kbGVyID8geyBtY3BBcWxIYW5kbGVyOiBvcHRpb25zLm1jcEFxbEhhbmRsZXIgfSA6IHt9KSxcbiAgfTtcbiAgLy8gYmluZEFuZExpc3RlbiBub3cgaGFuZGxlcyBFQUREUklOVVNFIGJ5IGZpbmRpbmcgYW5kIGtpbGxpbmcgdGhlIHN0YWxlXG4gIC8vIHByb2Nlc3Mgb24gdGhlIHBvcnQsIHRoZW4gcmV0cnlpbmcuIE5vIGV4dGVybmFsIHJldHJ5IGxvb3AgbmVlZGVkLlxuICBsZXQgd2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoc2VydmVyT3B0cyk7XG5cbiAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9yY2VUYWtlb3ZlciA9IGF3YWl0IGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGVsZWN0aW9uLFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBwcmltYXJ5VG9rZW4udG9rZW4sXG4gICAgICBzZXJ2ZXJPcHRzLFxuICAgICAgc3RhcnRXZWJTZXJ2ZXIsXG4gICAgKTtcbiAgICB3ZWJSZXN1bHQgPSBmb3JjZVRha2VvdmVyLndlYlJlc3VsdDtcbiAgICBlbGVjdGlvbiA9IGZvcmNlVGFrZW92ZXIuZWxlY3Rpb247XG5cbiAgICBpZiAod2ViUmVzdWx0LmJpbmRSZXN1bHQgJiYgIXdlYlJlc3VsdC5iaW5kUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGlmIChmb3JjZVRha2VvdmVyLmZhbGxiYWNrLmxlYWRlckluZm8pIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciByb2xlIGFib3J0ZWQ6IGJpbmQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZm9sbG93ZXInLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLmZhbGxiYWNrLnNvdXJjZSAhPT0gJ25vbmUnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmb2xsb3dlckVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCA9IHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5sZWFkZXJJbmZvIH07XG4gICAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGZvbGxvd2VyRWxlY3Rpb24sIGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4udG9rZW4pO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGZhaWxlZCB0byBiaW5kIGFuZCBubyBhY3RpdmUgbGVhZGVyIGNvdWxkIGJlIGlkZW50aWZpZWQnLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGVhZGVyIGZhaWxlZCB0byBiaW5kIHBvcnQgJHtjb25zb2xlUG9ydH0gYW5kIG5vIGFjdGl2ZSBsZWFkZXIgd2FzIGRpc2NvdmVyYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIHRoZSBsZWFkZXIgb25seSBhZnRlciB0aGUgSFRUUCBsaXN0ZW5lciBpcyBhY3R1YWxseSBzZXJ2aW5nIHRoZSBwb3J0LlxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJMZWFkZXJTZXNzaW9uKG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCk7XG5cbiAgLy8gUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBzbyB0aGUgc2Vzc2lvbiBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KVxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJDb25zb2xlU2Vzc2lvbigpO1xuXG4gIC8vIFdpcmUgU1NFIGJyb2FkY2FzdHMgZm9yIHRoaXMgbGVhZGVyJ3Mgb3duIGV2ZW50c1xuICBvcHRpb25zLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgb3B0aW9ucy5tZXRyaWNzU2luayk7XG5cbiAgLy8gTm93IHdpcmUgdGhlIGxpdmUgYnJvYWRjYXN0IGZ1bmN0aW9ucyBpbnRvIHRoZSBpbmdlc3Qgcm91dGVzXG4gIGlmICh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxCcm9hZGNhc3QgPSB3ZWJSZXN1bHQubG9nQnJvYWRjYXN0O1xuICAgIC8vIFN0YW1wIGxlYWRlcidzIG93biBlbnRyaWVzIHdpdGggc2Vzc2lvbiBJRFxuICAgIGxpdmVCcm9hZGNhc3QgPSAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4ge1xuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIG9yaWdpbmFsQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgIH07XG4gIH1cbiAgbGl2ZU1ldHJpY3NPblNuYXBzaG90ID0gd2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90O1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEluZ2VzdGlvbiByb3V0ZXMgbW91bnRlZCcpO1xuXG4gIC8vIFN0YXJ0IGhlYXJ0YmVhdCBhbmQgcmVnaXN0ZXIgY2xlYW51cFxuICBjb25zdCBzdG9wSGVhcnRiZWF0ID0gc3RhcnRIZWFydGJlYXQoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBvcnQ6IGNvbnNvbGVQb3J0LCBwaWQ6IHByb2Nlc3MucGlkLFxuICAgIHJvbGU6ICdsZWFkZXInLCBpbmdlc3RSb3V0ZXM6IFsnL2FwaS9pbmdlc3QvbG9ncycsICcvYXBpL2luZ2VzdC9tZXRyaWNzJywgJy9hcGkvaW5nZXN0L3Nlc3Npb24nLCAnL2FwaS9zZXNzaW9ucyddLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHJvbGU6ICdsZWFkZXInLFxuICAgIGVsZWN0aW9uLFxuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGNsZWFudXA6IGFzeW5jICgpID0+IHtcbiAgICAgIHN0b3BIZWFydGJlYXQoKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IGFzIGEgZm9sbG93ZXIuXG4gKiBSZWdpc3RlcnMgZm9yd2FyZGluZyBzaW5rcyB3aXRoIHRoZSBMb2dNYW5hZ2VyLCBzdGFydHMgc2Vzc2lvbiBoZWFydGJlYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QXNGb2xsb3dlcihcbiAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIgPSBERUZBVUxUX0NPTlNPTEVfUE9SVCxcbiAgaW5pdGlhbEF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4pOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IGxlYWRlclVybCA9IGBodHRwOi8vMTI3LjAuMC4xOiR7ZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0fWA7XG5cbiAgLy8gUmVhZCB0aGUgY29uc29sZSBhdXRoIHRva2VuICgjMTc4MCkgd3JpdHRlbiBieSB0aGUgbGVhZGVyLiBNYXkgYmUgbnVsbFxuICAvLyBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldCDigJQgdGhlIHNpbmtzIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHkgYW5kXG4gIC8vIHNpbXBseSBvbWl0IHRoZSBCZWFyZXIgaGVhZGVyLCB3aGljaCBpcyBmaW5lIHdoZW4gYXV0aCBpcyBub3QgZW5mb3JjZWQuXG4gIGxldCBhdXRoVG9rZW4gPSBpbml0aWFsQXV0aFRva2VuO1xuICBpZiAoYXV0aFRva2VuID09PSBudWxsKSB7XG4gICAgY29uc3QgeyBnZXRQcmltYXJ5VG9rZW5Gcm9tRmlsZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbnNvbGVUb2tlbi5qcycpO1xuICAgIGF1dGhUb2tlbiA9IGF3YWl0IGdldFByaW1hcnlUb2tlbkZyb21GaWxlKGVudi5ET0xMSE9VU0VfQ09OU09MRV9UT0tFTl9GSUxFKTtcbiAgfVxuICBpZiAoYXV0aFRva2VuKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGxvYWRlZCBjb25zb2xlIGF1dGggdG9rZW4nKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTm8gY29uc29sZSBhdXRoIHRva2VuIGZpbGUgZm91bmQ7IGZvbGxvd2VyIHdpbGwgUE9TVCB3aXRob3V0IEJlYXJlciBoZWFkZXInKTtcbiAgfVxuXG4gIC8vIFBlci1pbnN0YW5jZSBwcm9tb3Rpb24gbWFuYWdlciDigJQgdHJhY2tzIGl0cyBvd24gYXR0ZW1wdCBjb3VudGVyIHNvXG4gIC8vIG11bHRpcGxlIGZvbGxvd2VycyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyJ3MgcHJvbW90aW9uIGJ1ZGdldHMuXG4gIGNvbnN0IHByb21vdGlvbk1nciA9IG5ldyBQcm9tb3Rpb25NYW5hZ2VyKG9wdGlvbnMsIGNvbnNvbGVQb3J0LCBzdGFydEFzTGVhZGVyLCBzdGFydEFzRm9sbG93ZXIpO1xuXG4gIC8vIERlY2xhcmUgc2Vzc2lvbkhlYXJ0YmVhdCBiZWZvcmUgdGhlIHNpbmsgc28gdGhlIGNsb3N1cmUgY2FuIGNhcHR1cmUgaXQuXG4gIC8vIEJvdGggYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgY291bGQgcG9zc2libHkgZmlyZSAobmVlZHMgNSsgZmFpbGVkIGZsdXNoZXMpLlxuICBsZXQgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdDtcblxuICAvLyBSZWdpc3RlciBhIGZvcndhcmRpbmcgbG9nIHNpbmsgd2l0aCBsZWFkZXItZGVhdGggY2FsbGJhY2sgKCMxODUwKS5cbiAgY29uc3QgZm9yd2FyZGluZ1NpbmsgPSBuZXcgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmsobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgYXV0aFRva2VuLCAoKSA9PiB7XG4gICAgcHJvbW90aW9uTWdyLnByb21vdGUoZm9yd2FyZGluZ1NpbmssIHNlc3Npb25IZWFydGJlYXQpXG4gICAgICAuY2F0Y2goZXJyID0+IGxvZ2dlci5lcnJvcignW1VuaWZpZWRDb25zb2xlXSBQcm9tb3Rpb24gY3Jhc2hlZCcsIHsgZXJyb3I6IFN0cmluZyhlcnIpIH0pKTtcbiAgfSk7XG4gIG9wdGlvbnMucmVnaXN0ZXJMb2dTaW5rKGZvcndhcmRpbmdTaW5rKTtcblxuICAvLyBTdGFydCBzZXNzaW9uIGhlYXJ0YmVhdCB0byB0aGUgbGVhZGVyXG4gIHNlc3Npb25IZWFydGJlYXQgPSBuZXcgU2Vzc2lvbkhlYXJ0YmVhdChsZWFkZXJVcmwsIG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCwgYXV0aFRva2VuKTtcbiAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdGFydCgpO1xuXG4gIGNvbnN0IHN0b3BBdXRob3JpdHlNb25pdG9yID0gc3RhcnRGb2xsb3dlckF1dGhvcml0eU1vbml0b3IoXG4gICAgb3B0aW9ucyxcbiAgICBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGlvbixcbiAgICBwcm9tb3Rpb25NZ3IsXG4gICAgZm9yd2FyZGluZ1NpbmssXG4gICAgc2Vzc2lvbkhlYXJ0YmVhdCxcbiAgKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBpZDogcHJvY2Vzcy5waWQsIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgbGVhZGVyU2Vzc2lvbjogZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsIGxlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgbGVhZGVyUG9ydDogZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0LCBsZWFkZXJVcmwsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBlbGVjdGlvbixcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBzdG9wQXV0aG9yaXR5TW9uaXRvcigpO1xuICAgICAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdG9wKCk7XG4gICAgICBhd2FpdCBmb3J3YXJkaW5nU2luay5jbG9zZSgpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "2.0.27-rc.
|
|
3
|
+
"version": "2.0.27-rc.4",
|
|
4
4
|
"description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/server.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "io.github.DollhouseMCP/mcp-server",
|
|
4
4
|
"title": "DollhouseMCP",
|
|
5
5
|
"description": "OSS to create Personas, Skills, Templates, Agents, and Memories to customize your AI experience.",
|
|
6
|
-
"version": "2.0.27-rc.
|
|
6
|
+
"version": "2.0.27-rc.4",
|
|
7
7
|
"homepage": "https://dollhousemcp.com",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
{
|
|
30
30
|
"registryType": "npm",
|
|
31
31
|
"identifier": "@dollhousemcp/mcp-server",
|
|
32
|
-
"version": "2.0.27-rc.
|
|
32
|
+
"version": "2.0.27-rc.4",
|
|
33
33
|
"transport": {
|
|
34
34
|
"type": "stdio"
|
|
35
35
|
}
|