@aws-cdk/aws-bedrock-agentcore-alpha 2.235.0-alpha.0 → 2.236.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +1114 -520
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +19 -1
- package/README.md +146 -10
- package/lib/gateway/gateway-base.d.ts +2 -2
- package/lib/gateway/gateway-base.js +4 -4
- package/lib/gateway/gateway.d.ts +59 -7
- package/lib/gateway/gateway.js +103 -7
- package/lib/gateway/inbound-auth/authorizer.js +3 -3
- package/lib/gateway/interceptor.d.ts +137 -0
- package/lib/gateway/interceptor.js +143 -0
- package/lib/gateway/outbound-auth/api-key.js +1 -1
- package/lib/gateway/outbound-auth/credential-provider.js +1 -1
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.js +4 -4
- package/lib/gateway/targets/schema/tool-schema.js +4 -4
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.js +5 -5
- package/lib/gateway/targets/target.d.ts +2 -1
- package/lib/gateway/targets/target.js +11 -4
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/memory/memory-strategy.d.ts +19 -0
- package/lib/memory/memory-strategy.js +41 -2
- package/lib/memory/memory.d.ts +5 -4
- package/lib/memory/memory.js +16 -9
- package/lib/memory/strategies/managed-strategy.d.ts +26 -0
- package/lib/memory/strategies/managed-strategy.js +46 -4
- package/lib/memory/strategies/self-managed-strategy.js +1 -1
- package/lib/network/network-configuration.js +4 -4
- package/lib/runtime/runtime-artifact.js +1 -1
- package/lib/runtime/runtime-authorizer-configuration.js +1 -1
- package/lib/runtime/runtime-base.d.ts +2 -2
- package/lib/runtime/runtime-base.js +4 -4
- package/lib/runtime/runtime-endpoint-base.d.ts +2 -2
- package/lib/runtime/runtime-endpoint-base.js +4 -4
- package/lib/runtime/runtime-endpoint.d.ts +2 -1
- package/lib/runtime/runtime-endpoint.js +11 -4
- package/lib/runtime/runtime.d.ts +2 -1
- package/lib/runtime/runtime.js +11 -4
- package/lib/tools/browser.d.ts +5 -5
- package/lib/tools/browser.js +22 -14
- package/lib/tools/code-interpreter.d.ts +5 -5
- package/lib/tools/code-interpreter.js +16 -8
- package/package.json +19 -11
|
@@ -37,6 +37,10 @@ var MemoryStrategyType;
|
|
|
37
37
|
* User preferences strategy - extracts user behavior patterns from raw conversations.
|
|
38
38
|
*/
|
|
39
39
|
MemoryStrategyType["USER_PREFERENCE"] = "USER_PREFERENCE";
|
|
40
|
+
/**
|
|
41
|
+
* Episodic memory strategy - captures meaningful slices of user and system interactions
|
|
42
|
+
*/
|
|
43
|
+
MemoryStrategyType["EPISODIC"] = "EPISODIC";
|
|
40
44
|
/**
|
|
41
45
|
* Customize memory processing through custom foundation model and prompt templates.
|
|
42
46
|
*/
|
|
@@ -53,7 +57,7 @@ var MemoryStrategyType;
|
|
|
53
57
|
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-strategies.html
|
|
54
58
|
*/
|
|
55
59
|
class MemoryStrategy {
|
|
56
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryStrategy", version: "2.
|
|
60
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryStrategy", version: "2.236.0-alpha.0" };
|
|
57
61
|
/**
|
|
58
62
|
* Default strategies for organizing and extracting memory data, each optimized for specific use cases.
|
|
59
63
|
* This strategy compresses conversations into concise overviews, preserving essential context and key insights for quick recall.
|
|
@@ -93,6 +97,22 @@ class MemoryStrategy {
|
|
|
93
97
|
namespaces: ['/strategies/{memoryStrategyId}/actors/{actorId}'],
|
|
94
98
|
});
|
|
95
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Default strategies for organizing and extracting memory data, each optimized for specific use cases.
|
|
102
|
+
* Captures meaningful slices of user and system interactions, preserve them into compact records after summarizing.
|
|
103
|
+
* Extracted memory example: User first asked about pricing on Monday, then requested feature comparison on Tuesday, finally made purchase decision on Wednesday.
|
|
104
|
+
* @returns A ManagedMemoryStrategy.
|
|
105
|
+
*/
|
|
106
|
+
static usingBuiltInEpisodic() {
|
|
107
|
+
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.EPISODIC, {
|
|
108
|
+
name: 'episodic_builtin_cdkGen0001',
|
|
109
|
+
description: 'Captures meaningful slices of user and system interactions.',
|
|
110
|
+
namespaces: ['/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}'],
|
|
111
|
+
reflectionConfiguration: {
|
|
112
|
+
namespaces: ['/strategy/{memoryStrategyId}/actor/{actorId}'],
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
}
|
|
96
116
|
/**
|
|
97
117
|
* Creates a semantic memory strategy with custom configuration.
|
|
98
118
|
* Distills general facts, concepts, and underlying meanings from raw conversational data, presenting the information in a context-independent format.
|
|
@@ -150,6 +170,25 @@ class MemoryStrategy {
|
|
|
150
170
|
}
|
|
151
171
|
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.SUMMARIZATION, config);
|
|
152
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Creates an episodic memory strategy with custom configuration.
|
|
175
|
+
* Captures meaningful slices of user and system interactions, preserve them into compact records after summarizing.
|
|
176
|
+
* Extracted memory example: User first asked about pricing on Monday, then requested feature comparison on Tuesday, finally made purchase decision on Wednesday.
|
|
177
|
+
* @param config - The configuration for the episodic memory strategy.
|
|
178
|
+
* @returns A ManagedMemoryStrategy.
|
|
179
|
+
*/
|
|
180
|
+
static usingEpisodic(config) {
|
|
181
|
+
try {
|
|
182
|
+
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ManagedStrategyProps(config);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
186
|
+
Error.captureStackTrace(error, this.usingEpisodic);
|
|
187
|
+
}
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
190
|
+
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.EPISODIC, config);
|
|
191
|
+
}
|
|
153
192
|
/**
|
|
154
193
|
* Creates a self-managed memory strategy.
|
|
155
194
|
* A self-managed strategy gives you complete control over your memory extraction and consolidation pipelines.
|
|
@@ -171,4 +210,4 @@ class MemoryStrategy {
|
|
|
171
210
|
}
|
|
172
211
|
}
|
|
173
212
|
exports.MemoryStrategy = MemoryStrategy;
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZUEsZ0JBQWdCO0FBQ2hCLG9FQUE0RjtBQUM1Riw4RUFBeUc7QUFFekc7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUN4Qzs7O0dBR0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUV6Qzs7R0FFRztBQUNILElBQVksa0JBa0JYO0FBbEJELFdBQVksa0JBQWtCO0lBQzVCOztPQUVHO0lBQ0gscURBQStCLENBQUE7SUFDL0I7OztPQUdHO0lBQ0gsMkNBQXFCLENBQUE7SUFDckI7O09BRUc7SUFDSCx5REFBbUMsQ0FBQTtJQUNuQzs7T0FFRztJQUNILHVDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFsQlcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUFrQjdCO0FBbUREOzsrRUFFK0U7QUFDL0U7Ozs7OztHQU1HO0FBQ0gsTUFBYSxjQUFjOztJQUN6Qjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyx5QkFBeUI7UUFDckMsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRTtZQUNqRSxJQUFJLEVBQUUsNEJBQTRCO1lBQ2xDLFdBQVcsRUFBRSxzRUFBc0U7WUFDbkYsVUFBVSxFQUFFLENBQUMsc0VBQXNFLENBQUM7U0FDckYsQ0FBQyxDQUFDO0tBQ0o7SUFDRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0I7UUFDaEMsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtZQUM1RCxJQUFJLEVBQUUsNkJBQTZCO1lBQ25DLFdBQVcsRUFDWCxrSEFBa0g7WUFDbEgsVUFBVSxFQUFFLENBQUMsaURBQWlELENBQUM7U0FDaEUsQ0FBQyxDQUFDO0tBQ0o7SUFDRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQywwQkFBMEI7UUFDdEMsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRTtZQUNuRSxJQUFJLEVBQUUsK0JBQStCO1lBQ3JDLFdBQVcsRUFBRSxnSEFBZ0g7WUFDN0gsVUFBVSxFQUFFLENBQUMsaURBQWlELENBQUM7U0FDaEUsQ0FBQyxDQUFDO0tBQ0o7SUFDRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQTRCOzs7Ozs7Ozs7O1FBQ3RELE9BQU8sSUFBSSx3Q0FBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDdkU7SUFDRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBNEI7Ozs7Ozs7Ozs7UUFDNUQsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM5RTtJQUNEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUE0Qjs7Ozs7Ozs7OztRQUMzRCxPQUFPLElBQUksd0NBQXFCLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzVFO0lBQ0Q7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBZ0M7Ozs7Ozs7Ozs7UUFDN0Qsd0RBQXdEO1FBQ3hELE9BQU8sSUFBSSxpREFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDekU7O0FBaEZILHdDQWlGQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuLy8gSW50ZXJuYWwgbGlic1xuaW1wb3J0IHsgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LCBNYW5hZ2VkU3RyYXRlZ3lQcm9wcyB9IGZyb20gJy4vc3RyYXRlZ2llcy9tYW5hZ2VkLXN0cmF0ZWd5JztcbmltcG9ydCB7IFNlbGZNYW5hZ2VkTWVtb3J5U3RyYXRlZ3ksIFNlbGZNYW5hZ2VkU3RyYXRlZ3lQcm9wcyB9IGZyb20gJy4vc3RyYXRlZ2llcy9zZWxmLW1hbmFnZWQtc3RyYXRlZ3knO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBNaW5pbXVtIGxlbmd0aCBmb3IgbWVtb3J5IHN0cmF0ZWd5IG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTUVNT1JZX05BTUVfTUlOX0xFTkdUSCA9IDE7XG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBtZW1vcnkgc3RyYXRlZ3kgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBNRU1PUllfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5cbi8qKlxuICogTG9uZy10ZXJtIG1lbW9yeSBleHRyYWN0aW9uIHN0cmF0ZWd5IHR5cGVzLlxuICovXG5leHBvcnQgZW51bSBNZW1vcnlTdHJhdGVneVR5cGUge1xuICAvKipcbiAgICogU3VtbWFyaXphdGlvbiBzdHJhdGVneSAtIGV4dHJhY3RzIGNvbmNpc2Ugc3VtbWFyaWVzIHRvIHByZXNlcnZlIGNyaXRpY2FsIGNvbnRleHQgYW5kIGtleSBpbnNpZ2h0c1xuICAgKi9cbiAgU1VNTUFSSVpBVElPTiA9ICdTVU1NQVJJWkFUSU9OJyxcbiAgLyoqXG4gICAqIFNlbWFudGljIG1lbW9yeSBzdHJhdGVneSAtIGV4dHJhY3RzIGdlbmVyYWwgZmFjdHVhbCBrbm93bGVkZ2UsIGNvbmNlcHRzIGFuZCBtZWFuaW5ncyBmcm9tIHJhdyBjb252ZXJzYXRpb25zXG4gICAqIHVzaW5nIHZlY3RvciBlbWJlZGRpbmdzIGZvciBzaW1pbGFyaXR5IHNlYXJjaC5cbiAgICovXG4gIFNFTUFOVElDID0gJ1NFTUFOVElDJyxcbiAgLyoqXG4gICAqIFVzZXIgcHJlZmVyZW5jZXMgc3RyYXRlZ3kgLSBleHRyYWN0cyB1c2VyIGJlaGF2aW9yIHBhdHRlcm5zIGZyb20gcmF3IGNvbnZlcnNhdGlvbnMuXG4gICAqL1xuICBVU0VSX1BSRUZFUkVOQ0UgPSAnVVNFUl9QUkVGRVJFTkNFJyxcbiAgLyoqXG4gICAqIEN1c3RvbWl6ZSBtZW1vcnkgcHJvY2Vzc2luZyB0aHJvdWdoIGN1c3RvbSBmb3VuZGF0aW9uIG1vZGVsIGFuZCBwcm9tcHQgdGVtcGxhdGVzLlxuICAgKi9cbiAgQ1VTVE9NID0gJ0NVU1RPTScsXG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBjb21tb24gZm9yIGFueSBtZW1vcnkgc3RyYXRlZ3lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlTdHJhdGVneUNvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIGZvciB0aGUgc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RyYXRlZ3lcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEludGVyZmFjZSBmb3IgTWVtb3J5IHN0cmF0ZWdpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWVtb3J5U3RyYXRlZ3kge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBtZW1vcnkgc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbWVtb3J5IHN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBzdHJhdGVneVR5cGU6IE1lbW9yeVN0cmF0ZWd5VHlwZTtcbiAgLyoqXG4gICAqIFJlbmRlcnMgaW50ZXJuYWwgYXR0cmlidXRlcyB0byBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcmVuZGVyKCk6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuTWVtb3J5Lk1lbW9yeVN0cmF0ZWd5UHJvcGVydHk7XG4gIC8qKlxuICAgKiBHcmFudHMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byB0aGUgcm9sZVxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBncmFudGVlIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqIEByZXR1cm5zIFRoZSBHcmFudCBvYmplY3QgZm9yIGNoYWluaW5nXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWN0b3J5XG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIG1lbW9yeSBzdHJhdGVnaWVzXG4gKiBJZiB5b3UgbmVlZCBsb25nLXRlcm0gbWVtb3J5IGZvciBjb250ZXh0IHJlY2FsbCBhY3Jvc3Mgc2Vzc2lvbnMsIHlvdSBjYW4gc2V0dXAgbWVtb3J5IGV4dHJhY3Rpb24gc3RyYXRlZ2llcyB0byBleHRyYWN0IHRoZSByZWxldmFudCBtZW1vcnkgZnJvbSB0aGUgcmF3IGV2ZW50cy5cbiAqIFVzZSBidWlsdC1pbiBzdHJhdGVnaWVzIGZvciBxdWljayBzZXR1cCwgdXNlIGJ1aWx0LWluIHN0cmF0ZWdpZXMgd2l0aCBvdmVycmlkZSB0byBzcGVjaWZ5IG1vZGVscyBhbmQgcHJvbXB0IHRlbXBsYXRlcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvbWVtb3J5LXN0cmF0ZWdpZXMuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5U3RyYXRlZ3kge1xuICAvKipcbiAgICogRGVmYXVsdCBzdHJhdGVnaWVzIGZvciBvcmdhbml6aW5nIGFuZCBleHRyYWN0aW5nIG1lbW9yeSBkYXRhLCBlYWNoIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICAgKiBUaGlzIHN0cmF0ZWd5IGNvbXByZXNzZXMgY29udmVyc2F0aW9ucyBpbnRvIGNvbmNpc2Ugb3ZlcnZpZXdzLCBwcmVzZXJ2aW5nIGVzc2VudGlhbCBjb250ZXh0IGFuZCBrZXkgaW5zaWdodHMgZm9yIHF1aWNrIHJlY2FsbC5cbiAgICogRXh0cmFjdGVkIG1lbW9yeSBleGFtcGxlOiBVc2VycyBjb25mdXNlZCBieSBjbG91ZCBzZXR1cCBkdXJpbmcgb25ib2FyZGluZy5cbiAgICogQHJldHVybnMgQSBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nQnVpbHRJblN1bW1hcml6YXRpb24oKTogTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IE1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuU1VNTUFSSVpBVElPTiwge1xuICAgICAgbmFtZTogJ3N1bW1hcnlfYnVpbHRpbl9jZGtHZW4wMDAxJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3VtbWFyaXplIGludGVyYWN0aW9ucyB0byBwcmVzZXJ2ZSBjcml0aWNhbCBjb250ZXh0IGFuZCBrZXkgaW5zaWdodHMnLFxuICAgICAgbmFtZXNwYWNlczogWycvc3RyYXRlZ2llcy97bWVtb3J5U3RyYXRlZ3lJZH0vYWN0b3JzL3thY3RvcklkfS9zZXNzaW9ucy97c2Vzc2lvbklkfSddLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBEZWZhdWx0IHN0cmF0ZWdpZXMgZm9yIG9yZ2FuaXppbmcgYW5kIGV4dHJhY3RpbmcgbWVtb3J5IGRhdGEsIGVhY2ggb3B0aW1pemVkIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuXG4gICAqIERpc3RpbGxzIGdlbmVyYWwgZmFjdHMsIGNvbmNlcHRzLCBhbmQgdW5kZXJseWluZyBtZWFuaW5ncyBmcm9tIHJhdyBjb252ZXJzYXRpb25hbCBkYXRhLCBwcmVzZW50aW5nIHRoZSBpbmZvcm1hdGlvbiBpbiBhIGNvbnRleHQtaW5kZXBlbmRlbnQgZm9ybWF0LlxuICAgKiBFeHRyYWN0ZWQgbWVtb3J5IGV4YW1wbGU6IEluLWNvbnRleHQgbGVhcm5pbmcgPSB0YXNrLXNvbHZpbmcgdmlhIGV4YW1wbGVzLCBubyB0cmFpbmluZyBuZWVkZWQuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0J1aWx0SW5TZW1hbnRpYygpOiBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5KE1lbW9yeVN0cmF0ZWd5VHlwZS5TRU1BTlRJQywge1xuICAgICAgbmFtZTogJ3NlbWFudGljX2J1aWx0aW5fY2RrR2VuMDAwMScsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdFeHRyYWN0IGdlbmVyYWwgZmFjdHVhbCBrbm93bGVkZ2UsIGNvbmNlcHRzIGFuZCBtZWFuaW5ncyBmcm9tIHJhdyBjb252ZXJzYXRpb25zIGluIGEgY29udGV4dC1pbmRlcGVuZGVudCBmb3JtYXQuJyxcbiAgICAgIG5hbWVzcGFjZXM6IFsnL3N0cmF0ZWdpZXMve21lbW9yeVN0cmF0ZWd5SWR9L2FjdG9ycy97YWN0b3JJZH0nXSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRGVmYXVsdCBzdHJhdGVnaWVzIGZvciBvcmdhbml6aW5nIGFuZCBleHRyYWN0aW5nIG1lbW9yeSBkYXRhLCBlYWNoIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICAgKiBDYXB0dXJlcyBpbmRpdmlkdWFsIHByZWZlcmVuY2VzLCBpbnRlcmFjdGlvbiBwYXR0ZXJucywgYW5kIHBlcnNvbmFsaXplZCBzZXR0aW5ncyB0byBlbmhhbmNlIGZ1dHVyZSBleHBlcmllbmNlcy5cbiAgICogRXh0cmFjdGVkIG1lbW9yeSBleGFtcGxlOiBVc2VyIG5lZWRzIGNsZWFyIGd1aWRhbmNlIG9uIGNsb3VkIHN0b3JhZ2UgYWNjb3VudCBjb25uZWN0aW9uIGR1cmluZyBvbmJvYXJkaW5nLlxuICAgKiBAcmV0dXJucyBBIE1hbmFnZWRNZW1vcnlTdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdCdWlsdEluVXNlclByZWZlcmVuY2UoKTogTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IE1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuVVNFUl9QUkVGRVJFTkNFLCB7XG4gICAgICBuYW1lOiAncHJlZmVyZW5jZV9idWlsdGluX2Nka0dlbjAwMDEnLFxuICAgICAgZGVzY3JpcHRpb246ICdDYXB0dXJlIGluZGl2aWR1YWwgcHJlZmVyZW5jZXMsIGludGVyYWN0aW9uIHBhdHRlcm5zLCBhbmQgcGVyc29uYWxpemVkIHNldHRpbmdzIHRvIGVuaGFuY2UgZnV0dXJlIGV4cGVyaWVuY2VzLicsXG4gICAgICBuYW1lc3BhY2VzOiBbJy9zdHJhdGVnaWVzL3ttZW1vcnlTdHJhdGVneUlkfS9hY3RvcnMve2FjdG9ySWR9J10sXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzZW1hbnRpYyBtZW1vcnkgc3RyYXRlZ3kgd2l0aCBjdXN0b20gY29uZmlndXJhdGlvbi5cbiAgICogRGlzdGlsbHMgZ2VuZXJhbCBmYWN0cywgY29uY2VwdHMsIGFuZCB1bmRlcmx5aW5nIG1lYW5pbmdzIGZyb20gcmF3IGNvbnZlcnNhdGlvbmFsIGRhdGEsIHByZXNlbnRpbmcgdGhlIGluZm9ybWF0aW9uIGluIGEgY29udGV4dC1pbmRlcGVuZGVudCBmb3JtYXQuXG4gICAqIEV4dHJhY3RlZCBtZW1vcnkgZXhhbXBsZTogSW4tY29udGV4dCBsZWFybmluZyA9IHRhc2stc29sdmluZyB2aWEgZXhhbXBsZXMsIG5vIHRyYWluaW5nIG5lZWRlZC5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VtYW50aWMgbWVtb3J5IHN0cmF0ZWd5LlxuICAgKiBAcmV0dXJucyBBIE1hbmFnZWRNZW1vcnlTdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdTZW1hbnRpYyhjb25maWc6IE1hbmFnZWRTdHJhdGVneVByb3BzKTogTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IE1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuU0VNQU5USUMsIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIHByZWZlcmVuY2UgbWVtb3J5IHN0cmF0ZWd5IHdpdGggY3VzdG9tIGNvbmZpZ3VyYXRpb24uXG4gICAqIENhcHR1cmVzIGluZGl2aWR1YWwgcHJlZmVyZW5jZXMsIGludGVyYWN0aW9uIHBhdHRlcm5zLCBhbmQgcGVyc29uYWxpemVkIHNldHRpbmdzIHRvIGVuaGFuY2UgZnV0dXJlIGV4cGVyaWVuY2VzLlxuICAgKiBFeHRyYWN0ZWQgbWVtb3J5IGV4YW1wbGU6IFVzZXIgbmVlZHMgY2xlYXIgZ3VpZGFuY2Ugb24gY2xvdWQgc3RvcmFnZSBhY2NvdW50IGNvbm5lY3Rpb24gZHVyaW5nIG9uYm9hcmRpbmcuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHVzZXIgcHJlZmVyZW5jZSBtZW1vcnkgc3RyYXRlZ3kuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1VzZXJQcmVmZXJlbmNlKGNvbmZpZzogTWFuYWdlZFN0cmF0ZWd5UHJvcHMpOiBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5KE1lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0UsIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdW1tYXJpemF0aW9uIG1lbW9yeSBzdHJhdGVneSB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uLlxuICAgKiBUaGlzIHN0cmF0ZWd5IGNvbXByZXNzZXMgY29udmVyc2F0aW9ucyBpbnRvIGNvbmNpc2Ugb3ZlcnZpZXdzLCBwcmVzZXJ2aW5nIGVzc2VudGlhbCBjb250ZXh0IGFuZCBrZXkgaW5zaWdodHMgZm9yIHF1aWNrIHJlY2FsbC5cbiAgICogRXh0cmFjdGVkIG1lbW9yeSBleGFtcGxlOiBVc2VycyBjb25mdXNlZCBieSBjbG91ZCBzZXR1cCBkdXJpbmcgb25ib2FyZGluZy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc3VtbWFyaXphdGlvbiBtZW1vcnkgc3RyYXRlZ3kuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1N1bW1hcml6YXRpb24oY29uZmlnOiBNYW5hZ2VkU3RyYXRlZ3lQcm9wcyk6IE1hbmFnZWRNZW1vcnlTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3koTWVtb3J5U3RyYXRlZ3lUeXBlLlNVTU1BUklaQVRJT04sIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzZWxmLW1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5LlxuICAgKiBBIHNlbGYtbWFuYWdlZCBzdHJhdGVneSBnaXZlcyB5b3UgY29tcGxldGUgY29udHJvbCBvdmVyIHlvdXIgbWVtb3J5IGV4dHJhY3Rpb24gYW5kIGNvbnNvbGlkYXRpb24gcGlwZWxpbmVzLlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxmLW1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5LlxuICAgKiBAcmV0dXJucyBBIFNlbGZNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nU2VsZk1hbmFnZWQoY29uZmlnOiBTZWxmTWFuYWdlZFN0cmF0ZWd5UHJvcHMpOiBTZWxmTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICAvLyBTY29wZSBpcyBwYXNzZWQgZm9yIGZ1dHVyZSB1c2UgaW4gcGVybWlzc2lvbiBncmFudGluZ1xuICAgIHJldHVybiBuZXcgU2VsZk1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuQ1VTVE9NLCBjb25maWcpO1xuICB9XG59XG4iXX0=
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZUEsZ0JBQWdCO0FBQ2hCLG9FQUE0RjtBQUM1Riw4RUFBeUc7QUFFekc7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUN4Qzs7O0dBR0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUV6Qzs7R0FFRztBQUNILElBQVksa0JBc0JYO0FBdEJELFdBQVksa0JBQWtCO0lBQzVCOztPQUVHO0lBQ0gscURBQStCLENBQUE7SUFDL0I7OztPQUdHO0lBQ0gsMkNBQXFCLENBQUE7SUFDckI7O09BRUc7SUFDSCx5REFBbUMsQ0FBQTtJQUNuQzs7T0FFRztJQUNILDJDQUFxQixDQUFBO0lBQ3JCOztPQUVHO0lBQ0gsdUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQXRCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQXNCN0I7QUFtREQ7OytFQUUrRTtBQUMvRTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGNBQWM7O0lBQ3pCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLHlCQUF5QjtRQUNyQyxPQUFPLElBQUksd0NBQXFCLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFO1lBQ2pFLElBQUksRUFBRSw0QkFBNEI7WUFDbEMsV0FBVyxFQUFFLHNFQUFzRTtZQUNuRixVQUFVLEVBQUUsQ0FBQyxzRUFBc0UsQ0FBQztTQUNyRixDQUFDLENBQUM7S0FDSjtJQUNEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLG9CQUFvQjtRQUNoQyxPQUFPLElBQUksd0NBQXFCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO1lBQzVELElBQUksRUFBRSw2QkFBNkI7WUFDbkMsV0FBVyxFQUNYLGtIQUFrSDtZQUNsSCxVQUFVLEVBQUUsQ0FBQyxpREFBaUQsQ0FBQztTQUNoRSxDQUFDLENBQUM7S0FDSjtJQUNEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLDBCQUEwQjtRQUN0QyxPQUFPLElBQUksd0NBQXFCLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFO1lBQ25FLElBQUksRUFBRSwrQkFBK0I7WUFDckMsV0FBVyxFQUFFLGdIQUFnSDtZQUM3SCxVQUFVLEVBQUUsQ0FBQyxpREFBaUQsQ0FBQztTQUNoRSxDQUFDLENBQUM7S0FDSjtJQUNEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLG9CQUFvQjtRQUNoQyxPQUFPLElBQUksd0NBQXFCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO1lBQzVELElBQUksRUFBRSw2QkFBNkI7WUFDbkMsV0FBVyxFQUFFLDZEQUE2RDtZQUMxRSxVQUFVLEVBQUUsQ0FBQyxrRUFBa0UsQ0FBQztZQUNoRix1QkFBdUIsRUFBRTtnQkFDdkIsVUFBVSxFQUFFLENBQUMsOENBQThDLENBQUM7YUFDN0Q7U0FDRixDQUFDLENBQUM7S0FDSjtJQUNEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBNEI7Ozs7Ozs7Ozs7UUFDdEQsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN2RTtJQUNEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUE0Qjs7Ozs7Ozs7OztRQUM1RCxPQUFPLElBQUksd0NBQXFCLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzlFO0lBQ0Q7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQTRCOzs7Ozs7Ozs7O1FBQzNELE9BQU8sSUFBSSx3Q0FBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDNUU7SUFDRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQTRCOzs7Ozs7Ozs7O1FBQ3RELE9BQU8sSUFBSSx3Q0FBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDdkU7SUFDRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFnQzs7Ozs7Ozs7OztRQUM3RCx3REFBd0Q7UUFDeEQsT0FBTyxJQUFJLGlEQUF5QixDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN6RTs7QUExR0gsd0NBMkdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG4vLyBJbnRlcm5hbCBsaWJzXG5pbXBvcnQgeyBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3ksIE1hbmFnZWRTdHJhdGVneVByb3BzIH0gZnJvbSAnLi9zdHJhdGVnaWVzL21hbmFnZWQtc3RyYXRlZ3knO1xuaW1wb3J0IHsgU2VsZk1hbmFnZWRNZW1vcnlTdHJhdGVneSwgU2VsZk1hbmFnZWRTdHJhdGVneVByb3BzIH0gZnJvbSAnLi9zdHJhdGVnaWVzL3NlbGYtbWFuYWdlZC1zdHJhdGVneSc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RBTlRTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBtZW1vcnkgc3RyYXRlZ3kgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBNRU1PUllfTkFNRV9NSU5fTEVOR1RIID0gMTtcbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIG1lbW9yeSBzdHJhdGVneSBuYW1lXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1FTU9SWV9OQU1FX01BWF9MRU5HVEggPSA0ODtcblxuLyoqXG4gKiBMb25nLXRlcm0gbWVtb3J5IGV4dHJhY3Rpb24gc3RyYXRlZ3kgdHlwZXMuXG4gKi9cbmV4cG9ydCBlbnVtIE1lbW9yeVN0cmF0ZWd5VHlwZSB7XG4gIC8qKlxuICAgKiBTdW1tYXJpemF0aW9uIHN0cmF0ZWd5IC0gZXh0cmFjdHMgY29uY2lzZSBzdW1tYXJpZXMgdG8gcHJlc2VydmUgY3JpdGljYWwgY29udGV4dCBhbmQga2V5IGluc2lnaHRzXG4gICAqL1xuICBTVU1NQVJJWkFUSU9OID0gJ1NVTU1BUklaQVRJT04nLFxuICAvKipcbiAgICogU2VtYW50aWMgbWVtb3J5IHN0cmF0ZWd5IC0gZXh0cmFjdHMgZ2VuZXJhbCBmYWN0dWFsIGtub3dsZWRnZSwgY29uY2VwdHMgYW5kIG1lYW5pbmdzIGZyb20gcmF3IGNvbnZlcnNhdGlvbnNcbiAgICogdXNpbmcgdmVjdG9yIGVtYmVkZGluZ3MgZm9yIHNpbWlsYXJpdHkgc2VhcmNoLlxuICAgKi9cbiAgU0VNQU5USUMgPSAnU0VNQU5USUMnLFxuICAvKipcbiAgICogVXNlciBwcmVmZXJlbmNlcyBzdHJhdGVneSAtIGV4dHJhY3RzIHVzZXIgYmVoYXZpb3IgcGF0dGVybnMgZnJvbSByYXcgY29udmVyc2F0aW9ucy5cbiAgICovXG4gIFVTRVJfUFJFRkVSRU5DRSA9ICdVU0VSX1BSRUZFUkVOQ0UnLFxuICAvKipcbiAgICogRXBpc29kaWMgbWVtb3J5IHN0cmF0ZWd5IC0gY2FwdHVyZXMgbWVhbmluZ2Z1bCBzbGljZXMgb2YgdXNlciBhbmQgc3lzdGVtIGludGVyYWN0aW9uc1xuICAgKi9cbiAgRVBJU09ESUMgPSAnRVBJU09ESUMnLFxuICAvKipcbiAgICogQ3VzdG9taXplIG1lbW9yeSBwcm9jZXNzaW5nIHRocm91Z2ggY3VzdG9tIGZvdW5kYXRpb24gbW9kZWwgYW5kIHByb21wdCB0ZW1wbGF0ZXMuXG4gICAqL1xuICBDVVNUT00gPSAnQ1VTVE9NJyxcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGNvbW1vbiBmb3IgYW55IG1lbW9yeSBzdHJhdGVneVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVN0cmF0ZWd5Q29tbW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgZm9yIHRoZSBzdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdHJhdGVneVxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogSW50ZXJmYWNlIGZvciBNZW1vcnkgc3RyYXRlZ2llc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElNZW1vcnlTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWVtb3J5IHN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBtZW1vcnkgc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IHN0cmF0ZWd5VHlwZTogTWVtb3J5U3RyYXRlZ3lUeXBlO1xuICAvKipcbiAgICogUmVuZGVycyBpbnRlcm5hbCBhdHRyaWJ1dGVzIHRvIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICByZW5kZXIoKTogYmVkcm9ja2FnZW50Y29yZS5DZm5NZW1vcnkuTWVtb3J5U3RyYXRlZ3lQcm9wZXJ0eTtcbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIHRoZSByb2xlXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIGdyYW50ZWUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICogQHJldHVybnMgVGhlIEdyYW50IG9iamVjdCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHwgdW5kZWZpbmVkO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhY3RvcnlcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgbWVtb3J5IHN0cmF0ZWdpZXNcbiAqIElmIHlvdSBuZWVkIGxvbmctdGVybSBtZW1vcnkgZm9yIGNvbnRleHQgcmVjYWxsIGFjcm9zcyBzZXNzaW9ucywgeW91IGNhbiBzZXR1cCBtZW1vcnkgZXh0cmFjdGlvbiBzdHJhdGVnaWVzIHRvIGV4dHJhY3QgdGhlIHJlbGV2YW50IG1lbW9yeSBmcm9tIHRoZSByYXcgZXZlbnRzLlxuICogVXNlIGJ1aWx0LWluIHN0cmF0ZWdpZXMgZm9yIHF1aWNrIHNldHVwLCB1c2UgYnVpbHQtaW4gc3RyYXRlZ2llcyB3aXRoIG92ZXJyaWRlIHRvIHNwZWNpZnkgbW9kZWxzIGFuZCBwcm9tcHQgdGVtcGxhdGVzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9tZW1vcnktc3RyYXRlZ2llcy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHN0cmF0ZWdpZXMgZm9yIG9yZ2FuaXppbmcgYW5kIGV4dHJhY3RpbmcgbWVtb3J5IGRhdGEsIGVhY2ggb3B0aW1pemVkIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuXG4gICAqIFRoaXMgc3RyYXRlZ3kgY29tcHJlc3NlcyBjb252ZXJzYXRpb25zIGludG8gY29uY2lzZSBvdmVydmlld3MsIHByZXNlcnZpbmcgZXNzZW50aWFsIGNvbnRleHQgYW5kIGtleSBpbnNpZ2h0cyBmb3IgcXVpY2sgcmVjYWxsLlxuICAgKiBFeHRyYWN0ZWQgbWVtb3J5IGV4YW1wbGU6IFVzZXJzIGNvbmZ1c2VkIGJ5IGNsb3VkIHNldHVwIGR1cmluZyBvbmJvYXJkaW5nLlxuICAgKiBAcmV0dXJucyBBIE1hbmFnZWRNZW1vcnlTdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdCdWlsdEluU3VtbWFyaXphdGlvbigpOiBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5KE1lbW9yeVN0cmF0ZWd5VHlwZS5TVU1NQVJJWkFUSU9OLCB7XG4gICAgICBuYW1lOiAnc3VtbWFyeV9idWlsdGluX2Nka0dlbjAwMDEnLFxuICAgICAgZGVzY3JpcHRpb246ICdTdW1tYXJpemUgaW50ZXJhY3Rpb25zIHRvIHByZXNlcnZlIGNyaXRpY2FsIGNvbnRleHQgYW5kIGtleSBpbnNpZ2h0cycsXG4gICAgICBuYW1lc3BhY2VzOiBbJy9zdHJhdGVnaWVzL3ttZW1vcnlTdHJhdGVneUlkfS9hY3RvcnMve2FjdG9ySWR9L3Nlc3Npb25zL3tzZXNzaW9uSWR9J10sXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIERlZmF1bHQgc3RyYXRlZ2llcyBmb3Igb3JnYW5pemluZyBhbmQgZXh0cmFjdGluZyBtZW1vcnkgZGF0YSwgZWFjaCBvcHRpbWl6ZWQgZm9yIHNwZWNpZmljIHVzZSBjYXNlcy5cbiAgICogRGlzdGlsbHMgZ2VuZXJhbCBmYWN0cywgY29uY2VwdHMsIGFuZCB1bmRlcmx5aW5nIG1lYW5pbmdzIGZyb20gcmF3IGNvbnZlcnNhdGlvbmFsIGRhdGEsIHByZXNlbnRpbmcgdGhlIGluZm9ybWF0aW9uIGluIGEgY29udGV4dC1pbmRlcGVuZGVudCBmb3JtYXQuXG4gICAqIEV4dHJhY3RlZCBtZW1vcnkgZXhhbXBsZTogSW4tY29udGV4dCBsZWFybmluZyA9IHRhc2stc29sdmluZyB2aWEgZXhhbXBsZXMsIG5vIHRyYWluaW5nIG5lZWRlZC5cbiAgICogQHJldHVybnMgQSBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nQnVpbHRJblNlbWFudGljKCk6IE1hbmFnZWRNZW1vcnlTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3koTWVtb3J5U3RyYXRlZ3lUeXBlLlNFTUFOVElDLCB7XG4gICAgICBuYW1lOiAnc2VtYW50aWNfYnVpbHRpbl9jZGtHZW4wMDAxJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0V4dHJhY3QgZ2VuZXJhbCBmYWN0dWFsIGtub3dsZWRnZSwgY29uY2VwdHMgYW5kIG1lYW5pbmdzIGZyb20gcmF3IGNvbnZlcnNhdGlvbnMgaW4gYSBjb250ZXh0LWluZGVwZW5kZW50IGZvcm1hdC4nLFxuICAgICAgbmFtZXNwYWNlczogWycvc3RyYXRlZ2llcy97bWVtb3J5U3RyYXRlZ3lJZH0vYWN0b3JzL3thY3RvcklkfSddLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBEZWZhdWx0IHN0cmF0ZWdpZXMgZm9yIG9yZ2FuaXppbmcgYW5kIGV4dHJhY3RpbmcgbWVtb3J5IGRhdGEsIGVhY2ggb3B0aW1pemVkIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuXG4gICAqIENhcHR1cmVzIGluZGl2aWR1YWwgcHJlZmVyZW5jZXMsIGludGVyYWN0aW9uIHBhdHRlcm5zLCBhbmQgcGVyc29uYWxpemVkIHNldHRpbmdzIHRvIGVuaGFuY2UgZnV0dXJlIGV4cGVyaWVuY2VzLlxuICAgKiBFeHRyYWN0ZWQgbWVtb3J5IGV4YW1wbGU6IFVzZXIgbmVlZHMgY2xlYXIgZ3VpZGFuY2Ugb24gY2xvdWQgc3RvcmFnZSBhY2NvdW50IGNvbm5lY3Rpb24gZHVyaW5nIG9uYm9hcmRpbmcuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0J1aWx0SW5Vc2VyUHJlZmVyZW5jZSgpOiBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5KE1lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0UsIHtcbiAgICAgIG5hbWU6ICdwcmVmZXJlbmNlX2J1aWx0aW5fY2RrR2VuMDAwMScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NhcHR1cmUgaW5kaXZpZHVhbCBwcmVmZXJlbmNlcywgaW50ZXJhY3Rpb24gcGF0dGVybnMsIGFuZCBwZXJzb25hbGl6ZWQgc2V0dGluZ3MgdG8gZW5oYW5jZSBmdXR1cmUgZXhwZXJpZW5jZXMuJyxcbiAgICAgIG5hbWVzcGFjZXM6IFsnL3N0cmF0ZWdpZXMve21lbW9yeVN0cmF0ZWd5SWR9L2FjdG9ycy97YWN0b3JJZH0nXSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRGVmYXVsdCBzdHJhdGVnaWVzIGZvciBvcmdhbml6aW5nIGFuZCBleHRyYWN0aW5nIG1lbW9yeSBkYXRhLCBlYWNoIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICAgKiBDYXB0dXJlcyBtZWFuaW5nZnVsIHNsaWNlcyBvZiB1c2VyIGFuZCBzeXN0ZW0gaW50ZXJhY3Rpb25zLCBwcmVzZXJ2ZSB0aGVtIGludG8gY29tcGFjdCByZWNvcmRzIGFmdGVyIHN1bW1hcml6aW5nLlxuICAgKiBFeHRyYWN0ZWQgbWVtb3J5IGV4YW1wbGU6IFVzZXIgZmlyc3QgYXNrZWQgYWJvdXQgcHJpY2luZyBvbiBNb25kYXksIHRoZW4gcmVxdWVzdGVkIGZlYXR1cmUgY29tcGFyaXNvbiBvbiBUdWVzZGF5LCBmaW5hbGx5IG1hZGUgcHVyY2hhc2UgZGVjaXNpb24gb24gV2VkbmVzZGF5LlxuICAgKiBAcmV0dXJucyBBIE1hbmFnZWRNZW1vcnlTdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdCdWlsdEluRXBpc29kaWMoKTogTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IE1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuRVBJU09ESUMsIHtcbiAgICAgIG5hbWU6ICdlcGlzb2RpY19idWlsdGluX2Nka0dlbjAwMDEnLFxuICAgICAgZGVzY3JpcHRpb246ICdDYXB0dXJlcyBtZWFuaW5nZnVsIHNsaWNlcyBvZiB1c2VyIGFuZCBzeXN0ZW0gaW50ZXJhY3Rpb25zLicsXG4gICAgICBuYW1lc3BhY2VzOiBbJy9zdHJhdGVneS97bWVtb3J5U3RyYXRlZ3lJZH0vYWN0b3Ive2FjdG9ySWR9L3Nlc3Npb24ve3Nlc3Npb25JZH0nXSxcbiAgICAgIHJlZmxlY3Rpb25Db25maWd1cmF0aW9uOiB7XG4gICAgICAgIG5hbWVzcGFjZXM6IFsnL3N0cmF0ZWd5L3ttZW1vcnlTdHJhdGVneUlkfS9hY3Rvci97YWN0b3JJZH0nXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzZW1hbnRpYyBtZW1vcnkgc3RyYXRlZ3kgd2l0aCBjdXN0b20gY29uZmlndXJhdGlvbi5cbiAgICogRGlzdGlsbHMgZ2VuZXJhbCBmYWN0cywgY29uY2VwdHMsIGFuZCB1bmRlcmx5aW5nIG1lYW5pbmdzIGZyb20gcmF3IGNvbnZlcnNhdGlvbmFsIGRhdGEsIHByZXNlbnRpbmcgdGhlIGluZm9ybWF0aW9uIGluIGEgY29udGV4dC1pbmRlcGVuZGVudCBmb3JtYXQuXG4gICAqIEV4dHJhY3RlZCBtZW1vcnkgZXhhbXBsZTogSW4tY29udGV4dCBsZWFybmluZyA9IHRhc2stc29sdmluZyB2aWEgZXhhbXBsZXMsIG5vIHRyYWluaW5nIG5lZWRlZC5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VtYW50aWMgbWVtb3J5IHN0cmF0ZWd5LlxuICAgKiBAcmV0dXJucyBBIE1hbmFnZWRNZW1vcnlTdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdTZW1hbnRpYyhjb25maWc6IE1hbmFnZWRTdHJhdGVneVByb3BzKTogTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IE1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuU0VNQU5USUMsIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIHByZWZlcmVuY2UgbWVtb3J5IHN0cmF0ZWd5IHdpdGggY3VzdG9tIGNvbmZpZ3VyYXRpb24uXG4gICAqIENhcHR1cmVzIGluZGl2aWR1YWwgcHJlZmVyZW5jZXMsIGludGVyYWN0aW9uIHBhdHRlcm5zLCBhbmQgcGVyc29uYWxpemVkIHNldHRpbmdzIHRvIGVuaGFuY2UgZnV0dXJlIGV4cGVyaWVuY2VzLlxuICAgKiBFeHRyYWN0ZWQgbWVtb3J5IGV4YW1wbGU6IFVzZXIgbmVlZHMgY2xlYXIgZ3VpZGFuY2Ugb24gY2xvdWQgc3RvcmFnZSBhY2NvdW50IGNvbm5lY3Rpb24gZHVyaW5nIG9uYm9hcmRpbmcuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHVzZXIgcHJlZmVyZW5jZSBtZW1vcnkgc3RyYXRlZ3kuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1VzZXJQcmVmZXJlbmNlKGNvbmZpZzogTWFuYWdlZFN0cmF0ZWd5UHJvcHMpOiBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5KE1lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0UsIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdW1tYXJpemF0aW9uIG1lbW9yeSBzdHJhdGVneSB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uLlxuICAgKiBUaGlzIHN0cmF0ZWd5IGNvbXByZXNzZXMgY29udmVyc2F0aW9ucyBpbnRvIGNvbmNpc2Ugb3ZlcnZpZXdzLCBwcmVzZXJ2aW5nIGVzc2VudGlhbCBjb250ZXh0IGFuZCBrZXkgaW5zaWdodHMgZm9yIHF1aWNrIHJlY2FsbC5cbiAgICogRXh0cmFjdGVkIG1lbW9yeSBleGFtcGxlOiBVc2VycyBjb25mdXNlZCBieSBjbG91ZCBzZXR1cCBkdXJpbmcgb25ib2FyZGluZy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc3VtbWFyaXphdGlvbiBtZW1vcnkgc3RyYXRlZ3kuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1N1bW1hcml6YXRpb24oY29uZmlnOiBNYW5hZ2VkU3RyYXRlZ3lQcm9wcyk6IE1hbmFnZWRNZW1vcnlTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3koTWVtb3J5U3RyYXRlZ3lUeXBlLlNVTU1BUklaQVRJT04sIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZXBpc29kaWMgbWVtb3J5IHN0cmF0ZWd5IHdpdGggY3VzdG9tIGNvbmZpZ3VyYXRpb24uXG4gICAqIENhcHR1cmVzIG1lYW5pbmdmdWwgc2xpY2VzIG9mIHVzZXIgYW5kIHN5c3RlbSBpbnRlcmFjdGlvbnMsIHByZXNlcnZlIHRoZW0gaW50byBjb21wYWN0IHJlY29yZHMgYWZ0ZXIgc3VtbWFyaXppbmcuXG4gICAqIEV4dHJhY3RlZCBtZW1vcnkgZXhhbXBsZTogVXNlciBmaXJzdCBhc2tlZCBhYm91dCBwcmljaW5nIG9uIE1vbmRheSwgdGhlbiByZXF1ZXN0ZWQgZmVhdHVyZSBjb21wYXJpc29uIG9uIFR1ZXNkYXksIGZpbmFsbHkgbWFkZSBwdXJjaGFzZSBkZWNpc2lvbiBvbiBXZWRuZXNkYXkuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGVwaXNvZGljIG1lbW9yeSBzdHJhdGVneS5cbiAgICogQHJldHVybnMgQSBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nRXBpc29kaWMoY29uZmlnOiBNYW5hZ2VkU3RyYXRlZ3lQcm9wcyk6IE1hbmFnZWRNZW1vcnlTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3koTWVtb3J5U3RyYXRlZ3lUeXBlLkVQSVNPRElDLCBjb25maWcpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2VsZi1tYW5hZ2VkIG1lbW9yeSBzdHJhdGVneS5cbiAgICogQSBzZWxmLW1hbmFnZWQgc3RyYXRlZ3kgZ2l2ZXMgeW91IGNvbXBsZXRlIGNvbnRyb2wgb3ZlciB5b3VyIG1lbW9yeSBleHRyYWN0aW9uIGFuZCBjb25zb2xpZGF0aW9uIHBpcGVsaW5lcy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZi1tYW5hZ2VkIG1lbW9yeSBzdHJhdGVneS5cbiAgICogQHJldHVybnMgQSBTZWxmTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1NlbGZNYW5hZ2VkKGNvbmZpZzogU2VsZk1hbmFnZWRTdHJhdGVneVByb3BzKTogU2VsZk1hbmFnZWRNZW1vcnlTdHJhdGVneSB7XG4gICAgLy8gU2NvcGUgaXMgcGFzc2VkIGZvciBmdXR1cmUgdXNlIGluIHBlcm1pc3Npb24gZ3JhbnRpbmdcbiAgICByZXR1cm4gbmV3IFNlbGZNYW5hZ2VkTWVtb3J5U3RyYXRlZ3koTWVtb3J5U3RyYXRlZ3lUeXBlLkNVU1RPTSwgY29uZmlnKTtcbiAgfVxufVxuIl19
|
package/lib/memory/memory.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
11
11
|
* and limitations under the License.
|
|
12
12
|
*/
|
|
13
|
-
import { Duration, IResource, Resource } from 'aws-cdk-lib';
|
|
13
|
+
import { Duration, IResource, Resource, ResourceProps } from 'aws-cdk-lib';
|
|
14
14
|
import { DimensionsMap, Metric, MetricOptions } from 'aws-cdk-lib/aws-cloudwatch';
|
|
15
15
|
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
16
16
|
import * as kms from 'aws-cdk-lib/aws-kms';
|
|
@@ -141,7 +141,7 @@ export declare abstract class MemoryBase extends Resource implements IMemory {
|
|
|
141
141
|
* The principal to grant permissions to
|
|
142
142
|
*/
|
|
143
143
|
abstract readonly grantPrincipal: iam.IPrincipal;
|
|
144
|
-
constructor(scope: Construct, id: string);
|
|
144
|
+
constructor(scope: Construct, id: string, props?: ResourceProps);
|
|
145
145
|
/**
|
|
146
146
|
* Grants IAM actions to the IAM Principal
|
|
147
147
|
*
|
|
@@ -337,8 +337,9 @@ export interface MemoryProps {
|
|
|
337
337
|
* Valid characters are a-z, A-Z, 0-9, _ (underscore)
|
|
338
338
|
* The name must start with a letter and can be up to 48 characters long
|
|
339
339
|
* Pattern: [a-zA-Z][a-zA-Z0-9_]{0,47}
|
|
340
|
+
* @default - auto generate
|
|
340
341
|
*/
|
|
341
|
-
readonly memoryName
|
|
342
|
+
readonly memoryName?: string;
|
|
342
343
|
/**
|
|
343
344
|
* Short-term memory expiration in days (between 7 and 365).
|
|
344
345
|
* Sets the short-term (raw event) memory retention.
|
|
@@ -511,7 +512,7 @@ export declare class Memory extends MemoryBase {
|
|
|
511
512
|
*/
|
|
512
513
|
readonly memoryStrategies: IMemoryStrategy[];
|
|
513
514
|
private readonly __resource;
|
|
514
|
-
constructor(scope: Construct, id: string, props
|
|
515
|
+
constructor(scope: Construct, id: string, props?: MemoryProps);
|
|
515
516
|
/**
|
|
516
517
|
* Add memory strategy to the memory.
|
|
517
518
|
* @default - No memory strategies.
|
package/lib/memory/memory.js
CHANGED
|
@@ -99,9 +99,9 @@ const MEMORY_EXPIRATION_DAYS_MAX = 365;
|
|
|
99
99
|
* Contains methods and attributes valid for Memories either created with CDK or imported.
|
|
100
100
|
*/
|
|
101
101
|
class MemoryBase extends aws_cdk_lib_1.Resource {
|
|
102
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryBase", version: "2.
|
|
103
|
-
constructor(scope, id) {
|
|
104
|
-
super(scope, id);
|
|
102
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryBase", version: "2.236.0-alpha.0" };
|
|
103
|
+
constructor(scope, id, props = {}) {
|
|
104
|
+
super(scope, id, props);
|
|
105
105
|
}
|
|
106
106
|
/**
|
|
107
107
|
* Grants IAM actions to the IAM Principal
|
|
@@ -373,7 +373,7 @@ let Memory = (() => {
|
|
|
373
373
|
Memory = _classThis = _classDescriptor.value;
|
|
374
374
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
375
375
|
}
|
|
376
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Memory", version: "2.
|
|
376
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Memory", version: "2.236.0-alpha.0" };
|
|
377
377
|
/** Uniquely identifies this class. */
|
|
378
378
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Memory';
|
|
379
379
|
/**
|
|
@@ -487,8 +487,15 @@ let Memory = (() => {
|
|
|
487
487
|
// ------------------------------------------------------
|
|
488
488
|
// CONSTRUCTOR
|
|
489
489
|
// ------------------------------------------------------
|
|
490
|
-
constructor(scope, id, props) {
|
|
491
|
-
super(scope, id
|
|
490
|
+
constructor(scope, id, props = {}) {
|
|
491
|
+
super(scope, id, {
|
|
492
|
+
// Maximum name length of 48 characters
|
|
493
|
+
// @see https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-bedrockagentcore-memory.html#cfn-bedrockagentcore-memory-name
|
|
494
|
+
physicalName: props?.memoryName ??
|
|
495
|
+
aws_cdk_lib_1.Lazy.string({
|
|
496
|
+
produce: () => aws_cdk_lib_1.Names.uniqueResourceName(this, { maxLength: 48 }),
|
|
497
|
+
}),
|
|
498
|
+
});
|
|
492
499
|
try {
|
|
493
500
|
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_MemoryProps(props);
|
|
494
501
|
}
|
|
@@ -503,7 +510,7 @@ let Memory = (() => {
|
|
|
503
510
|
// ------------------------------------------------------
|
|
504
511
|
// Set properties and defaults
|
|
505
512
|
// ------------------------------------------------------
|
|
506
|
-
this.memoryName =
|
|
513
|
+
this.memoryName = this.physicalName;
|
|
507
514
|
this.expirationDuration = props.expirationDuration ?? aws_cdk_lib_1.Duration.days(90);
|
|
508
515
|
this.description = props.description;
|
|
509
516
|
this.kmsKey = props.kmsKey;
|
|
@@ -550,7 +557,7 @@ let Memory = (() => {
|
|
|
550
557
|
this.createdAt = this.__resource.attrCreatedAt;
|
|
551
558
|
this.failureReason = this.__resource.attrFailureReason;
|
|
552
559
|
// Add memory strategies to the memory
|
|
553
|
-
for (const strategy of props
|
|
560
|
+
for (const strategy of props?.memoryStrategies ?? []) {
|
|
554
561
|
this.addMemoryStrategy(strategy);
|
|
555
562
|
}
|
|
556
563
|
}
|
|
@@ -682,4 +689,4 @@ let Memory = (() => {
|
|
|
682
689
|
return Memory = _classThis;
|
|
683
690
|
})();
|
|
684
691
|
exports.Memory = Memory;
|
|
685
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsNkNBQXlGO0FBRXpGLDJFQUE2RTtBQUM3RSwrREFNb0M7QUFDcEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBSTFFLG1DQUFzQztBQUN0Qyw2REFBdUc7QUFFdkc7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUVqQzs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUNyQzs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQWlIdkM7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFzQixVQUFXLFNBQVEsc0JBQVE7O0lBYS9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDbEI7SUFDRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxPQUF1QixFQUFFLEdBQUcsT0FBaUI7UUFDakQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTztZQUNQLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDOUIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7S0FDSjtJQUNEOzs7Ozs7Ozs7T0FTRztJ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LGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEOztZQTdUVSx1REFBTTs7Ozs7QUFBTix3QkFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBEdXJhdGlvbiwgSVJlc291cmNlLCBMYXp5LCBSZXNvdXJjZSwgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCB7IENmbk1lbW9yeSwgQ2ZuTWVtb3J5UHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQge1xuICBEaW1lbnNpb25zTWFwLFxuICBNZXRyaWMsXG4gIE1ldHJpY09wdGlvbnMsXG4gIE1ldHJpY1Byb3BzLFxuICBTdGF0cyxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB7IElDb25zdHJ1Y3QsIENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuLy8gSW50ZXJuYWwgTGlic1xuaW1wb3J0IHsgSU1lbW9yeVN0cmF0ZWd5IH0gZnJvbSAnLi9tZW1vcnktc3RyYXRlZ3knO1xuaW1wb3J0IHsgTWVtb3J5UGVybXMgfSBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB7IHZhbGlkYXRlRmllbGRQYXR0ZXJuLCB2YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoLCB0aHJvd0lmSW52YWxpZCB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGJyb3dzZXIgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9OQU1FX01JTl9MRU5HVEggPSAxO1xuXG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBicm93c2VyIG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGJyb3dzZXIgdGFnc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9UQUdfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGJyb3dzZXIgdGFnc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9UQUdfTUFYX0xFTkdUSCA9IDI1NjtcblxuLyoqXG4gKiBNaW5pbXVtIGxlbmd0aCBmb3IgbWVtb3J5IGV4cGlyYXRpb24gZGF5c1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOID0gNztcbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIG1lbW9yeSBleHBpcmF0aW9uIGRheXNcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfRVhQSVJBVElPTl9EQVlTX01BWCA9IDM2NTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIE1lbW9yeSByZXNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWVtb3J5IGV4dGVuZHMgSVJlc291cmNlLCBpYW0uSUdyYW50YWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBtZW1vcnkgcmVzb3VyY2VcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lbW9yeVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBtZW1vcnkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBDdXN0b20gS01TIGtleSBmb3IgZW5jcnlwdGlvbiAoaWYgcHJvdmlkZWQpXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIG1lbW9yeVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgbWVtb3J5IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIG1lbW9yeSB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gd3JpdGUgY29udGVudCB0byB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgbWVtb3J5LlxuICAgKiBCb3RoIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGFuZCBMb25nLVRlcm0gTWVtb3J5IChMVE0pLlxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBTaG9ydC1UZXJtIE1lbW9yeSAoU1RNKSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50UmVhZFNob3J0VGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50UmVhZExvbmdUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RGVsZXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RGVsZXRlU2hvcnRUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50IG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgZ3JhbnREZWxldGVMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjb250cm9sIHBsYW5lIG9mIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgZ3JhbnRBZG1pbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZG8gZXZlcnkgYWN0aW9uIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBNZXRyaWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgZGltZW5zaW9uczogRGltZW5zaW9uc01hcCwgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgcmVsYXRlZCB0byB0aGUgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBtZXRyaWNGb3JBcGlPcGVyYXRpb24obWV0cmljTmFtZTogc3RyaW5nLCBvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgbGF0ZW5jeSBvZiBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgbWV0cmljTGF0ZW5jeUZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIHRvdGFsIG51bWJlciBvZiBBUEkgcmVxdWVzdHMgbWFkZSBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgbWV0cmljSW52b2NhdGlvbnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgbWV0cmljRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGNyZWF0ZWQgbWVtb3J5IGV2ZW50cyBhbmQgbWVtb3J5IHJlY29yZHMuXG4gICAqL1xuICBtZXRyaWNFdmVudENyZWF0aW9uQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIEFCU1RSQUNUIEJBU0UgQ0xBU1NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYSBNZW1vcnkuXG4gKiBDb250YWlucyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIHZhbGlkIGZvciBNZW1vcmllcyBlaXRoZXIgY3JlYXRlZCB3aXRoIENESyBvciBpbXBvcnRlZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1lbW9yeUJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElNZW1vcnkge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbWVtb3J5QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBtZW1vcnlJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgfVxuICAvKipcbiAgICogR3JhbnRzIElBTSBhY3Rpb25zIHRvIHRoZSBJQU0gUHJpbmNpcGFsXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqIEBwYXJhbSBhY3Rpb25zIC0gVGhlIGFjdGlvbnMgdG8gZ3JhbnRcbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMubWVtb3J5QXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHdyaXRlIGNvbnRlbnQgdG8gc2hvcnQtdGVybSBtZW1vcnkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVFdmVudCddIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudFdyaXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5TVE0uV1JJVEVfUEVSTVMpO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgbWVtb3J5LlxuICAgKiBCb3RoIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGFuZCBMb25nLVRlcm0gTWVtb3J5IChMVE0pLlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6R2V0TWVtb3J5UmVjb3JkJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpSZXRyaWV2ZU1lbW9yeVJlY29yZHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0QWN0b3JzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0U2Vzc2lvbnNdIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLlJFQURfUEVSTVMpO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGNvbnRlbnRzIG9mIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6R2V0RXZlbnQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RFdmVudHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RBY3RvcnMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RTZXNzaW9ucycsXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnRSZWFkU2hvcnRUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5TVE0uUkVBRF9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeVJlY29yZCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6UmV0cmlldmVNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0TWVtb3J5UmVjb3JkcycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEFjdG9ycycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdFNlc3Npb25zJyxdIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudFJlYWRMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuTFRNLlJFQURfUEVSTVMpO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBjb250ZW50IG9uIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBCb3RoIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGFuZCBMb25nLVRlcm0gTWVtb3J5IChMVE0pLlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBkZWxldGUgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVFdmVudCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlTWVtb3J5UmVjb3JkJ10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50RGVsZXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5ERUxFVEVfUEVSTVMpO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBTaG9ydC1UZXJtIE1lbW9yeSAoU1RNKSBjb250ZW50IG9uIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBkZWxldGUgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVFdmVudCddIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudERlbGV0ZVNob3J0VGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuU1RNLkRFTEVURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIExvbmctVGVybSBNZW1vcnkgKExUTSkgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgZGVsZXRlIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlTWVtb3J5UmVjb3JkJ10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50RGVsZXRlTG9uZ1Rlcm1NZW1vcnkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLkxUTS5ERUxFVEVfUEVSTVMpO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY29udHJvbCBwbGFuZSBvZiB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgYWRtaW4gcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVNZW1vcnknLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeScsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlTWVtb3J5JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpVcGRhdGVNZW1vcnknXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnRBZG1pbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuQURNSU5fUEVSTVMpO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIGRvIGV2ZXJ5IGFjdGlvbiBvbiB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgZnVsbCBhY2Nlc3MgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVFdmVudCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0RXZlbnQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUV2ZW50JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRNZW1vcnlSZWNvcmQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOlJldHJpZXZlTWVtb3J5UmVjb3JkcycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdE1lbW9yeVJlY29yZHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RBY3RvcnMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RTZXNzaW9ucycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6Q3JlYXRlTWVtb3J5JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRNZW1vcnknLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZU1lbW9yeScsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6VXBkYXRlTWVtb3J5J10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuRlVMTF9BQ0NFU1NfUEVSTVMpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1ldHJpY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtZXRyaWMgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGEgc3VtIG92ZXIgYSBwZXJpb2Qgb2YgNSBtaW51dGVzLlxuICAgKiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIGJ5IHVzaW5nIHRoZSBgc3RhdGlzdGljYCBhbmQgYHBlcmlvZGAgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBkaW1lbnNpb25zOiBEaW1lbnNpb25zTWFwLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIGNvbnN0IG1ldHJpY1Byb3BzOiBNZXRyaWNQcm9wcyA9IHtcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZScsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgZGltZW5zaW9uc01hcDogeyAuLi5kaW1lbnNpb25zLCBSZXNvdXJjZTogdGhpcy5tZW1vcnlBcm4gfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJlTWV0cmljKG1ldHJpY1Byb3BzKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgcmVsYXRlZCB0byB0aGUgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRm9yQXBpT3BlcmF0aW9uKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBwcm9wcz86IE1ldHJpY09wdGlvbnMsXG4gICk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKG1ldHJpY05hbWUsIHsgT3BlcmF0aW9uOiBvcGVyYXRpb24gfSwgcHJvcHMpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgbWVhc3VyaW5nIHRoZSBsYXRlbmN5IG9mIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIFRoZSBsYXRlbmN5IG1ldHJpYyByZXByZXNlbnRzIHRoZSB0b3RhbCB0aW1lIGVsYXBzZWQgYmV0d2VlbiByZWNlaXZpbmcgdGhlIHJlcXVlc3QgYW5kIHNlbmRpbmdcbiAgICogdGhlIGZpbmFsIHJlc3BvbnNlIHRva2VuLCBtZWFzdXJpbmcgY29tcGxldGUgZW5kLXRvLWVuZCBwcm9jZXNzaW5nIHRpbWUuXG4gICAqXG4gICAqIEZvciBtZW1vcnkgY3JlYXRpb24gZXZlbnRzIHNwZWNpZmljYWxseSwgdGhpcyBtZWFzdXJlcyB0aGUgdGltZSBmcm9tIHRoZSBsYXN0IENyZWF0ZUV2ZW50XG4gICAqIHRoYXQgbWV0IHN0cmF0ZWd5IGNyaXRlcmlhIHVudGlsIG1lbW9yeSBzdG9yYWdlIGlzIGNvbXBsZXRlZC5cbiAgICpcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNMYXRlbmN5Rm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignTGF0ZW5jeScsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLkFWRVJBR0UsIC4uLnByb3BzIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgdG90YWwgbnVtYmVyIG9mIEFQSSByZXF1ZXN0cyBtYWRlIGZvciBhIHNwZWNpZmljIG1lbW9yeSBvcGVyYXRpb24gbGlrZVxuICAgKiBgQ3JlYXRlRXZlbnRgLCBgTGlzdEV2ZW50c2AsIGBSZXRyaWV2ZU1lbW9yeVJlY29yZHNgIC4uLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0ludm9jYXRpb25zRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignSW52b2NhdGlvbnMnLCBvcGVyYXRpb24sIHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0Vycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ0Vycm9ycycsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2Ygc2hvcnQtdGVybSBtZW1vcnkgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0V2ZW50Q3JlYXRpb25Db3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnQ3JlYXRpb25Db3VudCcsIHsgSXRlbVR5cGU6ICdFdmVudCcgfSwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgbG9uZy10ZXJtIG1lbW9yeSByZWNvcmRzXG4gICAqIGNyZWF0ZWQgYnkgdGhlIGxvbmctdGVybSBleHRyYWN0aW9uIHN0cmF0ZWdpZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTWVtb3J5UmVjb3JkQ3JlYXRpb25Db3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgICdDcmVhdGlvbkNvdW50JyxcbiAgICAgIHsgSXRlbVR5cGU6ICdNZW1vcnlSZWNvcmRzRXh0cmFjdGVkJyB9LFxuICAgICAgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gY3JlYXRlIGEgbWV0cmljLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25maWd1cmVNZXRyaWMocHJvcHM6IE1ldHJpY1Byb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWdpb246IHByb3BzPy5yZWdpb24gPz8gdGhpcy5zdGFjay5yZWdpb24sXG4gICAgICBhY2NvdW50OiBwcm9wcz8uYWNjb3VudCA/PyB0aGlzLnN0YWNrLmFjY291bnQsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICBQUk9QUyBGT1IgTkVXIENPTlNUUlVDVFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIE1lbW9yeSByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtZW1vcnlcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSlcbiAgICogVGhlIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgdXAgdG8gNDggY2hhcmFjdGVycyBsb25nXG4gICAqIFBhdHRlcm46IFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9XG4gICAqL1xuICByZWFkb25seSBtZW1vcnlOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTaG9ydC10ZXJtIG1lbW9yeSBleHBpcmF0aW9uIGluIGRheXMgKGJldHdlZW4gNyBhbmQgMzY1KS5cbiAgICogU2V0cyB0aGUgc2hvcnQtdGVybSAocmF3IGV2ZW50KSBtZW1vcnkgcmV0ZW50aW9uLlxuICAgKiBFdmVudHMgb2xkZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uIHdpbGwgZXhwaXJlIGFuZCBubyBsb25nZXIgYmUgc3RvcmVkLlxuICAgKiBAZGVmYXVsdCAtIDkwIGRheXNcbiAgICovXG4gIHJlYWRvbmx5IGV4cGlyYXRpb25EdXJhdGlvbj86IER1cmF0aW9uO1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBtZW1vcnlcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSksIC0gKGh5cGhlbikgYW5kIHNwYWNlc1xuICAgKiBUaGUgZGVzY3JpcHRpb24gY2FuIGhhdmUgdXAgdG8gMjAwIGNoYXJhY3RlcnNcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDdXN0b20gS01TIGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24uXG4gICAqIEBkZWZhdWx0IC0gWW91ciBkYXRhIGlzIGVuY3J5cHRlZCB3aXRoIGEga2V5IHRoYXQgQVdTIG93bnMgYW5kIG1hbmFnZXMgZm9yIHlvdVxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG4gIC8qKlxuICAgKiBJZiB5b3UgbmVlZCBsb25nLXRlcm0gbWVtb3J5IGZvciBjb250ZXh0IHJlY2FsbCBhY3Jvc3Mgc2Vzc2lvbnMsXG4gICAqIHlvdSBjYW4gc2V0dXAgbWVtb3J5IGV4dHJhY3Rpb24gc3RyYXRlZ2llcyB0byBleHRyYWN0IHRoZSByZWxldmFudCBtZW1vcnkgZnJvbSB0aGUgcmF3IGV2ZW50cy5cbiAgICogQGRlZmF1bHQgLSBObyBleHRyYWN0aW9uIHN0cmF0ZWdpZXMgKHNob3J0IHRlcm0gbWVtb3J5IG9ubHkpXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlTdHJhdGVnaWVzPzogSU1lbW9yeVN0cmF0ZWd5W107XG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIG1lbW9yeSB0byBhY2Nlc3MgQVdTIHNlcnZpY2VzXG4gICAqIHdoZW4gdXNpbmcgY3VzdG9tIHN0cmF0ZWdpZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSBuZXcgcm9sZSB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuICAvKipcbiAgICogVGFncyAob3B0aW9uYWwpXG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIG1lbW9yeSByZXNvdXJjZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICBBVFRSUyBGT1IgSU1QT1JURUQgQ09OU1RSVUNUXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIHNwZWNpZnlpbmcgYW4gaW1wb3J0ZWQgTWVtb3J5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgbWVtb3J5LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIGFzc29jaWF0ZWQgdG8gdGhlIG1lbW9yeS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybjogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0aGlzIG1lbW9yeSB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBsYXN0IHVwZGF0ZWQgdGltZXN0YW1wIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBLTVMgZW5jcnlwdGlvbiBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWVtb3J5XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIEFuIEFXUyBtYW5hZ2VkIGtleSBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBrbXNLZXlBcm4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZW1vcnkuXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIHN0YXR1cyBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNyZWF0ZWQgdGltZXN0YW1wIG9mIHRoZSBtZW1vcnkuXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIGNyZWF0ZWQgdGltZXN0YW1wIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBMb25nLXRlcm0gbWVtb3J5IHN0b3JlIGZvciBleHRyYWN0ZWQgaW5zaWdodHMgbGlrZSB1c2VyIHByZWZlcmVuY2VzLCBzZW1hbnRpYyBmYWN0cyBhbmQgc3VtbWFyaWVzLlxuICogRW5hYmxlcyBrbm93bGVkZ2UgcmV0ZW50aW9uIGFjcm9zcyBzZXNzaW9ucyBieSBzdG9yaW5nIHVzZXIgcHJlZmVyZW5jZXMgKGUuZy4gY29kaW5nIHN0eWxlKSxcbiAqIHNlbWFudGljIGZhY3RzIChlLmcuIGxlYXJuZWQgaW5mbykgYW5kIGludGVyYWN0aW9uIHN1bW1hcmllcyBmb3IgY29udGV4dCBvcHRpbWl6YXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL21lbW9yeS5odG1sXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpNZW1vcnlcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIE1lbW9yeSBleHRlbmRzIE1lbW9yeUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5NZW1vcnknO1xuXG4gIC8qKlxuICAgKiBTdGF0aWMgTWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgQmVkcm9jayBBZ2VudENvcmUgTWVtb3J5LlxuICAgKi9cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gTWVtb3J5IHJlZmVyZW5jZSBmcm9tIGFuIGV4aXN0aW5nIG1lbW9yeSdzIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gSWRlbnRpZmllciBvZiB0aGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBhdHRycyAtIEF0dHJpYnV0ZXMgb2YgdGhlIGV4aXN0aW5nIGJyb3dzZXIgY3VzdG9tXG4gICAqIEByZXR1cm5zIEFuIElCcm93c2VyQ3VzdG9tIHJlZmVyZW5jZSB0byB0aGUgZXhpc3RpbmcgYnJvd3NlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tTWVtb3J5QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogTWVtb3J5QXR0cmlidXRlcyk6IElNZW1vcnkge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIE1lbW9yeUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IG1lbW9yeUFybiA9IGF0dHJzLm1lbW9yeUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBtZW1vcnlJZCA9IEFybi5zcGxpdChhdHRycy5tZW1vcnlBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWUhO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGUgPSBpYW0uUm9sZS5mcm9tUm9sZUFybihzY29wZSwgYCR7aWR9Um9sZWAsIGF0dHJzLnJvbGVBcm4pO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGttc0tleSA9IGF0dHJzLmttc0tleUFybiA/IGttcy5LZXkuZnJvbUtleUFybihzY29wZSwgYCR7aWR9S2V5YCwgYXR0cnMua21zS2V5QXJuKSA6IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSBhdHRycy51cGRhdGVkQXQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWwgPSB0aGlzLmV4ZWN1dGlvblJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzID0gYXR0cnMuc3RhdHVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IGF0dHJzLmNyZWF0ZWRBdDtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSk7XG5cbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZSB8fCBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gbmV3IE1lbW9yeVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQXR0cmlidXRlc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIG1lbW9yeSByZXNvdXJjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lbW9yeUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1lbW9yeS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lbW9yeU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgbWVtb3J5LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWVtb3J5SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBleHBpcmF0aW9uIGRheXMgb2YgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBleHBpcmF0aW9uRHVyYXRpb24/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBmYWlsdXJlIHJlYXNvbiBvZiB0aGUgYnJvd3NlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmFpbHVyZVJlYXNvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGV4ZWN1dGlvbiByb2xlIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY3JlYXRlZCB0aW1lc3RhbXAgb2YgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdXBkYXRlZCBhdCB0aW1lc3RhbXAgb2YgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUYWdzIGFwcGxpZWQgdG8gdGhpcyBicm93c2VyIHJlc291cmNlXG4gICAqIEEgbWFwIG9mIGtleS12YWx1ZSBwYWlycyBmb3IgcmVzb3VyY2UgdGFnZ2luZ1xuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3MgYXBwbGllZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICAvKipcbiAgICogVGhlIG1lbW9yeSBzdHJhdGVnaWVzIHVzZWQgYnkgdGhlIG1lbW9yeS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lbW9yeVN0cmF0ZWdpZXM6IElNZW1vcnlTdHJhdGVneVtdID0gW107XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBJbnRlcm5hbCBPbmx5XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBwcml2YXRlIHJlYWRvbmx5IF9fcmVzb3VyY2U6IENmbk1lbW9yeTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ09OU1RSVUNUT1JcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZW1vcnlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTZXQgcHJvcGVydGllcyBhbmQgZGVmYXVsdHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLm1lbW9yeU5hbWUgPSBwcm9wcy5tZW1vcnlOYW1lO1xuICAgIHRoaXMuZXhwaXJhdGlvbkR1cmF0aW9uID0gcHJvcHMuZXhwaXJhdGlvbkR1cmF0aW9uID8/IER1cmF0aW9uLmRheXMoOTApO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleTtcbiAgICB0aGlzLmV4ZWN1dGlvblJvbGUgPSBwcm9wcy5leGVjdXRpb25Sb2xlID8/IHRoaXMuX2NyZWF0ZU1lbW9yeVJvbGUoKTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuICAgIHRoaXMudGFncyA9IHByb3BzLnRhZ3M7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQZXJtaXNzaW9uc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvciBLTVMgcGVybWlzc2lvbnMgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvc3RvcmFnZS1lbmNyeXB0aW9uLmh0bWxcbiAgICBpZiAodGhpcy5rbXNLZXkpIHtcbiAgICAgIHRoaXMua21zS2V5LmdyYW50KHRoaXMuZXhlY3V0aW9uUm9sZSxcbiAgICAgICAgJ2ttczpDcmVhdGVHcmFudCcsXG4gICAgICAgICdrbXM6RGVjcnlwdCcsXG4gICAgICAgICdrbXM6RGVzY3JpYmVLZXknLFxuICAgICAgICAna21zOkdlbmVyYXRlRGF0YUtleScsXG4gICAgICAgICdrbXM6R2VuZXJhdGVEYXRhS2V5V2l0aG91dFBsYWludGV4dCcsXG4gICAgICAgICdrbXM6UmVFbmNyeXB0KicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvLyBWYWxpZGF0ZSBtZW1vcnkgbmFtZVxuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlTWVtb3J5TmFtZSwgdGhpcy5tZW1vcnlOYW1lLCB0aGlzKTtcblxuICAgIC8vIFZhbGlkYXRlIGV4cGlyYXRpb24gZHVyYXRpb25cbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZU1lbW9yeUV4cGlyYXRpb25EYXlzLCB0aGlzLmV4cGlyYXRpb25EdXJhdGlvbi50b0RheXMoKSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBtZW1vcnkgdGFnc1xuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlTWVtb3J5VGFncywgdGhpcy50YWdzLCB0aGlzKTtcblxuICAgIC8vIE1lbW9yeSBzdHJhdGVnaWVzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCB3aGVuIGJ1aWxkaW5nIHRoZW0sIHNvIG5vIG5lZWQgdG8gdmFsaWRhdGUgdGhlbSBoZXJlXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDRk4gUHJvcHMgLSBXaXRoIExhenkgc3VwcG9ydFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGNmblByb3BzOiBDZm5NZW1vcnlQcm9wcyA9IHtcbiAgICAgIG5hbWU6IHRoaXMubWVtb3J5TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgZXZlbnRFeHBpcnlEdXJhdGlvbjogdGhpcy5leHBpcmF0aW9uRHVyYXRpb24udG9EYXlzKCksXG4gICAgICBlbmNyeXB0aW9uS2V5QXJuOiB0aGlzLmttc0tleT8ua2V5QXJuLFxuICAgICAgbWVtb3J5RXhlY3V0aW9uUm9sZUFybjogdGhpcy5leGVjdXRpb25Sb2xlPy5yb2xlQXJuLFxuICAgICAgbWVtb3J5U3RyYXRlZ2llczogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLl9yZW5kZXJNZW1vcnlTdHJhdGVnaWVzKCkgfSwgeyBvbWl0RW1wdHlBcnJheTogdHJ1ZSB9KSxcbiAgICAgIHRhZ3M6IHRoaXMudGFncyxcbiAgICB9O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQ0ZOIFJlc291cmNlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5fX3Jlc291cmNlID0gbmV3IENmbk1lbW9yeSh0aGlzLCAnTWVtb3J5JywgY2ZuUHJvcHMpO1xuXG4gICAgdGhpcy5tZW1vcnlJZCA9IHRoaXMuX19yZXNvdXJjZS5hdHRyTWVtb3J5SWQ7XG4gICAgdGhpcy5tZW1vcnlBcm4gPSB0aGlzLl9fcmVzb3VyY2UuYXR0ck1lbW9yeUFybjtcbiAgICB0aGlzLnN0YXR1cyA9IHRoaXMuX19yZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMudXBkYXRlZEF0ID0gdGhpcy5fX3Jlc291cmNlLmF0dHJVcGRhdGVkQXQ7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLmZhaWx1cmVSZWFzb24gPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckZhaWx1cmVSZWFzb247XG5cbiAgICAvLyBBZGQgbWVtb3J5IHN0cmF0ZWdpZXMgdG8gdGhlIG1lbW9yeVxuICAgIGZvciAoY29uc3Qgc3RyYXRlZ3kgb2YgcHJvcHMubWVtb3J5U3RyYXRlZ2llcyA/PyBbXSkge3RoaXMuYWRkTWVtb3J5U3RyYXRlZ3koc3RyYXRlZ3kpO31cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIRUxQRVIgTUVUSE9EUyAtIGFkZFgoKVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEFkZCBtZW1vcnkgc3RyYXRlZ3kgdG8gdGhlIG1lbW9yeS5cbiAgICogQGRlZmF1bHQgLSBObyBtZW1vcnkgc3RyYXRlZ2llcy5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRNZW1vcnlTdHJhdGVneShtZW1vcnlTdHJhdGVneTogSU1lbW9yeVN0cmF0ZWd5KSB7XG4gICAgLy8gQWRkIHRoZSBtZW1vcnkgc3RyYXRlZ3kgdG8gdGhlIG1lbW9yeVxuICAgIHRoaXMubWVtb3J5U3RyYXRlZ2llcy5wdXNoKG1lbW9yeVN0cmF0ZWd5KTtcblxuICAgIC8vIEdyYW50IG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byB0aGUgZXhlY3V0aW9uIHJvbGVcbiAgICBjb25zdCBncmFudCA9IG1lbW9yeVN0cmF0ZWd5LmdyYW50KHRoaXMuZXhlY3V0aW9uUm9sZSBhcyBpYW0uSVJvbGUpO1xuICAgIGdyYW50Py5hcHBseUJlZm9yZSh0aGlzLl9fcmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZXhlY3V0aW9uIHJvbGUgbmVlZGVkIGZvciB0aGUgbWVtb3J5IHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcm9sZVxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZU1lbW9yeVJvbGUoKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm9sZTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBWQUxJREFUT1JTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBtZW1vcnkgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZU1lbW9yeVRhZ3MgPSAodGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghdGFncykge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gVGFncyBhcmUgb3B0aW9uYWxcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHRhZyBrZXkgYW5kIHZhbHVlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6ICdUYWcga2V5JyxcbiAgICAgICAgbWluTGVuZ3RoOiBNRU1PUllfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogTUVNT1JZX1RBR19NQVhfTEVOR1RILFxuICAgICAgfSwgc2NvcGUpKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBwYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAgICBjb25zdCB2YWxpZEtleVBhdHRlcm4gPSAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC87XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihrZXksICdUYWcga2V5JywgdmFsaWRLZXlQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZVxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiAnVGFnIHZhbHVlJyxcbiAgICAgICAgbWluTGVuZ3RoOiBNRU1PUllfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogTUVNT1JZX1RBR19NQVhfTEVOR1RILFxuICAgICAgfSwgc2NvcGUpKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm46IF5bYS16QS1aMC05XFxzLl86Lz0rQC1dKiRcbiAgICAgIGNvbnN0IHZhbGlkVmFsdWVQYXR0ZXJuID0gL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvO1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVGaWVsZFBhdHRlcm4odmFsdWUsICdUYWcgdmFsdWUnLCB2YWxpZFZhbHVlUGF0dGVybiwgdW5kZWZpbmVkLCBzY29wZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbWVtb3J5IG5hbWUgZm9ybWF0XG4gICAqIEBwYXJhbSBuYW1lIFRoZSBtZW1vcnkgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZW1vcnlOYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgZmllbGROYW1lOiAnTWVtb3J5IG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiBNRU1PUllfTkFNRV9NSU5fTEVOR1RILFxuICAgICAgbWF4TGVuZ3RoOiBNRU1PUllfTkFNRV9NQVhfTEVOR1RILFxuICAgIH0sIHNjb3BlKSk7XG5cbiAgICAvLyBDaGVjayBpZiBuYW1lIG1hdGNoZXMgdGhlIEFXUyBBUEkgcGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICAvLyBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHVwIHRvIDQ3IGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzXG4gICAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihuYW1lLCAnTWVtb3J5IG5hbWUnLCB2YWxpZE5hbWVQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBleHBpcmF0aW9uIGRheXNcbiAgICogQHBhcmFtIGV4cGlyYXRpb25EYXlzIFRoZSBtZW1vcnkgZXhwaXJhdGlvbiBkYXlzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZU1lbW9yeUV4cGlyYXRpb25EYXlzID0gKGV4cGlyYXRpb25EYXlzOiBudW1iZXIpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZXhwaXJhdGlvbkRheXMpKSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGlmIChleHBpcmF0aW9uRGF5cyA8IE1FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOIHx8IGV4cGlyYXRpb25EYXlzID4gTUVNT1JZX0VYUElSQVRJT05fREFZU19NQVgpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBNZW1vcnkgZXhwaXJhdGlvbiBkYXlzIG11c3QgYmUgYmV0d2VlbiAke01FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOfSBhbmQgJHtNRU1PUllfRVhQSVJBVElPTl9EQVlTX01BWH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBSRU5ERVJFUlNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIG1lbW9yeSBzdHJhdGVnaWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBNZW1vcnlTdHJhdGVneVByb3BlcnR5IG9iamVjdHMgaW4gQ2xvdWRGb3JtYXRpb24gZm9ybWF0LCBvciB1bmRlZmluZWQgaWYgbm8gc3RyYXRlZ2llcyBhcmUgZGVmaW5lZFxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBpZiBubyBzdHJhdGVnaWVzIGFyZSBkZWZpbmVkIG9yIGFycmF5IGlzIGVtcHR5XG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyTWVtb3J5U3RyYXRlZ2llcygpOiBiZWRyb2NrYWdlbnRjb3JlLkNmbk1lbW9yeS5NZW1vcnlTdHJhdGVneVByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5tZW1vcnlTdHJhdGVnaWVzIHx8IHRoaXMubWVtb3J5U3RyYXRlZ2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWVtb3J5U3RyYXRlZ2llcy5tYXAobXMgPT4gbXMucmVuZGVyKCkpO1xuICB9XG59XG4iXX0=
|
|
692
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsNkNBQStHO0FBRS9HLDJFQUE2RTtBQUM3RSwrREFNb0M7QUFDcEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBSTFFLG1DQUFzQztBQUN0Qyw2REFBdUc7QUFFdkc7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUVqQzs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUNyQzs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQWlIdkM7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFzQixVQUFXLFNBQVEsc0JBQVE7O0lBYS9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBdUIsRUFBRTtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN6QjtJQUNEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUNqRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM5QixLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsQ0FB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RUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYseURBQXlEO1FBQ3pELFlBQVk7UUFDWix5REFBeUQ7UUFDekQ7Ozs7OztXQU1HO1FBQ0ssdUJBQXVCO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakUsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEOztZQXBVVSx1REFBTTs7Ozs7QUFBTix3QkFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBEdXJhdGlvbiwgSVJlc291cmNlLCBMYXp5LCBSZXNvdXJjZSwgUmVzb3VyY2VQcm9wcywgVG9rZW4sIE5hbWVzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgeyBDZm5NZW1vcnksIENmbk1lbW9yeVByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHtcbiAgRGltZW5zaW9uc01hcCxcbiAgTWV0cmljLFxuICBNZXRyaWNPcHRpb25zLFxuICBNZXRyaWNQcm9wcyxcbiAgU3RhdHMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBJQ29uc3RydWN0LCBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbi8vIEludGVybmFsIExpYnNcbmltcG9ydCB7IElNZW1vcnlTdHJhdGVneSB9IGZyb20gJy4vbWVtb3J5LXN0cmF0ZWd5JztcbmltcG9ydCB7IE1lbW9yeVBlcm1zIH0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpZWxkUGF0dGVybiwgdmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCwgdGhyb3dJZkludmFsaWQgfSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RBTlRTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBicm93c2VyIG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfTkFNRV9NSU5fTEVOR1RIID0gMTtcblxuLyoqXG4gKiBNYXhpbXVtIGxlbmd0aCBmb3IgYnJvd3NlciBuYW1lXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTUVNT1JZX05BTUVfTUFYX0xFTkdUSCA9IDQ4O1xuXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBicm93c2VyIHRhZ3NcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfVEFHX01JTl9MRU5HVEggPSAxO1xuXG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBicm93c2VyIHRhZ3NcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfVEFHX01BWF9MRU5HVEggPSAyNTY7XG5cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIG1lbW9yeSBleHBpcmF0aW9uIGRheXNcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfRVhQSVJBVElPTl9EQVlTX01JTiA9IDc7XG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBtZW1vcnkgZXhwaXJhdGlvbiBkYXlzXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTUVNT1JZX0VYUElSQVRJT05fREFZU19NQVggPSAzNjU7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogSW50ZXJmYWNlIGZvciBNZW1vcnkgcmVzb3VyY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU1lbW9yeSBleHRlbmRzIElSZXNvdXJjZSwgaWFtLklHcmFudGFibGUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgbWVtb3J5IHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBtZW1vcnlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgbWVtb3J5IHRvIGFjY2VzcyBBV1Mgc2VydmljZXMuXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuICAvKipcbiAgICogQ3VzdG9tIEtNUyBrZXkgZm9yIGVuY3J5cHRpb24gKGlmIHByb3ZpZGVkKVxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZW1vcnlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIG1lbW9yeSB3YXMgbGFzdCB1cGRhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBtZW1vcnkgd2FzIGNyZWF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGFjdGlvbnMgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHdyaXRlIGNvbnRlbnQgdG8gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudFdyaXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICogQm90aCBTaG9ydC1UZXJtIE1lbW9yeSAoU1RNKSBhbmQgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKS5cbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudFJlYWRTaG9ydFRlcm1NZW1vcnkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIExvbmctVGVybSBNZW1vcnkgKExUTSkgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudFJlYWRMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudERlbGV0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBncmFudERlbGV0ZVNob3J0VGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIExvbmctVGVybSBNZW1vcnkgKExUTSkgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RGVsZXRlTG9uZ1Rlcm1NZW1vcnkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY29udHJvbCBwbGFuZSBvZiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50QWRtaW4oZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIGRvIGV2ZXJ5IGFjdGlvbiBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWV0cmljc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIG1lbW9yeS5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIHJlbGF0ZWQgdG8gdGhlIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgbWV0cmljRm9yQXBpT3BlcmF0aW9uKG1ldHJpY05hbWU6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBtZWFzdXJpbmcgdGhlIGxhdGVuY3kgb2YgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIG1ldHJpY0xhdGVuY3lGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgQVBJIHJlcXVlc3RzIG1hZGUgZm9yIGEgc3BlY2lmaWMgbWVtb3J5IG9wZXJhdGlvbi5cbiAgICovXG4gIG1ldHJpY0ludm9jYXRpb25zRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGVycm9ycyBmb3IgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIG1ldHJpY0Vycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBjcmVhdGVkIG1lbW9yeSBldmVudHMgYW5kIG1lbW9yeSByZWNvcmRzLlxuICAgKi9cbiAgbWV0cmljRXZlbnRDcmVhdGlvbkNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICBBQlNUUkFDVCBCQVNFIENMQVNTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGEgTWVtb3J5LlxuICogQ29udGFpbnMgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyB2YWxpZCBmb3IgTWVtb3JpZXMgZWl0aGVyIGNyZWF0ZWQgd2l0aCBDREsgb3IgaW1wb3J0ZWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNZW1vcnlCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJTWVtb3J5IHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG1lbW9yeUFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbWVtb3J5SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlc291cmNlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICB9XG4gIC8qKlxuICAgKiBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICogQHBhcmFtIGFjdGlvbnMgLSBUaGUgYWN0aW9ucyB0byBncmFudFxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5tZW1vcnlBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gd3JpdGUgY29udGVudCB0byBzaG9ydC10ZXJtIG1lbW9yeS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZUV2ZW50J10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLlNUTS5XUklURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqIEJvdGggU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgYW5kIExvbmctVGVybSBNZW1vcnkgKExUTSkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpHZXRNZW1vcnlSZWNvcmQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOlJldHJpZXZlTWVtb3J5UmVjb3JkcycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdE1lbW9yeVJlY29yZHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RBY3RvcnMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RTZXNzaW9uc10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuUkVBRF9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgY29udGVudHMgb2YgdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpHZXRFdmVudCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEV2ZW50cycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEFjdG9ycycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdFNlc3Npb25zJyxdIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudFJlYWRTaG9ydFRlcm1NZW1vcnkoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLlNUTS5SRUFEX1BFUk1TKTtcbiAgfVxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBMb25nLVRlcm0gTWVtb3J5IChMVE0pIGNvbnRlbnRzIG9mIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6R2V0TWVtb3J5UmVjb3JkJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpSZXRyaWV2ZU1lbW9yeVJlY29yZHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0QWN0b3JzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0U2Vzc2lvbnMnLF0gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50UmVhZExvbmdUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5MVE0uUkVBRF9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIEJvdGggU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgYW5kIExvbmctVGVybSBNZW1vcnkgKExUTSkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IGRlbGV0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUV2ZW50JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnlSZWNvcmQnXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnREZWxldGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLk1lbW9yeVBlcm1zLkRFTEVURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZGVsZXRlIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGNvbnRlbnQgb24gdGhpcyBtZW1vcnkuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IGRlbGV0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUV2ZW50J10gb24gdGhpcy5tZW1vcnlBcm5cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIGdyYW50RGVsZXRlU2hvcnRUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5TVE0uREVMRVRFX1BFUk1TKTtcbiAgfVxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50IG9uIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBkZWxldGUgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnlSZWNvcmQnXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnREZWxldGVMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uTWVtb3J5UGVybXMuTFRNLkRFTEVURV9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjb250cm9sIHBsYW5lIG9mIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBhZG1pbiBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZU1lbW9yeScsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0TWVtb3J5JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnknLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZU1lbW9yeSddIG9uIHRoaXMubWVtb3J5QXJuXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBncmFudEFkbWluKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5BRE1JTl9QRVJNUyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gZG8gZXZlcnkgYWN0aW9uIG9uIHRoaXMgbWVtb3J5LlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZUV2ZW50JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRFdmVudCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlRXZlbnQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeVJlY29yZCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6UmV0cmlldmVNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0TWVtb3J5UmVjb3JkcycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEFjdG9ycycsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6TGlzdFNlc3Npb25zJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVNZW1vcnknLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeScsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlTWVtb3J5JyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpVcGRhdGVNZW1vcnknXSBvbiB0aGlzLm1lbW9yeUFyblxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5NZW1vcnlQZXJtcy5GVUxMX0FDQ0VTU19QRVJNUyk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWV0cmljc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIG1ldHJpYyB3aWxsIGJlIGNhbGN1bGF0ZWQgYXMgYSBzdW0gb3ZlciBhIHBlcmlvZCBvZiA1IG1pbnV0ZXMuXG4gICAqIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnkgdXNpbmcgdGhlIGBzdGF0aXN0aWNgIGFuZCBgcGVyaW9kYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgY29uc3QgbWV0cmljUHJvcHM6IE1ldHJpY1Byb3BzID0ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJyxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IC4uLmRpbWVuc2lvbnMsIFJlc291cmNlOiB0aGlzLm1lbW9yeUFybiB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmVNZXRyaWMobWV0cmljUHJvcHMpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyByZWxhdGVkIHRvIHRoZSBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGb3JBcGlPcGVyYXRpb24oXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIHByb3BzPzogTWV0cmljT3B0aW9ucyxcbiAgKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMobWV0cmljTmFtZSwgeyBPcGVyYXRpb246IG9wZXJhdGlvbiB9LCBwcm9wcyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBtZWFzdXJpbmcgdGhlIGxhdGVuY3kgb2YgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG1lbW9yeS5cbiAgICpcbiAgICogVGhlIGxhdGVuY3kgbWV0cmljIHJlcHJlc2VudHMgdGhlIHRvdGFsIHRpbWUgZWxhcHNlZCBiZXR3ZWVuIHJlY2VpdmluZyB0aGUgcmVxdWVzdCBhbmQgc2VuZGluZ1xuICAgKiB0aGUgZmluYWwgcmVzcG9uc2UgdG9rZW4sIG1lYXN1cmluZyBjb21wbGV0ZSBlbmQtdG8tZW5kIHByb2Nlc3NpbmcgdGltZS5cbiAgICpcbiAgICogRm9yIG1lbW9yeSBjcmVhdGlvbiBldmVudHMgc3BlY2lmaWNhbGx5LCB0aGlzIG1lYXN1cmVzIHRoZSB0aW1lIGZyb20gdGhlIGxhc3QgQ3JlYXRlRXZlbnRcbiAgICogdGhhdCBtZXQgc3RyYXRlZ3kgY3JpdGVyaWEgdW50aWwgbWVtb3J5IHN0b3JhZ2UgaXMgY29tcGxldGVkLlxuICAgKlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0xhdGVuY3lGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdMYXRlbmN5Jywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuQVZFUkFHRSwgLi4ucHJvcHMgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgQVBJIHJlcXVlc3RzIG1hZGUgZm9yIGEgc3BlY2lmaWMgbWVtb3J5IG9wZXJhdGlvbiBsaWtlXG4gICAqIGBDcmVhdGVFdmVudGAsIGBMaXN0RXZlbnRzYCwgYFJldHJpZXZlTWVtb3J5UmVjb3Jkc2AgLi4uXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSW52b2NhdGlvbnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdJbnZvY2F0aW9ucycsIG9wZXJhdGlvbiwge1xuICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlcnJvcnMgZm9yIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignRXJyb3JzJywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzaG9ydC10ZXJtIG1lbW9yeSBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRXZlbnRDcmVhdGlvbkNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdDcmVhdGlvbkNvdW50JywgeyBJdGVtVHlwZTogJ0V2ZW50JyB9LCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBsb25nLXRlcm0gbWVtb3J5IHJlY29yZHNcbiAgICogY3JlYXRlZCBieSB0aGUgbG9uZy10ZXJtIGV4dHJhY3Rpb24gc3RyYXRlZ2llcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNNZW1vcnlSZWNvcmRDcmVhdGlvbkNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFxuICAgICAgJ0NyZWF0aW9uQ291bnQnLFxuICAgICAgeyBJdGVtVHlwZTogJ01lbW9yeVJlY29yZHNFeHRyYWN0ZWQnIH0sXG4gICAgICB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9LFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBjcmVhdGUgYSBtZXRyaWMuXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZU1ldHJpYyhwcm9wczogTWV0cmljUHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlZ2lvbjogcHJvcHM/LnJlZ2lvbiA/PyB0aGlzLnN0YWNrLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IHByb3BzPy5hY2NvdW50ID8/IHRoaXMuc3RhY2suYWNjb3VudCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFBST1BTIEZPUiBORVcgQ09OU1RSVUNUXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgTWVtb3J5IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5UHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1lbW9yeVxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKVxuICAgKiBUaGUgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNhbiBiZSB1cCB0byA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICogUGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogU2hvcnQtdGVybSBtZW1vcnkgZXhwaXJhdGlvbiBpbiBkYXlzIChiZXR3ZWVuIDcgYW5kIDM2NSkuXG4gICAqIFNldHMgdGhlIHNob3J0LXRlcm0gKHJhdyBldmVudCkgbWVtb3J5IHJldGVudGlvbi5cbiAgICogRXZlbnRzIG9sZGVyIHRoYW4gdGhlIHNwZWNpZmllZCBkdXJhdGlvbiB3aWxsIGV4cGlyZSBhbmQgbm8gbG9uZ2VyIGJlIHN0b3JlZC5cbiAgICogQGRlZmF1bHQgLSA5MCBkYXlzXG4gICAqL1xuICByZWFkb25seSBleHBpcmF0aW9uRHVyYXRpb24/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgbWVtb3J5XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpLCAtIChoeXBoZW4pIGFuZCBzcGFjZXNcbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBoYXZlIHVwIHRvIDIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogQ3VzdG9tIEtNUyBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uLlxuICAgKiBAZGVmYXVsdCAtIFlvdXIgZGF0YSBpcyBlbmNyeXB0ZWQgd2l0aCBhIGtleSB0aGF0IEFXUyBvd25zIGFuZCBtYW5hZ2VzIGZvciB5b3VcbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICAvKipcbiAgICogSWYgeW91IG5lZWQgbG9uZy10ZXJtIG1lbW9yeSBmb3IgY29udGV4dCByZWNhbGwgYWNyb3NzIHNlc3Npb25zLFxuICAgKiB5b3UgY2FuIHNldHVwIG1lbW9yeSBleHRyYWN0aW9uIHN0cmF0ZWdpZXMgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgbWVtb3J5IGZyb20gdGhlIHJhdyBldmVudHMuXG4gICAqIEBkZWZhdWx0IC0gTm8gZXh0cmFjdGlvbiBzdHJhdGVnaWVzIChzaG9ydCB0ZXJtIG1lbW9yeSBvbmx5KVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U3RyYXRlZ2llcz86IElNZW1vcnlTdHJhdGVneVtdO1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBtZW1vcnkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlc1xuICAgKiB3aGVuIHVzaW5nIGN1c3RvbSBzdHJhdGVnaWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRhZ3MgKG9wdGlvbmFsKVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBtZW1vcnkgcmVzb3VyY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgQVRUUlMgRk9SIElNUE9SVEVEIENPTlNUUlVDVFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBzcGVjaWZ5aW5nIGFuIGltcG9ydGVkIE1lbW9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIG1lbW9yeS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSBhc3NvY2lhdGVkIHRvIHRoZSBtZW1vcnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBtZW1vcnkgd2FzIGxhc3QgdXBkYXRlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gbGFzdCB1cGRhdGVkIHRpbWVzdGFtcCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgS01TIGVuY3J5cHRpb24ga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lbW9yeVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBBbiBBV1MgbWFuYWdlZCBrZXkgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5QXJuPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgbWVtb3J5LlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBzdGF0dXMgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjcmVhdGVkIHRpbWVzdGFtcCBvZiB0aGUgbWVtb3J5LlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBjcmVhdGVkIHRpbWVzdGFtcCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTG9uZy10ZXJtIG1lbW9yeSBzdG9yZSBmb3IgZXh0cmFjdGVkIGluc2lnaHRzIGxpa2UgdXNlciBwcmVmZXJlbmNlcywgc2VtYW50aWMgZmFjdHMgYW5kIHN1bW1hcmllcy5cbiAqIEVuYWJsZXMga25vd2xlZGdlIHJldGVudGlvbiBhY3Jvc3Mgc2Vzc2lvbnMgYnkgc3RvcmluZyB1c2VyIHByZWZlcmVuY2VzIChlLmcuIGNvZGluZyBzdHlsZSksXG4gKiBzZW1hbnRpYyBmYWN0cyAoZS5nLiBsZWFybmVkIGluZm8pIGFuZCBpbnRlcmFjdGlvbiBzdW1tYXJpZXMgZm9yIGNvbnRleHQgb3B0aW1pemF0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9tZW1vcnkuaHRtbFxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6TWVtb3J5XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBNZW1vcnkgZXh0ZW5kcyBNZW1vcnlCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuTWVtb3J5JztcblxuICAvKipcbiAgICogU3RhdGljIE1ldGhvZCBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIEJlZHJvY2sgQWdlbnRDb3JlIE1lbW9yeS5cbiAgICovXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIE1lbW9yeSByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBtZW1vcnkncyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgLSBBdHRyaWJ1dGVzIG9mIHRoZSBleGlzdGluZyBicm93c2VyIGN1c3RvbVxuICAgKiBAcmV0dXJucyBBbiBJQnJvd3NlckN1c3RvbSByZWZlcmVuY2UgdG8gdGhlIGV4aXN0aW5nIGJyb3dzZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU1lbW9yeUF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IE1lbW9yeUF0dHJpYnV0ZXMpOiBJTWVtb3J5IHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBNZW1vcnlCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBtZW1vcnlBcm4gPSBhdHRycy5tZW1vcnlBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbWVtb3J5SWQgPSBBcm4uc3BsaXQoYXR0cnMubWVtb3J5QXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25Sb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsIGAke2lkfVJvbGVgLCBhdHRycy5yb2xlQXJuKTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBrbXNLZXkgPSBhdHRycy5rbXNLZXlBcm4gPyBrbXMuS2V5LmZyb21LZXlBcm4oc2NvcGUsIGAke2lkfUtleWAsIGF0dHJzLmttc0tleUFybikgOiB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0ID0gYXR0cnMudXBkYXRlZEF0O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IGF0dHJzLnN0YXR1cztcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSBhdHRycy5jcmVhdGVkQXQ7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuXG4gICAgICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLmV4ZWN1dGlvblJvbGUgfHwgbmV3IGlhbS5Vbmtub3duUHJpbmNpcGFsKHsgcmVzb3VyY2U6IHRoaXMgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIG5ldyBNZW1vcnlcbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEF0dHJpYnV0ZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBtZW1vcnkgcmVzb3VyY2UuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZW1vcnlBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtZW1vcnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZW1vcnlOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lbW9yeS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lbW9yeUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXhwaXJhdGlvbiBkYXlzIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhwaXJhdGlvbkR1cmF0aW9uPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgZmFpbHVyZSByZWFzb24gb2YgdGhlIGJyb3dzZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVSZWFzb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gcm9sZSBvZiB0aGUgbWVtb3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNyZWF0ZWQgdGltZXN0YW1wIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVwZGF0ZWQgYXQgdGltZXN0YW1wIG9mIHRoZSBtZW1vcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGFncyBhcHBsaWVkIHRvIHRoaXMgYnJvd3NlciByZXNvdXJjZVxuICAgKiBBIG1hcCBvZiBrZXktdmFsdWUgcGFpcnMgZm9yIHJlc291cmNlIHRhZ2dpbmdcbiAgICogQGRlZmF1bHQgLSBObyB0YWdzIGFwcGxpZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIG1lbW9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBtZW1vcnkgc3RyYXRlZ2llcyB1c2VkIGJ5IHRoZSBtZW1vcnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZW1vcnlTdHJhdGVnaWVzOiBJTWVtb3J5U3RyYXRlZ3lbXSA9IFtdO1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSW50ZXJuYWwgT25seVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcHJpdmF0ZSByZWFkb25seSBfX3Jlc291cmNlOiBDZm5NZW1vcnk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIENPTlNUUlVDVE9SXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTWVtb3J5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiA0OCBjaGFyYWN0ZXJzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWJlZHJvY2thZ2VudGNvcmUtbWVtb3J5Lmh0bWwjY2ZuLWJlZHJvY2thZ2VudGNvcmUtbWVtb3J5LW5hbWVcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHM/Lm1lbW9yeU5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2V0IHByb3BlcnRpZXMgYW5kIGRlZmF1bHRzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5tZW1vcnlOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5leHBpcmF0aW9uRHVyYXRpb24gPSBwcm9wcy5leHBpcmF0aW9uRHVyYXRpb24gPz8gRHVyYXRpb24uZGF5cyg5MCk7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMua21zS2V5ID0gcHJvcHMua21zS2V5O1xuICAgIHRoaXMuZXhlY3V0aW9uUm9sZSA9IHByb3BzLmV4ZWN1dGlvblJvbGUgPz8gdGhpcy5fY3JlYXRlTWVtb3J5Um9sZSgpO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLmV4ZWN1dGlvblJvbGU7XG4gICAgdGhpcy50YWdzID0gcHJvcHMudGFncztcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFBlcm1pc3Npb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9yIEtNUyBwZXJtaXNzaW9ucyBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9zdG9yYWdlLWVuY3J5cHRpb24uaHRtbFxuICAgIGlmICh0aGlzLmttc0tleSkge1xuICAgICAgdGhpcy5rbXNLZXkuZ3JhbnQodGhpcy5leGVjdXRpb25Sb2xlLFxuICAgICAgICAna21zOkNyZWF0ZUdyYW50JyxcbiAgICAgICAgJ2ttczpEZWNyeXB0JyxcbiAgICAgICAgJ2ttczpEZXNjcmliZUtleScsXG4gICAgICAgICdrbXM6R2VuZXJhdGVEYXRhS2V5JyxcbiAgICAgICAgJ2ttczpHZW5lcmF0ZURhdGFLZXlXaXRob3V0UGxhaW50ZXh0JyxcbiAgICAgICAgJ2ttczpSZUVuY3J5cHQqJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGlvbnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8vIFZhbGlkYXRlIG1lbW9yeSBuYW1lXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVNZW1vcnlOYW1lLCB0aGlzLm1lbW9yeU5hbWUsIHRoaXMpO1xuXG4gICAgLy8gVmFsaWRhdGUgZXhwaXJhdGlvbiBkdXJhdGlvblxuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlTWVtb3J5RXhwaXJhdGlvbkRheXMsIHRoaXMuZXhwaXJhdGlvbkR1cmF0aW9uLnRvRGF5cygpKTtcblxuICAgIC8vIFZhbGlkYXRlIG1lbW9yeSB0YWdzXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVNZW1vcnlUYWdzLCB0aGlzLnRhZ3MsIHRoaXMpO1xuXG4gICAgLy8gTWVtb3J5IHN0cmF0ZWdpZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIHdoZW4gYnVpbGRpbmcgdGhlbSwgc28gbm8gbmVlZCB0byB2YWxpZGF0ZSB0aGVtIGhlcmVcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENGTiBQcm9wcyAtIFdpdGggTGF6eSBzdXBwb3J0XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgY2ZuUHJvcHM6IENmbk1lbW9yeVByb3BzID0ge1xuICAgICAgbmFtZTogdGhpcy5tZW1vcnlOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBldmVudEV4cGlyeUR1cmF0aW9uOiB0aGlzLmV4cGlyYXRpb25EdXJhdGlvbi50b0RheXMoKSxcbiAgICAgIGVuY3J5cHRpb25LZXlBcm46IHRoaXMua21zS2V5Py5rZXlBcm4sXG4gICAgICBtZW1vcnlFeGVjdXRpb25Sb2xlQXJuOiB0aGlzLmV4ZWN1dGlvblJvbGU/LnJvbGVBcm4sXG4gICAgICBtZW1vcnlTdHJhdGVnaWVzOiBMYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMuX3JlbmRlck1lbW9yeVN0cmF0ZWdpZXMoKSB9LCB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0pLFxuICAgICAgdGFnczogdGhpcy50YWdzLFxuICAgIH07XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDRk4gUmVzb3VyY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLl9fcmVzb3VyY2UgPSBuZXcgQ2ZuTWVtb3J5KHRoaXMsICdNZW1vcnknLCBjZm5Qcm9wcyk7XG5cbiAgICB0aGlzLm1lbW9yeUlkID0gdGhpcy5fX3Jlc291cmNlLmF0dHJNZW1vcnlJZDtcbiAgICB0aGlzLm1lbW9yeUFybiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyTWVtb3J5QXJuO1xuICAgIHRoaXMuc3RhdHVzID0gdGhpcy5fX3Jlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy51cGRhdGVkQXQgPSB0aGlzLl9fcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMuZmFpbHVyZVJlYXNvbiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyRmFpbHVyZVJlYXNvbjtcblxuICAgIC8vIEFkZCBtZW1vcnkgc3RyYXRlZ2llcyB0byB0aGUgbWVtb3J5XG4gICAgZm9yIChjb25zdCBzdHJhdGVneSBvZiBwcm9wcz8ubWVtb3J5U3RyYXRlZ2llcyA/PyBbXSkge3RoaXMuYWRkTWVtb3J5U3RyYXRlZ3koc3RyYXRlZ3kpO31cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIRUxQRVIgTUVUSE9EUyAtIGFkZFgoKVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEFkZCBtZW1vcnkgc3RyYXRlZ3kgdG8gdGhlIG1lbW9yeS5cbiAgICogQGRlZmF1bHQgLSBObyBtZW1vcnkgc3RyYXRlZ2llcy5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRNZW1vcnlTdHJhdGVneShtZW1vcnlTdHJhdGVneTogSU1lbW9yeVN0cmF0ZWd5KSB7XG4gICAgLy8gQWRkIHRoZSBtZW1vcnkgc3RyYXRlZ3kgdG8gdGhlIG1lbW9yeVxuICAgIHRoaXMubWVtb3J5U3RyYXRlZ2llcy5wdXNoKG1lbW9yeVN0cmF0ZWd5KTtcblxuICAgIC8vIEdyYW50IG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byB0aGUgZXhlY3V0aW9uIHJvbGVcbiAgICBjb25zdCBncmFudCA9IG1lbW9yeVN0cmF0ZWd5LmdyYW50KHRoaXMuZXhlY3V0aW9uUm9sZSBhcyBpYW0uSVJvbGUpO1xuICAgIGdyYW50Py5hcHBseUJlZm9yZSh0aGlzLl9fcmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZXhlY3V0aW9uIHJvbGUgbmVlZGVkIGZvciB0aGUgbWVtb3J5IHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcm9sZVxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZU1lbW9yeVJvbGUoKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm9sZTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBWQUxJREFUT1JTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBtZW1vcnkgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZU1lbW9yeVRhZ3MgPSAodGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghdGFncykge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gVGFncyBhcmUgb3B0aW9uYWxcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHRhZyBrZXkgYW5kIHZhbHVlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6ICdUYWcga2V5JyxcbiAgICAgICAgbWluTGVuZ3RoOiBNRU1PUllfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogTUVNT1JZX1RBR19NQVhfTEVOR1RILFxuICAgICAgfSwgc2NvcGUpKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBwYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAgICBjb25zdCB2YWxpZEtleVBhdHRlcm4gPSAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC87XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihrZXksICdUYWcga2V5JywgdmFsaWRLZXlQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZVxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiAnVGFnIHZhbHVlJyxcbiAgICAgICAgbWluTGVuZ3RoOiBNRU1PUllfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogTUVNT1JZX1RBR19NQVhfTEVOR1RILFxuICAgICAgfSwgc2NvcGUpKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm46IF5bYS16QS1aMC05XFxzLl86Lz0rQC1dKiRcbiAgICAgIGNvbnN0IHZhbGlkVmFsdWVQYXR0ZXJuID0gL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvO1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVGaWVsZFBhdHRlcm4odmFsdWUsICdUYWcgdmFsdWUnLCB2YWxpZFZhbHVlUGF0dGVybiwgdW5kZWZpbmVkLCBzY29wZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbWVtb3J5IG5hbWUgZm9ybWF0XG4gICAqIEBwYXJhbSBuYW1lIFRoZSBtZW1vcnkgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZW1vcnlOYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgZmllbGROYW1lOiAnTWVtb3J5IG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiBNRU1PUllfTkFNRV9NSU5fTEVOR1RILFxuICAgICAgbWF4TGVuZ3RoOiBNRU1PUllfTkFNRV9NQVhfTEVOR1RILFxuICAgIH0sIHNjb3BlKSk7XG5cbiAgICAvLyBDaGVjayBpZiBuYW1lIG1hdGNoZXMgdGhlIEFXUyBBUEkgcGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICAvLyBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHVwIHRvIDQ3IGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzXG4gICAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihuYW1lLCAnTWVtb3J5IG5hbWUnLCB2YWxpZE5hbWVQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBleHBpcmF0aW9uIGRheXNcbiAgICogQHBhcmFtIGV4cGlyYXRpb25EYXlzIFRoZSBtZW1vcnkgZXhwaXJhdGlvbiBkYXlzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZU1lbW9yeUV4cGlyYXRpb25EYXlzID0gKGV4cGlyYXRpb25EYXlzOiBudW1iZXIpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZXhwaXJhdGlvbkRheXMpKSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGlmIChleHBpcmF0aW9uRGF5cyA8IE1FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOIHx8IGV4cGlyYXRpb25EYXlzID4gTUVNT1JZX0VYUElSQVRJT05fREFZU19NQVgpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBNZW1vcnkgZXhwaXJhdGlvbiBkYXlzIG11c3QgYmUgYmV0d2VlbiAke01FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOfSBhbmQgJHtNRU1PUllfRVhQSVJBVElPTl9EQVlTX01BWH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBSRU5ERVJFUlNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIG1lbW9yeSBzdHJhdGVnaWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBNZW1vcnlTdHJhdGVneVByb3BlcnR5IG9iamVjdHMgaW4gQ2xvdWRGb3JtYXRpb24gZm9ybWF0LCBvciB1bmRlZmluZWQgaWYgbm8gc3RyYXRlZ2llcyBhcmUgZGVmaW5lZFxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBpZiBubyBzdHJhdGVnaWVzIGFyZSBkZWZpbmVkIG9yIGFycmF5IGlzIGVtcHR5XG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyTWVtb3J5U3RyYXRlZ2llcygpOiBiZWRyb2NrYWdlbnRjb3JlLkNmbk1lbW9yeS5NZW1vcnlTdHJhdGVneVByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5tZW1vcnlTdHJhdGVnaWVzIHx8IHRoaXMubWVtb3J5U3RyYXRlZ2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWVtb3J5U3RyYXRlZ2llcy5tYXAobXMgPT4gbXMucmVuZGVyKCkpO1xuICB9XG59XG4iXX0=
|
|
@@ -32,6 +32,16 @@ export interface OverrideConfig {
|
|
|
32
32
|
*/
|
|
33
33
|
readonly appendToPrompt: string;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Configuration for episodic memory reflection
|
|
37
|
+
*/
|
|
38
|
+
export interface EpisodicReflectionConfiguration {
|
|
39
|
+
/**
|
|
40
|
+
* Namespaces for episodic reflection
|
|
41
|
+
* Minimum 1 namespace required
|
|
42
|
+
*/
|
|
43
|
+
readonly namespaces: string[];
|
|
44
|
+
}
|
|
35
45
|
/**
|
|
36
46
|
* Configuration parameters for a memory strategy that can override
|
|
37
47
|
* existing built-in default prompts/models
|
|
@@ -70,6 +80,12 @@ export interface ManagedStrategyProps extends MemoryStrategyCommonProps {
|
|
|
70
80
|
* /actor/actor-3afc5aa8fef9/strategy/summarization-fy5c5fwc7/session/session-qj7tpd1kvr8
|
|
71
81
|
*/
|
|
72
82
|
readonly namespaces: string[];
|
|
83
|
+
/**
|
|
84
|
+
* Configuration for episodic memory reflection (only applicable for EPISODIC strategy type)
|
|
85
|
+
* Defines additional namespaces for reflection-based episodic recall
|
|
86
|
+
* @default - No reflection configuration
|
|
87
|
+
*/
|
|
88
|
+
readonly reflectionConfiguration?: EpisodicReflectionConfiguration;
|
|
73
89
|
}
|
|
74
90
|
/**
|
|
75
91
|
* Managed memory strategy that handles both built-in and override configurations.
|
|
@@ -91,6 +107,10 @@ export declare class ManagedMemoryStrategy implements IMemoryStrategy {
|
|
|
91
107
|
* The configuration for the custom extraction.
|
|
92
108
|
*/
|
|
93
109
|
readonly extractionOverride?: OverrideConfig;
|
|
110
|
+
/**
|
|
111
|
+
* The configuration for episodic reflection.
|
|
112
|
+
*/
|
|
113
|
+
readonly reflectionConfiguration?: EpisodicReflectionConfiguration;
|
|
94
114
|
readonly strategyType: MemoryStrategyType;
|
|
95
115
|
/**
|
|
96
116
|
* Constructor to create a new managed memory strategy
|
|
@@ -130,4 +150,10 @@ export declare class ManagedMemoryStrategy implements IMemoryStrategy {
|
|
|
130
150
|
* @returns Array of validation error messages, empty if valid
|
|
131
151
|
*/
|
|
132
152
|
private _validateMemoryStrategyNamespaces;
|
|
153
|
+
/**
|
|
154
|
+
* Validates the episodic reflection configuration
|
|
155
|
+
* @param config - The reflection configuration to validate
|
|
156
|
+
* @returns Array of validation error messages, empty if valid
|
|
157
|
+
*/
|
|
158
|
+
private _validateReflectionConfiguration;
|
|
133
159
|
}
|