@aws-cdk/aws-mediaconnect-alpha 2.270.0-alpha.0 → 2.271.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 +237 -231
- package/.jsii.tabl.json.gz +0 -0
- package/README.md +12 -12
- package/lib/bridge-output.js +1 -1
- package/lib/bridge-source.js +2 -2
- package/lib/bridge.js +5 -5
- package/lib/flow-entitlement.js +1 -1
- package/lib/flow-output.js +2 -2
- package/lib/flow-source-configuration.js +4 -4
- package/lib/flow-source.js +1 -1
- package/lib/flow.js +10 -10
- package/lib/gateway.js +1 -1
- package/lib/mediaconnect-grants.generated.js +2 -2
- package/lib/router-input.d.ts +5 -3
- package/lib/router-input.js +10 -9
- package/lib/router-network-interface.js +2 -2
- package/lib/router-output.d.ts +5 -3
- package/lib/router-output.js +8 -7
- package/lib/shared.js +9 -9
- package/package.json +11 -6
package/lib/router-input.js
CHANGED
|
@@ -50,7 +50,7 @@ const shared_1 = require("./shared");
|
|
|
50
50
|
*/
|
|
51
51
|
class RouterInputProtocolOptions {
|
|
52
52
|
value;
|
|
53
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInputProtocolOptions", version: "2.
|
|
53
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInputProtocolOptions", version: "2.271.0-alpha.0" };
|
|
54
54
|
/** Real-time Transport Protocol */
|
|
55
55
|
static RTP = new RouterInputProtocolOptions('RTP');
|
|
56
56
|
/** Reliable Internet Stream Transport */
|
|
@@ -81,7 +81,7 @@ exports.RouterInputProtocolOptions = RouterInputProtocolOptions;
|
|
|
81
81
|
*/
|
|
82
82
|
class RoutingScope {
|
|
83
83
|
value;
|
|
84
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RoutingScope", version: "2.
|
|
84
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RoutingScope", version: "2.271.0-alpha.0" };
|
|
85
85
|
/** Route traffic within the same AWS region */
|
|
86
86
|
static REGIONAL = new RoutingScope('REGIONAL');
|
|
87
87
|
/** Route traffic globally across AWS regions */
|
|
@@ -104,11 +104,12 @@ class RoutingScope {
|
|
|
104
104
|
}
|
|
105
105
|
exports.RoutingScope = RoutingScope;
|
|
106
106
|
/**
|
|
107
|
-
*
|
|
107
|
+
* Tier for a router input. The tier determines the capacity limits, performance characteristics,
|
|
108
|
+
* and associated costs. The `maximumBitrate` must fall within the limits of the selected tier.
|
|
108
109
|
*/
|
|
109
110
|
class RouterInputTier {
|
|
110
111
|
value;
|
|
111
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInputTier", version: "2.
|
|
112
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInputTier", version: "2.271.0-alpha.0" };
|
|
112
113
|
/** Supports a maximum bitrate up to 100 megabits per second. */
|
|
113
114
|
static INPUT_100 = new RouterInputTier('INPUT_100');
|
|
114
115
|
/** Supports a maximum bitrate up to 50 megabits per second. */
|
|
@@ -169,7 +170,7 @@ var SourcePriorityMode;
|
|
|
169
170
|
class SourcePriorityConfig {
|
|
170
171
|
_mode;
|
|
171
172
|
_primary;
|
|
172
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.SourcePriorityConfig", version: "2.
|
|
173
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.SourcePriorityConfig", version: "2.271.0-alpha.0" };
|
|
173
174
|
/**
|
|
174
175
|
* Treat both sources with equal priority — MediaConnect picks one when needed.
|
|
175
176
|
*/
|
|
@@ -222,7 +223,7 @@ var ProtocolConfigType;
|
|
|
222
223
|
* Factory class for creating Router Input protocol configurations
|
|
223
224
|
*/
|
|
224
225
|
class RouterInputProtocol {
|
|
225
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInputProtocol", version: "2.
|
|
226
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInputProtocol", version: "2.271.0-alpha.0" };
|
|
226
227
|
/**
|
|
227
228
|
* Create an RTP protocol configuration
|
|
228
229
|
* @param props RTP protocol properties
|
|
@@ -462,7 +463,7 @@ exports.RouterInputProtocol = RouterInputProtocol;
|
|
|
462
463
|
* Factory class for creating Router Input configurations
|
|
463
464
|
*/
|
|
464
465
|
class RouterInputConfiguration {
|
|
465
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInputConfiguration", version: "2.
|
|
466
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInputConfiguration", version: "2.271.0-alpha.0" };
|
|
466
467
|
/**
|
|
467
468
|
* Create a standard Router Input configuration with a single protocol
|
|
468
469
|
* @param props Standard configuration properties
|
|
@@ -917,7 +918,7 @@ let RouterInput = (() => {
|
|
|
917
918
|
RouterInput = _classThis = _classDescriptor.value;
|
|
918
919
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
919
920
|
}
|
|
920
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInput", version: "2.
|
|
921
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterInput", version: "2.271.0-alpha.0" };
|
|
921
922
|
/** Uniquely identifies this class. */
|
|
922
923
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-mediaconnect-alpha.RouterInput';
|
|
923
924
|
/**
|
|
@@ -1096,4 +1097,4 @@ let RouterInput = (() => {
|
|
|
1096
1097
|
return RouterInput = _classThis;
|
|
1097
1098
|
})();
|
|
1098
1099
|
exports.RouterInput = RouterInput;
|
|
1099
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicm91dGVyLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUFxSTtBQUVySSwrREFBMEQ7QUFDMUQsbUVBQThEO0FBSTlELDRFQUE0RDtBQUM1RCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBSTFFLG1GQUFvRTtBQUdwRSxxQ0FBdUs7QUFFdks7O0dBRUc7QUFDSCxNQUFhLDBCQUEwQjtJQW1CRDs7SUFsQnBDLG1DQUFtQztJQUM1QixNQUFNLENBQVUsR0FBRyxHQUFHLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUseUNBQXlDO0lBQ2xDLE1BQU0sQ0FBVSxJQUFJLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRSw4Q0FBOEM7SUFDdkMsTUFBTSxDQUFVLFVBQVUsR0FBRyxJQUFJLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pGLGdEQUFnRDtJQUN6QyxNQUFNLENBQVUsWUFBWSxHQUFHLElBQUksMEJBQTBCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFckY7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5QztJQUVELDZDQUE2QztJQUM3QyxZQUFvQyxLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtLQUFJO0lBRXJELCtCQUErQjtJQUN4QixRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ25COztBQXhCSCxnRUF5QkM7QUFrSkQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFlYTs7SUFkcEMsK0NBQStDO0lBQ3hDLE1BQU0sQ0FBVSxRQUFRLEdBQUcsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0QsZ0RBQWdEO0lBQ3pDLE1BQU0sQ0FBVSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFM0Q7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEM7SUFFRCxrREFBa0Q7SUFDbEQsWUFBb0MsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7S0FBSTtJQUVyRCwrQkFBK0I7SUFDeEIsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7QUFwQkgsb0NBcUJDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGVBQWU7SUFpQlU7O0lBaEJwQyxnRUFBZ0U7SUFDekQsTUFBTSxDQUFVLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRSwrREFBK0Q7SUFDeEQsTUFBTSxDQUFVLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRSwrREFBK0Q7SUFDeEQsTUFBTSxDQUFVLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVsRTs7O09BR0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQWE7UUFDNUIsT0FBTyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNuQztJQUVELHlDQUF5QztJQUN6QyxZQUFvQyxLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtLQUFJO0lBRXJELCtCQUErQjtJQUN4QixRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ25COztBQXRCSCwwQ0F1QkM7QUFrRkQ7O0dBRUc7QUFDSCxJQUFZLHNCQUtYO0FBTEQsV0FBWSxzQkFBc0I7SUFDaEMsc0NBQXNDO0lBQ3RDLDZDQUFpQixDQUFBO0lBQ2pCLHVDQUF1QztJQUN2QywrQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsc0JBQXNCLHNDQUF0QixzQkFBc0IsUUFLakM7QUFFRDs7R0FFRztBQUNILElBQVksYUFLWDtBQUxELFdBQVksYUFBYTtJQUN2QiwwREFBMEQ7SUFDMUQsaUVBQWdCLENBQUE7SUFDaEIsMkRBQTJEO0lBQzNELG1FQUFpQixDQUFBO0FBQ25CLENBQUMsRUFMVyxhQUFhLDZCQUFiLGFBQWEsUUFLeEI7QUFFRDs7O0dBR0c7QUFDSCxJQUFLLGtCQUtKO0FBTEQsV0FBSyxrQkFBa0I7SUFDckIsK0RBQStEO0lBQy9ELGlEQUEyQixDQUFBO0lBQzNCLGtEQUFrRDtJQUNsRCw2REFBdUMsQ0FBQTtBQUN6QyxDQUFDLEVBTEksa0JBQWtCLEtBQWxCLGtCQUFrQixRQUt0QjtBQUVEOztHQUVHO0FBQ0gsTUFBYSxvQkFBb0I7SUFnQlo7SUFDQTs7SUFoQm5COztPQUVHO0lBQ0ksTUFBTSxDQUFDLElBQUk7UUFDaEIsT0FBTyxJQUFJLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztLQUM1RTtJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQXNCOzs7Ozs7Ozs7O1FBQ25ELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNoRjtJQUVELFlBQ21CLEtBQXlCLEVBQ3pCLFFBQW1DO1FBRG5DLFVBQUssR0FBTCxLQUFLLENBQW9CO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQTJCO0tBQ2xEO0lBRUo7OztPQUdHO0lBQ0ksS0FBSztRQUNWLE9BQU87WUFDTCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSztZQUM5QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUNsQyxDQUFDO0tBQ0g7O0FBN0JILG9EQThCQztBQThERDs7O0dBR0c7QUFDSCxJQUFLLGtCQUtKO0FBTEQsV0FBSyxrQkFBa0I7SUFDckIsZ0RBQWdEO0lBQ2hELDJDQUFxQixDQUFBO0lBQ3JCLDZDQUE2QztJQUM3QyxxQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFMSSxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBS3RCO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLG1CQUFtQjs7SUFDOUI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBdUI7Ozs7Ozs7Ozs7UUFDdkMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFO1lBQzdELEdBQUcsRUFBRTtnQkFDSCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxzQkFBc0I7YUFDckQ7U0FDRixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNoQjtJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQXdCOzs7Ozs7Ozs7O1FBQ3pDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRTtZQUM5RCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQiwyQkFBMkIsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRTthQUNwRTtTQUNGLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hCO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBK0I7Ozs7Ozs7Ozs7UUFDdkQsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsWUFBWSxFQUFFO1lBQ3RFLFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFO2FBQ2xFO1NBQ0YsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBQy9DO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBNkI7Ozs7Ozs7Ozs7UUFDbkQsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sSUFBSSxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUU7WUFDcEUsU0FBUyxFQUFFO2dCQUNULGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtnQkFDbEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUM1QiwwQkFBMEIsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRTtnQkFDakUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQ3pCO1NBQ0YsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FDOUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBWTtRQUN0QyxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sSUFBSSxxQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsc0JBQXNCLEVBQUUsNENBQTRDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkgsQ0FBQztLQUNGO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBWTtRQUMvQyxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxxQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsb0JBQW9CLEVBQUUsb0RBQW9ELElBQUksRUFBRSxDQUFDLENBQUM7UUFDekgsQ0FBQztLQUNGO0lBRWdCLGFBQWEsQ0FBNkI7SUFDMUMsT0FBTyxDQUEwRDtJQUNqRSxLQUFLLENBQVU7SUFDZixXQUFXLENBQXVCO0lBRW5ELFlBQ0UsWUFBd0MsRUFDeEMsTUFBK0QsRUFDL0QsSUFBYSxFQUNiLFVBQWdDO1FBRWhDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0tBQy9CO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLEtBQUssQ0FBQyxLQUFnQixFQUFFLGNBQXVCO1FBS3BELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUUsQ0FBQztRQUVELE1BQU0sdUJBQXVCLEdBQUcsSUFBQSxrQ0FBeUIsRUFBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVySCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDaEIsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxFQUFFO2FBQ2xGLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2hCLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsRUFBRTthQUM5RSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQzdFO0lBRUQ7Ozs7O09BS0c7SUFDSSxVQUFVLENBQUMsU0FBaUI7UUFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUMvQyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3pFO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbkI7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLEtBQTBCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7S0FDL0Q7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssMEJBQTBCLENBQUMsVUFBVSxDQUFDLEtBQUs7ZUFDMUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssMEJBQTBCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztLQUNqRjtJQUVEOzs7OztPQUtHO0lBQ0ksc0JBQXNCLENBQUMsS0FBMEIsRUFBRSxVQUE4QjtRQUN0RixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUUvQyxJQUFJLGFBQWEsS0FBSywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUN6QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDcEIsTUFBTSxJQUFJLHFDQUF1QixDQUMvQixJQUFBLHNCQUFHLEVBQUEsbUJBQW1CLEVBQ3RCLEdBQUcsVUFBVSxnREFBZ0QsS0FBSyx1QkFBdUI7d0JBQ3pGLGdEQUFnRCxDQUNqRCxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxJQUFJLHFDQUF1QixDQUMvQixJQUFBLHNCQUFHLEVBQUEscUJBQXFCLEVBQ3hCLEdBQUcsVUFBVSxvREFBb0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7d0JBQ3pILG9HQUFvRyxDQUNyRyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLGFBQWEsS0FBSywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDL0IsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEYsTUFBTSxJQUFJLHFDQUF1QixDQUMvQixJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQ3JCLEdBQUcsVUFBVSwrQ0FBK0MsSUFBSSxDQUFDLElBQUksdUJBQXVCO29CQUM1RixnREFBZ0QsQ0FDakQsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksYUFBYSxLQUFLLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUN2QyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRixNQUFNLElBQUkscUNBQXVCLENBQy9CLElBQUEsc0JBQUcsRUFBQSwwQkFBMEIsRUFDN0IsR0FBRyxVQUFVLHdEQUF3RCxJQUFJLENBQUMsSUFBSSx1QkFBdUI7b0JBQ3JHLGdEQUFnRCxDQUNqRCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7S0FDRjs7QUEzT0gsa0RBNE9DO0FBMklEOztHQUVHO0FBQ0gsTUFBc0Isd0JBQXdCOztJQUM1Qzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFpQzs7Ozs7Ozs7OztRQUN0RCxPQUFPLElBQUkseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0M7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBaUM7Ozs7Ozs7Ozs7UUFDdEQsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLElBQUkscUNBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHVCQUF1QixFQUFFLDREQUE0RCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEosQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxNQUFNLElBQUkscUNBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLDBCQUEwQixFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUkseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0M7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBOEI7Ozs7Ozs7Ozs7UUFDaEQsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLElBQUkscUNBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLG9CQUFvQixFQUFFLHlEQUF5RCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDaEosQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxxQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsc0JBQXNCLEVBQUUsd0RBQXdELENBQUMsQ0FBQztRQUN6SCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxxQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsdUJBQXVCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hGLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMxQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGlDQUFpQyxDQUFDLEtBQTBEOzs7Ozs7Ozs7O1FBQ3hHLE9BQU8sSUFBSSxpQ0FBaUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ2xJO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUF5Qzs7Ozs7Ozs7OztRQUN0RSxPQUFPLElBQUksaUNBQWlDLENBQUM7WUFDM0MsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1Qix1QkFBdUIsRUFBRSxLQUFLLENBQUMsdUJBQXVCO1NBQ3ZELENBQUMsQ0FBQztLQUNKO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBeUM7Ozs7Ozs7Ozs7UUFDdEUsT0FBTyxJQUFJLGlDQUFpQyxDQUFDO1lBQzNDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVU7WUFDeEQsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDbkMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLHVCQUF1QjtTQUN2RCxDQUFDLENBQUM7S0FDSjtJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsaUNBQWlDLENBQUMsS0FBMEQ7Ozs7Ozs7Ozs7UUFDeEcsT0FBTyxJQUFJLGlDQUFpQyxDQUFDLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDbEk7O0FBckdILDREQTBIQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxlQUFlLENBQUMsWUFBb0IsRUFBRSxJQUFZLEVBQUUsU0FBaUI7SUFDNUUsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxPQUFPLGdCQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLHlCQUEwQixTQUFRLHdCQUF3QjtJQUNqQztJQUE3QixZQUE2QixLQUFpQztRQUFJLEtBQUssRUFBRSxDQUFDO1FBQTdDLFVBQUssR0FBTCxLQUFLLENBQTRCO0tBQWM7SUFFckUsS0FBSyxDQUFDLEtBQWdCLEVBQUUsY0FBdUI7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsRSxPQUFPO1lBQ0wsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRTtvQkFDUixtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QjtvQkFDMUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSztvQkFDN0IscUJBQXFCLEVBQUUsUUFBUSxDQUFDLE1BQU07aUJBQ3ZDO2FBQ0Y7WUFDRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtTQUM5QyxDQUFDO0tBQ0g7SUFFTSxVQUFVLENBQUMsU0FBaUI7UUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xELElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3hCO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLHlCQUEwQixTQUFRLHdCQUF3QjtJQUNqQztJQUE3QixZQUE2QixLQUFpQztRQUFJLEtBQUssRUFBRSxDQUFDO1FBQTdDLFVBQUssR0FBTCxLQUFLLENBQTRCO0tBQWM7SUFFckUsS0FBSyxDQUFDLEtBQWdCLEVBQUUsY0FBdUI7UUFDcEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BGLE9BQU87WUFDTCxNQUFNLEVBQUU7Z0JBQ04sUUFBUSxFQUFFO29CQUNSLG1CQUFtQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCO29CQUMxRSxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUM7b0JBQzVGLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7b0JBQy9DLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7aUJBQ2hEO2FBQ0Y7WUFDRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtTQUM5QyxDQUFDO0tBQ0g7SUFFTSxVQUFVLENBQUMsU0FBaUI7UUFDakMsTUFBTSxTQUFTLEdBQTBCLEVBQUUsQ0FBQztRQUM1QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDaEMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxTQUFTO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBQzlELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEI7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sc0JBQXVCLFNBQVEsd0JBQXdCO0lBQzlCO0lBQTdCLFlBQTZCLEtBQThCO1FBQUksS0FBSyxFQUFFLENBQUM7UUFBMUMsVUFBSyxHQUFMLEtBQUssQ0FBeUI7S0FBYztJQUVsRSxLQUFLLENBQUMsS0FBZ0IsRUFBRSxjQUF1QjtRQUNwRCxPQUFPO1lBQ0wsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRTtvQkFDTCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QjtvQkFDMUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUM1RiwrQkFBK0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRTtpQkFDakY7YUFDRjtZQUNELGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO1NBQzlDLENBQUM7S0FDSDtJQUVNLFVBQVUsQ0FBQyxTQUFpQjtRQUNqQyxNQUFNLFNBQVMsR0FBMEIsRUFBRSxDQUFDO1FBQzVDLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoQyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDOUQsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtDQUNGO0FBV0Q7OztHQUdHO0FBQ0gsTUFBTSxpQ0FBa0MsU0FBUSx3QkFBd0I7SUFFbkQ7SUFDQTtJQUZuQixZQUNtQixPQUEyQyxFQUMzQyxnQkFBeUI7UUFDeEMsS0FBSyxFQUFFLENBQUM7UUFGTyxZQUFPLEdBQVAsT0FBTyxDQUFvQztRQUMzQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVM7S0FDOUI7SUFFUCxLQUFLLENBQUMsS0FBZ0IsRUFBRSxjQUF1QjtRQUNwRCxPQUFPO1lBQ0wsTUFBTSxFQUFFO2dCQUNOLGdCQUFnQixFQUFFO29CQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTztvQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGFBQWE7b0JBQ3JELHVCQUF1QixFQUFFLElBQUEsZ0NBQXVCLEVBQUMsS0FBSyxFQUFFLDZCQUE2QixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsY0FBYyxDQUFDO2lCQUM3STthQUNGO1lBQ0QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUN4QyxDQUFDO0tBQ0g7SUFFTSxVQUFVLENBQUMsVUFBa0I7UUFDbEMsT0FBTyxTQUFTLENBQUM7S0FDbEI7Q0FDRjtBQVlEOzs7R0FHRztBQUNILE1BQU0saUNBQWtDLFNBQVEsd0JBQXdCO0lBRW5EO0lBQ0E7SUFGbkIsWUFDbUIsT0FBMkMsRUFDM0MsZ0JBQXlCO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBRk8sWUFBTyxHQUFQLE9BQU8sQ0FBb0M7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFTO0tBQzlCO0lBRVAsS0FBSyxDQUFDLEtBQWdCLEVBQUUsY0FBdUI7UUFDcEQsT0FBTztZQUNMLE1BQU0sRUFBRTtnQkFDTixnQkFBZ0IsRUFBRTtvQkFDaEIsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUI7b0JBQ3JELDBCQUEwQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsMEJBQTBCO29CQUNuRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQjtvQkFDckQsdUJBQXVCLEVBQUUsSUFBQSxnQ0FBdUIsRUFBQyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxjQUFjLENBQUM7aUJBQzdJO2FBQ0Y7WUFDRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQ3hDLENBQUM7S0FDSDtJQUVNLFVBQVUsQ0FBQyxVQUFrQjtRQUNsQyxPQUFPLFNBQVMsQ0FBQztLQUNsQjtDQUNGO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFlLGVBQWdCLFNBQVEsc0JBQVE7SUFVN0M7OztPQUdHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0tBQ2hEO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBa0IsRUFBRSxLQUFxQjtRQUNyRCxPQUFPLElBQUksdUJBQU0sQ0FBQztZQUNoQixVQUFVO1lBQ1YsU0FBUyxFQUFFLGtCQUFrQjtZQUM3QixHQUFHLEtBQUs7WUFDUixhQUFhLEVBQUU7Z0JBQ2IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNuQyxHQUFHLEtBQUssRUFBRSxhQUFhO2FBQ3hCO1NBQ0YsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuQjtJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQXFCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUN2QyxTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksRUFBRSxxQkFBSSxDQUFDLGVBQWU7WUFDMUIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7T0FFRztJQUNJLHlCQUF5QixDQUFDLEtBQXFCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRTtZQUNuRCxTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksRUFBRSxxQkFBSSxDQUFDLEtBQUs7WUFDaEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7T0FFRztJQUNJLGtCQUFrQixDQUFDLEtBQXFCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRTtZQUM1QyxTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksRUFBRSxxQkFBSSxDQUFDLEtBQUs7WUFDaEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxLQUFxQjtRQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUU7WUFDekMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLEVBQUUscUJBQUksQ0FBQyxJQUFJO1lBQ2YsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7T0FFRztJQUNJLDZCQUE2QixDQUFDLEtBQXFCO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRTtZQUN4QyxTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksRUFBRSxxQkFBSSxDQUFDLEtBQUs7WUFDaEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxLQUFxQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUU7WUFDdkMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLEVBQUUscUJBQUksQ0FBQyxZQUFZO1lBQ3ZCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztLQUNKO0lBRUQ7O09BRUc7SUFDSSxzQkFBc0IsQ0FBQyxLQUFxQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUU7WUFDaEQsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLEVBQUUscUJBQUksQ0FBQyxLQUFLO1lBQ2hCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztLQUNKO0NBQ0Y7QUFFRDs7R0FFRztJQUVVLFdBQVc7NEJBRHZCLG9DQUFrQjs7OztzQkFDYyxlQUFlOzJCQUF2QixTQUFRLFdBQWU7Ozs7WUFBaEQsNktBNkxDOzs7OztRQTVMQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLDZDQUE2QyxDQUFDO1FBRXJHOzs7Ozs7Ozs7O1dBVUc7UUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsY0FBc0I7WUFDbkYsT0FBTyxXQUFXLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDN0U7UUFFRDs7Ozs7Ozs7OztXQVVHO1FBQ0ksTUFBTSxDQUFDLHlCQUF5QixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCOzs7Ozs7Ozs7O1lBQ2hHLE1BQU0sTUFBTyxTQUFRLGVBQWU7Z0JBQ2xCLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO2dCQUN0QyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUN0QixTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUN0Qix1QkFBdUIsR0FBRyxTQUFTLENBQUM7Z0JBQ3BDLE1BQU0sR0FBRyxpREFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRWpFLElBQVcsU0FBUztvQkFDbEIsTUFBTSxJQUFJLDZCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSwwQ0FBMEMsRUFDN0Msd0RBQXdELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSw2SkFBNkosRUFDbk8sSUFBSSxDQUNMLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxJQUFXLGFBQWE7b0JBQ3RCLElBQUksS0FBSyxDQUFDLGFBQWE7d0JBQUUsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDO29CQUNwRCxNQUFNLElBQUksNkJBQWUsQ0FDdkIsSUFBQSxzQkFBRyxFQUFBLDBCQUEwQixFQUM3Qiw0REFBNEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHlDQUF5QyxFQUNuSCxJQUFJLENBQ0wsQ0FBQztnQkFDSixDQUFDO2dCQUVELElBQVcsU0FBUztvQkFDbEIsSUFBSSxLQUFLLENBQUMsU0FBUzt3QkFBRSxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBQzVDLE1BQU0sSUFBSSw2QkFBZSxDQUN2QixJQUFBLHNCQUFHLEVBQUEsaUNBQWlDLEVBQ3BDLHdEQUF3RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUkseUNBQXlDLEVBQy9HLElBQUksQ0FDTCxDQUFDO2dCQUNKLENBQUM7YUFDRjtZQUNELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO1FBRUQ7O1dBRUc7UUFDSyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQXFCO1lBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUM3RCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBQy9ELE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRWUsY0FBYyxDQUFTO1FBQ3ZCLGFBQWEsQ0FBUztRQUN0QixTQUFTLENBQVM7UUFDbEIsU0FBUyxDQUFVO1FBQ25CLFNBQVMsQ0FBVTtRQUNsQixVQUFVLENBQW9DO1FBQy9DLHVCQUF1QixDQUFXO1FBQ2xDLE1BQU0sQ0FBb0I7UUFFMUMsSUFBVyxTQUFTO1lBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLDZCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSx3Q0FBd0MsRUFDM0Msb0RBQW9ELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSwyTUFBMk0sRUFDN1EsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCO1FBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtZQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLGVBQWUsSUFBSSxrQkFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxtQkFBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDMUgsQ0FBQyxDQUFDOzs7Ozs7bURBcEdNLFdBQVc7Ozs7WUFzR3BCLHlDQUF5QztZQUN6QyxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxlQUFlLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hILElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sSUFBSSw2QkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSx1QkFBdUIsRUFBRSwrREFBK0QsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN0osQ0FBQztnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUNwRCxNQUFNLElBQUksNkJBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsdUJBQXVCLEVBQUUsK0ZBQStGLEtBQUssQ0FBQyxlQUFlLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkwsQ0FBQztZQUNILENBQUM7WUFFRCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDbkYsTUFBTSxJQUFJLDZCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLHVCQUF1QixFQUFFLG1FQUFtRSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakssQ0FBQztZQUVELDhDQUE4QztZQUM5QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6RCxJQUFJLElBQUEsaUNBQXdCLEVBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxNQUFNLElBQUksNkJBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsK0JBQStCLEVBQUUsbUJBQW1CLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsU0FBUyxxQkFBcUIsWUFBWSxDQUFDLEtBQUssa0JBQWtCLFFBQVEsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNNLENBQUM7WUFFRCxtQ0FBbUM7WUFDbkMsSUFBSSxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDbkMsSUFBQSxnQ0FBdUIsRUFBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUVELG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFFdEQsb0dBQW9HO1lBQ3BHLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ3JDLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLFlBQVksRUFBRSxHQUFHO2dCQUNqQixTQUFTLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUI7YUFDekMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRW5FLHlDQUF5QztZQUN6QyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO21CQUNuSCxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsTUFBTSxJQUFJLDZCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLDZCQUE2QixFQUFFLHNCQUFzQixVQUFVLENBQUMsZ0JBQWdCLDRCQUE0QixZQUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsSyxDQUFDO1lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBQSxpQ0FBd0IsRUFBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRWpILE1BQU0sV0FBVyxHQUFHLElBQUksaUNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUN2RCxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3ZCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTtnQkFDNUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSztnQkFDcEQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDdEMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztvQkFDekQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QjtpQkFDakQsQ0FBQyxDQUFDLENBQUM7b0JBQ0YsT0FBTyxFQUFFLEVBQUU7aUJBQ1o7Z0JBQ0QsYUFBYSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2dCQUNoQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDakMsVUFBVSxFQUFFLFlBQVk7Z0JBQ3hCLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0I7Z0JBQzdDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFVLEVBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQ3RELENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztZQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7WUFFM0MsMERBQTBEO1lBQzFELHFGQUFxRjtZQUNyRixvREFBb0Q7WUFDcEQsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFeEMsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTVFLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztZQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLGlEQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2RDs7WUE1TFUsdURBQVc7Ozs7O0FBQVgsa0NBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJpdHJhdGUsIElSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEFybkZvcm1hdCwgRHVyYXRpb24sIEZuLCBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgTWV0cmljT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IE1ldHJpYywgVW5pdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IENmblJvdXRlcklucHV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhY29ubmVjdCc7XG5pbXBvcnQgdHlwZSB7IElSb3V0ZXJJbnB1dFJlZiwgUm91dGVySW5wdXRSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFjb25uZWN0JztcbmltcG9ydCB0eXBlIHsgSUNoYW5uZWxSZWYgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFsaXZlJztcbmltcG9ydCB0eXBlIHsgSVNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IElGbG93IH0gZnJvbSAnLi9mbG93JztcbmltcG9ydCB0eXBlIHsgSUZsb3dPdXRwdXQgfSBmcm9tICcuL2Zsb3ctb3V0cHV0JztcbmltcG9ydCB7IFJvdXRlcklucHV0R3JhbnRzIH0gZnJvbSAnLi9tZWRpYWNvbm5lY3QtZ3JhbnRzLmdlbmVyYXRlZCc7XG5pbXBvcnQgdHlwZSB7IElSb3V0ZXJOZXR3b3JrSW50ZXJmYWNlIH0gZnJvbSAnLi9yb3V0ZXItbmV0d29yay1pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBNYWludGVuYW5jZURheSwgTWVkaWFMaXZlUGlwZWxpbmUsIFJvdXRlclNydEVuY3J5cHRpb24sIFRyYW5zaXRFbmNyeXB0aW9uIH0gZnJvbSAnLi9zaGFyZWQnO1xuaW1wb3J0IHsgcmVuZGVyVGFncywgZXhjZWVkc1JvdXRlclRpZXJCaXRyYXRlLCByZW5kZXJSb3V0ZXJTcnRFbmNyeXB0aW9uLCByZW5kZXJUcmFuc2l0RW5jcnlwdGlvbiwgcmVzb2x2ZVRyYW5zaXRFbmNyeXB0aW9uLCB2YWxpZGF0ZU1haW50ZW5hbmNlVGltZSB9IGZyb20gJy4vc2hhcmVkJztcblxuLyoqXG4gKiBQcm90b2NvbCBvcHRpb25zIGF2YWlsYWJsZSBmb3IgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucyB7XG4gIC8qKiBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlRQID0gbmV3IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zKCdSVFAnKTtcbiAgLyoqIFJlbGlhYmxlIEludGVybmV0IFN0cmVhbSBUcmFuc3BvcnQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSSVNUID0gbmV3IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zKCdSSVNUJyk7XG4gIC8qKiBTZWN1cmUgUmVsaWFibGUgVHJhbnNwb3J0IC0gQ2FsbGVyIG1vZGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTUlRfQ0FMTEVSID0gbmV3IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zKCdTUlRfQ0FMTEVSJyk7XG4gIC8qKiBTZWN1cmUgUmVsaWFibGUgVHJhbnNwb3J0IC0gTGlzdGVuZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9MSVNURU5FUiA9IG5ldyBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucygnU1JUX0xJU1RFTkVSJyk7XG5cbiAgLyoqXG4gICAqIFVzZSBhIGN1c3RvbSBwcm90b2NvbCB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3RvY29sIHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMge1xuICAgIHJldHVybiBuZXcgUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnModmFsdWUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvdG9jb2wgc3RyaW5nIHZhbHVlICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcpIHt9XG5cbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc2luZ2xlIGluZ2VzdCBlbmRwb2ludCB3aGVyZSB0aGUgcm91dGVyIGlucHV0IGxpc3RlbnMgZm9yIHVwc3RyZWFtIGNvbnRlbnQuXG4gKlxuICogRmFpbG92ZXIgYW5kIG1lcmdlIGNvbmZpZ3VyYXRpb25zIGV4cG9zZSB0d28gZW5kcG9pbnRzOyBzdGFuZGFyZCBjb25maWd1cmF0aW9uc1xuICogZXhwb3NlIG9uZS4gUmV0dXJuZWQgYnkge0BsaW5rIElSb3V0ZXJJbnB1dC5lbmRwb2ludHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlcklucHV0RW5kcG9pbnQge1xuICAvKipcbiAgICogVGhlIGZ1bGwgaW5nZXN0IFVSTCBjb21iaW5pbmcgcHJvdG9jb2wgc2NoZW1lLCBJUCwgYW5kIHBvcnQuIEZvciBleGFtcGxlOlxuICAgKiBgc3J0Oi8vMjAzLjAuMTEzLjEwOjUwMDBgIG9yIGBydHA6Ly8yMDMuMC4xMTMuMTA6NTAwMWAuXG4gICAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpc3RlbmluZyBwb3J0IGF0IHdoaWNoIHRoZSByb3V0ZXIgaW5wdXQgYWNjZXB0cyB1cHN0cmVhbSBjb250ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgUm91dGVyIElucHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlcklucHV0IGV4dGVuZHMgSVJlc291cmNlLCBJUm91dGVySW5wdXRSZWYge1xuICAvKipcbiAgICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSByb3V0ZXIgaW5wdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlcklucHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcm91dGVyIGlucHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJJbnB1dElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSByb3V0ZXIgaW5wdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHJvdXRlciBpbnB1dCB3YXMgY3JlYXRlZC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHJvdXRlciBpbnB1dCB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmdlc3QgZW5kcG9pbnRzIChVUkwgKyBwb3J0KSB3aGVyZSB0aGUgcm91dGVyIGlucHV0IGxpc3RlbnMuXG4gICAqXG4gICAqIFJldHVybnMgb25lIGVudHJ5IGZvciBzdGFuZGFyZCBwcm90b2NvbC1iYXNlZCB2YXJpYW50cyAoUlRQLCBSSVNULCBTUlQgbGlzdGVuZXIpLFxuICAgKiBhbmQgb25lIGVudHJ5IHBlciBzb3VyY2UgZm9yIGZhaWxvdmVyIGFuZCBtZXJnZSBjb25maWd1cmF0aW9ucyBidWlsdCBmcm9tIHRob3NlXG4gICAqIHByb3RvY29scy4gRm9yIGV4YW1wbGUgYSBmYWlsb3ZlciBSVFAgaW5wdXQgd2lsbCByZXR1cm46XG4gICAqXG4gICAqIGBgYFxuICAgKiBbXG4gICAqICAgeyB1cmw6ICdydHA6Ly8yMDMuMC4xMTMuMTA6NTAwMCcsIHBvcnQ6IDUwMDAgfSxcbiAgICogICB7IHVybDogJ3J0cDovLzIwMy4wLjExMy4xMDo1MDAxJywgcG9ydDogNTAwMSB9LFxuICAgKiBdXG4gICAqIGBgYFxuICAgKlxuICAgKiBBY2Nlc3NpbmcgdGhpcyBvbiBTUlQgY2FsbGVyICh3aGVyZSB0aGUgcm91dGVyIGlucHV0IGRpYWxzIG91dCB0byBhIHJlbW90ZVxuICAgKiBzb3VyY2UpLCBNZWRpYUNvbm5lY3QgRmxvdywgTWVkaWFMaXZlIENoYW5uZWwsIG9yIGltcG9ydGVkIGlucHV0cyB0aHJvd3Mg4oCUIHRob3NlXG4gICAqIHZhcmlhbnRzIGRvIG5vdCBleHBvc2UgaG9zdDpwb3J0IHBhaXJzIHRoZSBpbnB1dCBsaXN0ZW5zIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRzOiBSb3V0ZXJJbnB1dEVuZHBvaW50W107XG5cbiAgLyoqXG4gICAqIFRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGNvbnRhaW5pbmcgdGhlIHRyYW5zaXQgZW5jcnlwdGlvbiBwYXNzcGhyYXNlLlxuICAgKlxuICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIHRoZSBSb3V0ZXIgSW5wdXQgd2FzIGNyZWF0ZWQgd2l0aCBleHBsaWNpdFxuICAgKiBgdHJhbnNpdEVuY3J5cHRpb25gIGNvbmZpZ3VyYXRpb24uIE5vdCBhdmFpbGFibGUgZm9yXG4gICAqIGF1dG9tYXRpYyBlbmNyeXB0aW9uIG9yIGltcG9ydGVkIGlucHV0cy5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRFbmNyeXB0aW9uU2VjcmV0PzogSVNlY3JldDtcblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBncmFudCBtZXRob2RzIGZvciB0aGlzIHJvdXRlciBpbnB1dC5cbiAgICovXG4gIHJlYWRvbmx5IGdyYW50czogUm91dGVySW5wdXRHcmFudHM7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0aGlzIHJvdXRlciBpbnB1dC5cbiAgICpcbiAgICogUm91dGVyIGlucHV0IG1ldHJpY3MgYXJlIGRpbWVuc2lvbmVkIGJ5IGBSb3V0ZXJJbnB1dEFSTmAuIFNlZSB0aGUgTWVkaWFDb25uZWN0XG4gICAqIGRvY3VtZW50YXRpb24gZm9yIGF2YWlsYWJsZSBtZXRyaWMgbmFtZXMgKGUuZy4gYFJvdXRlcklucHV0Qml0UmF0ZWAsXG4gICAqIGBSb3V0ZXJJbnB1dE5vdFJlY292ZXJlZFBhY2tldHNgKS5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgYml0cmF0ZSBvZiB0aGUgcm91dGVyIGlucHV0J3MgcGF5bG9hZC5cbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljQml0cmF0ZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgcGFja2V0cyBsb3N0IGluIHRyYW5zaXQgdGhhdCB3ZXJlIG5vdCByZWNvdmVyZWQgYnkgZXJyb3IgY29ycmVjdGlvbi5cbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNOb3RSZWNvdmVyZWRQYWNrZXRzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgYnkgdGhlIHJvdXRlciBpbnB1dC5cbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNUb3RhbFBhY2tldHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByb3V0ZXIgaW5wdXQgY29ubmVjdGlvbiBzdGF0ZSAoMSBjb25uZWN0ZWQsIDAgZGlzY29ubmVjdGVkKS4gQXBwbGllcyB0byBTUlQgc291cmNlcyBvbmx5LlxuICAgKiBAZGVmYXVsdCAtIG1pbmltdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNDb25uZWN0ZWQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNvbnRpbnVpdHkgY291bnRlciBlcnJvcnMgaW4gdGhlIHRyYW5zcG9ydCBzdHJlYW0uXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljQ29udGludWl0eUNvdW50ZXJFcnJvcnMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByZWNvdmVyeSBsYXRlbmN5IG9mIHRoZSBpbnB1dCBzdHJlYW0uIEFwcGxpZXMgdG8gUklTVCwgU1JULCBhbmQgUlRQLUZFQy5cbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljTGF0ZW5jeShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm91dGVyIGlucHV0IGhhcyBzd2l0Y2hlZCBzb3VyY2VzIGluIEZhaWxvdmVyIG1vZGUuXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljRmFpbG92ZXJTd2l0Y2hlcyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG59XG5cbi8qKlxuICogUm91dGluZyBzY29wZSBmb3IgdGhlIFJvdXRlciBJbnB1dFxuICovXG5leHBvcnQgY2xhc3MgUm91dGluZ1Njb3BlIHtcbiAgLyoqIFJvdXRlIHRyYWZmaWMgd2l0aGluIHRoZSBzYW1lIEFXUyByZWdpb24gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRUdJT05BTCA9IG5ldyBSb3V0aW5nU2NvcGUoJ1JFR0lPTkFMJyk7XG4gIC8qKiBSb3V0ZSB0cmFmZmljIGdsb2JhbGx5IGFjcm9zcyBBV1MgcmVnaW9ucyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdMT0JBTCA9IG5ldyBSb3V0aW5nU2NvcGUoJ0dMT0JBTCcpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gcm91dGluZyBzY29wZSB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHJvdXRpbmcgc2NvcGUgc3RyaW5nIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBSb3V0aW5nU2NvcGUge1xuICAgIHJldHVybiBuZXcgUm91dGluZ1Njb3BlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0gdmFsdWUgVGhlIHJvdXRpbmcgc2NvcGUgc3RyaW5nIHZhbHVlICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcpIHt9XG5cbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFJvdXRpbmcgdGllciBiYXNlZCBvbiB5b3VyIG1heGltdW0gYml0cmF0ZSByZXF1aXJlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXJJbnB1dFRpZXIge1xuICAvKiogU3VwcG9ydHMgYSBtYXhpbXVtIGJpdHJhdGUgdXAgdG8gMTAwIG1lZ2FiaXRzIHBlciBzZWNvbmQuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5QVVRfMTAwID0gbmV3IFJvdXRlcklucHV0VGllcignSU5QVVRfMTAwJyk7XG4gIC8qKiBTdXBwb3J0cyBhIG1heGltdW0gYml0cmF0ZSB1cCB0byA1MCBtZWdhYml0cyBwZXIgc2Vjb25kLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOUFVUXzUwID0gbmV3IFJvdXRlcklucHV0VGllcignSU5QVVRfNTAnKTtcbiAgLyoqIFN1cHBvcnRzIGEgbWF4aW11bSBiaXRyYXRlIHVwIHRvIDIwIG1lZ2FiaXRzIHBlciBzZWNvbmQuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5QVVRfMjAgPSBuZXcgUm91dGVySW5wdXRUaWVyKCdJTlBVVF8yMCcpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gdGllciB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHRpZXIgc3RyaW5nIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBSb3V0ZXJJbnB1dFRpZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVySW5wdXRUaWVyKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0gdmFsdWUgVGhlIHRpZXIgc3RyaW5nIHZhbHVlICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcpIHt9XG5cbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHNjaGVkdWxlZCBtYWludGVuYW5jZSB3aW5kb3dzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFpbnRlbmFuY2VDb25maWd1cmF0aW9uIHtcbiAgLyoqIERheSBvZiB0aGUgd2VlayBmb3IgbWFpbnRlbmFuY2UgKGUuZy4sICdNb25kYXknLCAnVHVlc2RheScpICovXG4gIHJlYWRvbmx5IGRheTogTWFpbnRlbmFuY2VEYXk7XG4gIC8qKiBUaW1lIG9mIGRheSBmb3IgbWFpbnRlbmFuY2UgaW4gSEg6TU0gZm9ybWF0IChlLmcuLCAnMDI6MDAnKSAqL1xuICByZWFkb25seSB0aW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBSb3V0ZXIgSW5wdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJJbnB1dFByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIFJvdXRlciBJbnB1dFxuICAgKiBAZGVmYXVsdCAtIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5XG4gICAqL1xuICByZWFkb25seSByb3V0ZXJJbnB1dE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbWF4aW11bSBiaXRyYXRlIGZvciB0aGUgcm91dGVyIGlucHV0LiAqL1xuICByZWFkb25seSBtYXhpbXVtQml0cmF0ZTogQml0cmF0ZTtcbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoZSByb3V0ZXIgaW5wdXQgaXMgY29uZmlndXJlZCBmb3IgUmVnaW9uYWwgb3IgZ2xvYmFsIHJvdXRpbmcuICovXG4gIHJlYWRvbmx5IHJvdXRpbmdTY29wZTogUm91dGluZ1Njb3BlO1xuICAvKipcbiAgICogU2VsZWN0IGEgdGllciBiYXNlZCBvbiB5b3VyIG1heGltdW0gYml0cmF0ZSByZXF1aXJlbWVudHMuXG4gICAqIEBkZWZhdWx0IFJvdXRlcklucHV0VGllci5JTlBVVF8yMFxuICAgKi9cbiAgcmVhZG9ubHkgdGllcj86IFJvdXRlcklucHV0VGllcjtcbiAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBSb3V0ZXIgSW5wdXQgKHN0YW5kYXJkLCBmYWlsb3ZlciwgbWVyZ2UsIG9yIE1lZGlhQ29ubmVjdCBmbG93KSAqL1xuICByZWFkb25seSBjb25maWd1cmF0aW9uOiBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBNYWludGVuYW5jZSB3aW5kb3cgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWFpbnRlbmFuY2Ugd2luZG93IHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgbWFpbnRlbmFuY2VDb25maWd1cmF0aW9uPzogTWFpbnRlbmFuY2VDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIEFXUyBSZWdpb24gd2hlcmUgdGhlIHJvdXRlciBpbnB1dCBpcyBsb2NhdGVkLlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHRzIHRvIHRoZSBzYW1lIHJlZ2lvbiBhcyBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRhZ3MgdG8gYWRkIHRvIHRoZSBSb3V0ZXIgSW5wdXRcbiAgICogQGRlZmF1bHQgLSBObyB0YWdnaW5nXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIFRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIHVzaW5nIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gICAqXG4gICAqIFdoZW4gcHJvdmlkZWQgd2l0aG91dCBhIHJvbGUsIGEgc2NvcGVkIElBTSByb2xlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aXRoIHJlYWRcbiAgICogYWNjZXNzIHRvIHRoZSBzZWNyZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSB0cmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBSb3V0ZXIgSW5wdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVySW5wdXRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcm91dGVyIGlucHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVySW5wdXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByb3V0ZXIgaW5wdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWNjZXNzaW5nIGByb3V0ZXJJbnB1dElkYCBvbiB0aGUgaW1wb3J0ZWQgaW5wdXQgdGhyb3dzOyBvbmx5IHByb3ZpZGUgd2hlbiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJJbnB1dElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVAgYWRkcmVzcyB0aGF0IHRoZSByb3V0ZXIgaW5wdXQgdXNlcyB0byBpbmdlc3QgY29udGVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhY2Nlc3NpbmcgYGlwQWRkcmVzc2Agb24gdGhlIGltcG9ydGVkIGlucHV0IHRocm93czsgb25seSBwcm92aWRlIHdoZW4gYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaXBBZGRyZXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZvcndhcmQgRXJyb3IgQ29ycmVjdGlvbiAoRkVDKSBvcHRpb25zIGZvciBSVFAgcHJvdG9jb2xcbiAqL1xuZXhwb3J0IGVudW0gRm9yd2FyZEVycm9yQ29ycmVjdGlvbiB7XG4gIC8qKiBFbmFibGUgRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uICovXG4gIEVOQUJMRUQ9J0VOQUJMRUQnLFxuICAvKiogRGlzYWJsZSBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24gKi9cbiAgRElTQUJMRUQ9J0RJU0FCTEVEJyxcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIHdoaWNoIHByb3RvY29sIGluIGEgZmFpbG92ZXIgY29uZmlndXJhdGlvbidzIHByb3RvY29scyBhcnJheSBpcyBwcmltYXJ5LlxuICovXG5leHBvcnQgZW51bSBQcmltYXJ5U291cmNlIHtcbiAgLyoqIFRoZSBmaXJzdCBwcm90b2NvbCBpbiB0aGUgZmFpbG92ZXIgcHJvdG9jb2xzIGFycmF5LiAqL1xuICBGSVJTVF9TT1VSQ0UgPSAwLFxuICAvKiogVGhlIHNlY29uZCBwcm90b2NvbCBpbiB0aGUgZmFpbG92ZXIgcHJvdG9jb2xzIGFycmF5LiAqL1xuICBTRUNPTkRfU09VUkNFID0gMSxcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBDRk4tbGV2ZWwgdmFsdWVzIGZvciB0aGUgc291cmNlIHByaW9yaXR5IG1vZGUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZW51bSBTb3VyY2VQcmlvcml0eU1vZGUge1xuICAvKiogQm90aCBzb3VyY2VzIGFyZSBlcXVhbCBwcmlvcml0eSDigJQgdGhlIHNlcnZpY2UgcGlja3Mgb25lLiAqL1xuICBOT19QUklPUklUWSA9ICdOT19QUklPUklUWScsXG4gIC8qKiBPbmUgc291cmNlIGlzIHByaW1hcnksIHRoZSBvdGhlciBpcyBiYWNrdXAuICovXG4gIFBSSU1BUllfU0VDT05EQVJZID0gJ1BSSU1BUllfU0VDT05EQVJZJyxcbn1cblxuLyoqXG4gKiBTb3VyY2UgcHJpb3JpdHkgY29uZmlndXJhdGlvbiBmb3IgZmFpbG92ZXIgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgU291cmNlUHJpb3JpdHlDb25maWcge1xuICAvKipcbiAgICogVHJlYXQgYm90aCBzb3VyY2VzIHdpdGggZXF1YWwgcHJpb3JpdHkg4oCUIE1lZGlhQ29ubmVjdCBwaWNrcyBvbmUgd2hlbiBuZWVkZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG5vbmUoKTogU291cmNlUHJpb3JpdHlDb25maWcge1xuICAgIHJldHVybiBuZXcgU291cmNlUHJpb3JpdHlDb25maWcoU291cmNlUHJpb3JpdHlNb2RlLk5PX1BSSU9SSVRZLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZSBvbmUgb2YgdGhlIHR3byBzb3VyY2VzIGFzIHByaW1hcnk7IHRoZSBvdGhlciBpcyB0cmVhdGVkIGFzIGJhY2t1cC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcHJpbWFyeVNlY29uZGFyeShwcmltYXJ5OiBQcmltYXJ5U291cmNlKTogU291cmNlUHJpb3JpdHlDb25maWcge1xuICAgIHJldHVybiBuZXcgU291cmNlUHJpb3JpdHlDb25maWcoU291cmNlUHJpb3JpdHlNb2RlLlBSSU1BUllfU0VDT05EQVJZLCBwcmltYXJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZTogU291cmNlUHJpb3JpdHlNb2RlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByaW1hcnk6IFByaW1hcnlTb3VyY2UgfCB1bmRlZmluZWQsXG4gICkge31cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgY29uZmlndXJhdGlvbiB0byBpdHMgQ0ZOIHNoYXBlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfYmluZCgpOiB7IHNvdXJjZVByaW9yaXR5TW9kZTogc3RyaW5nOyBwcmltYXJ5U291cmNlSW5kZXg/OiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZVByaW9yaXR5TW9kZTogdGhpcy5fbW9kZSxcbiAgICAgIHByaW1hcnlTb3VyY2VJbmRleDogdGhpcy5fcHJpbWFyeSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUlRQIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdHBQcm90b2NvbFByb3BzIHtcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24gc2V0dGluZ1xuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZDsgd2hlbiBvbWl0dGVkLCBNZWRpYUNvbm5lY3QgYXBwbGllcyBGb3J3YXJkRXJyb3JDb3JyZWN0aW9uLkRJU0FCTEVEIGF0IGRlcGxveSB0aW1lXG4gICAqL1xuICByZWFkb25seSBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uPzogRm9yd2FyZEVycm9yQ29ycmVjdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSaXN0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgUklTVCB0cmFmZmljICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqIFJlY292ZXJ5IGxhdGVuY3kgZm9yIFJJU1QgKi9cbiAgcmVhZG9ubHkgcmVjb3ZlcnlMYXRlbmN5OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNydExpc3RlbmVyUHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgU1JUIGxpc3RlbmVyICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gbGF0ZW5jeSBmb3IgU1JUICovXG4gIHJlYWRvbmx5IG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgZW5jcnlwdGVkIFNSVCBzdHJlYW1zXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVjcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVjcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBSb3V0ZXJTcnRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFNSVCBDYWxsZXIgcHJvdG9jb2wgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNydENhbGxlclByb3RvY29sUHJvcHMge1xuICAvKiogU291cmNlIElQIGFkZHJlc3MgdG8gY29ubmVjdCB0byAqL1xuICByZWFkb25seSBzb3VyY2VBZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBTb3VyY2UgcG9ydCB0byBjb25uZWN0IHRvICovXG4gIHJlYWRvbmx5IHNvdXJjZVBvcnQ6IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gbGF0ZW5jeSBmb3IgU1JUICovXG4gIHJlYWRvbmx5IG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0cmVhbSBJRCBmb3IgU1JUIGNvbm5lY3Rpb25cbiAgICogQGRlZmF1bHQgLSBObyBzdHJlYW0gSURcbiAgICovXG4gIHJlYWRvbmx5IHN0cmVhbUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVjcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBlbmNyeXB0ZWQgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBkZWNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZWNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB3aGljaCBjb25maWd1cmF0aW9uIHR5cGUgYSBwb3J0IGNvbmZsaWN0IGNoZWNrIGlzIGJlaW5nIHBlcmZvcm1lZCBmb3IuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZW51bSBQcm90b2NvbENvbmZpZ1R5cGUge1xuICAvKiogRmFpbG92ZXItbW9kZSByb3V0ZXIgaW5wdXQgY29uZmlndXJhdGlvbi4gKi9cbiAgRkFJTE9WRVIgPSAnZmFpbG92ZXInLFxuICAvKiogTWVyZ2UtbW9kZSByb3V0ZXIgaW5wdXQgY29uZmlndXJhdGlvbi4gKi9cbiAgTUVSR0UgPSAnbWVyZ2UnLFxufVxuXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIFJvdXRlciBJbnB1dCBwcm90b2NvbCBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgUm91dGVySW5wdXRQcm90b2NvbCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gUlRQIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIHByb3BzIFJUUCBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlcklucHV0UHJvdG9jb2wgaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgUlRQXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJ0cChwcm9wczogUnRwUHJvdG9jb2xQcm9wcyk6IFJvdXRlcklucHV0UHJvdG9jb2wge1xuICAgIFJvdXRlcklucHV0UHJvdG9jb2wudmFsaWRhdGVQb3J0KHByb3BzLnBvcnQpO1xuICAgIHJldHVybiBuZXcgUm91dGVySW5wdXRQcm90b2NvbChSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucy5SVFAsIHtcbiAgICAgIHJ0cDoge1xuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uOiBwcm9wcy5mb3J3YXJkRXJyb3JDb3JyZWN0aW9uLFxuICAgICAgfSxcbiAgICB9LCBwcm9wcy5wb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIHByb3BzIFJJU1QgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFJJU1RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmlzdChwcm9wczogUmlzdFByb3RvY29sUHJvcHMpOiBSb3V0ZXJJbnB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJJbnB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlcklucHV0UHJvdG9jb2woUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMuUklTVCwge1xuICAgICAgcmlzdDoge1xuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICByZWNvdmVyeUxhdGVuY3lNaWxsaXNlY29uZHM6IHByb3BzLnJlY292ZXJ5TGF0ZW5jeS50b01pbGxpc2Vjb25kcygpLFxuICAgICAgfSxcbiAgICB9LCBwcm9wcy5wb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gU1JUIExpc3RlbmVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIHByb3BzIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlcklucHV0UHJvdG9jb2wgaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgU1JUIExpc3RlbmVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNydExpc3RlbmVyKHByb3BzOiBTcnRMaXN0ZW5lclByb3RvY29sUHJvcHMpOiBSb3V0ZXJJbnB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJJbnB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlcklucHV0UHJvdG9jb2woUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMuU1JUX0xJU1RFTkVSLCB7XG4gICAgICBzcnRMaXN0ZW5lcjoge1xuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBtaW5pbXVtTGF0ZW5jeU1pbGxpc2Vjb25kczogcHJvcHMubWluaW11bUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMucG9ydCwgcHJvcHMuZGVjcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBTUlQgQ2FsbGVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIHByb3BzIFNSVCBDYWxsZXIgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFNSVCBDYWxsZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3J0Q2FsbGVyKHByb3BzOiBTcnRDYWxsZXJQcm90b2NvbFByb3BzKTogUm91dGVySW5wdXRQcm90b2NvbCB7XG4gICAgUm91dGVySW5wdXRQcm90b2NvbC52YWxpZGF0ZVNydENhbGxlclBvcnQocHJvcHMuc291cmNlUG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJJbnB1dFByb3RvY29sKFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zLlNSVF9DQUxMRVIsIHtcbiAgICAgIHNydENhbGxlcjoge1xuICAgICAgICBzb3VyY2VBZGRyZXNzOiBwcm9wcy5zb3VyY2VBZGRyZXNzLFxuICAgICAgICBzb3VyY2VQb3J0OiBwcm9wcy5zb3VyY2VQb3J0LFxuICAgICAgICBtaW5pbXVtTGF0ZW5jeU1pbGxpc2Vjb25kczogcHJvcHMubWluaW11bUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgICAgc3RyZWFtSWQ6IHByb3BzLnN0cmVhbUlkLFxuICAgICAgfSxcbiAgICB9LCB1bmRlZmluZWQsIHByb3BzLmRlY3J5cHRpb25Db25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHBvcnQgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZSAoMzAwMC0zMDAwMClcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlUG9ydChwb3J0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwb3J0KSAmJiAocG9ydCA8IDMwMDAgfHwgcG9ydCA+IDMwMDAwKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJJbnB1dFBvcnRSYW5nZWAsIGBQb3J0IG11c3QgYmUgYmV0d2VlbiAzMDAwIGFuZCAzMDAwMCwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBTUlQgQ2FsbGVyIHBvcnQgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZSAoMC02NTUzNSlcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU3J0Q2FsbGVyUG9ydChwb3J0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwb3J0KSAmJiAocG9ydCA8IDAgfHwgcG9ydCA+IDY1NTM1KSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBTcnRDYWxsZXJQb3J0UmFuZ2VgLCBgU1JUIENhbGxlciBwb3J0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2NTUzNSwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm90b2NvbE5hbWU6IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc6IENmblJvdXRlcklucHV0LlJvdXRlcklucHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BvcnQ/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlY3J5cHRpb24/OiBSb3V0ZXJTcnRFbmNyeXB0aW9uO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJvdG9jb2xOYW1lOiBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucyxcbiAgICBjb25maWc6IENmblJvdXRlcklucHV0LlJvdXRlcklucHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHksXG4gICAgcG9ydD86IG51bWJlcixcbiAgICBkZWNyeXB0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbixcbiAgKSB7XG4gICAgdGhpcy5fcHJvdG9jb2xOYW1lID0gcHJvdG9jb2xOYW1lO1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLl9wb3J0ID0gcG9ydDtcbiAgICB0aGlzLl9kZWNyeXB0aW9uID0gZGVjcnlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoaXMgcHJvdG9jb2wgdG8gaXRzIENGTi1yZWFkeSBmb3JtLiBSZXR1cm5zIHRoZSBwcm90b2NvbCBpZGVudGlmaWVyLFxuICAgKiB0aGUgQ0ZOIGNvbmZpZ3VyYXRpb24gc2hhcGUgKHdpdGggU1JUIGRlY3J5cHRpb24gYXV0by1yb2xlIG1hdGVyaWFsaXplZCBpZiBuZWVkZWQpLFxuICAgKiBhbmQgdGhlIGluZ2VzdCBwb3J0IGlmIHRoZSBwcm90b2NvbCBoYXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgICAgICAgICBDb25zdHJ1Y3QgdGhhdCBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBkZWNyeXB0aW9uIHJvbGVcbiAgICogQHBhcmFtIHJvdXRlcklucHV0QXJuICBPcHRpb25hbCBBUk4gb2YgdGhlIGNvbnN1bWluZyByb3V0ZXIgaW5wdXQg4oCUIHdoZW4gcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVzIHRoZSBhdXRvLWNyZWF0ZWQgZGVjcnlwdGlvbiByb2xlJ3MgdHJ1c3QgcG9saWN5LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJJbnB1dEFybj86IHN0cmluZyk6IHtcbiAgICBuYW1lOiBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucztcbiAgICBjb25maWc6IENmblJvdXRlcklucHV0LlJvdXRlcklucHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gICAgcG9ydD86IG51bWJlcjtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLl9kZWNyeXB0aW9uKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnLCBwb3J0OiB0aGlzLl9wb3J0IH07XG4gICAgfVxuXG4gICAgY29uc3QgZGVjcnlwdGlvbkNvbmZpZ3VyYXRpb24gPSByZW5kZXJSb3V0ZXJTcnRFbmNyeXB0aW9uKHNjb3BlLCAnRGVjcnlwdGlvblJvbGUnLCB0aGlzLl9kZWNyeXB0aW9uLCByb3V0ZXJJbnB1dEFybik7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydExpc3RlbmVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsXG4gICAgICAgIHBvcnQ6IHRoaXMuX3BvcnQsXG4gICAgICAgIGNvbmZpZzogeyBzcnRMaXN0ZW5lcjogeyAuLi50aGlzLl9jb25maWcuc3J0TGlzdGVuZXIsIGRlY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcuc3J0Q2FsbGVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsXG4gICAgICAgIHBvcnQ6IHRoaXMuX3BvcnQsXG4gICAgICAgIGNvbmZpZzogeyBzcnRDYWxsZXI6IHsgLi4udGhpcy5fY29uZmlnLnNydENhbGxlciwgZGVjcnlwdGlvbkNvbmZpZ3VyYXRpb24gfSB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbmFtZTogdGhpcy5fcHJvdG9jb2xOYW1lLCBjb25maWc6IHRoaXMuX2NvbmZpZywgcG9ydDogdGhpcy5fcG9ydCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGluZ2VzdCBVUkwgKHNjaGVtZTovL2lwQWRkcmVzczpwb3J0KSBmb3IgdGhpcyBwcm90b2NvbCwgaWYgaXQgaGFzXG4gICAqIGEgbGlzdGVuaW5nIHBvcnQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9pbmdlc3RVcmwoaXBBZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLl9wb3J0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlbmRlckluZ2VzdFVybCh0aGlzLl9wcm90b2NvbE5hbWUudmFsdWUsIHRoaXMuX3BvcnQsIGlwQWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxpc3RlbmluZyBwb3J0IGZvciB0aGlzIHByb3RvY29sLCBpZiBpdCBoYXMgb25lLiBVbmRlZmluZWQgZm9yIFNSVCBjYWxsZXJcbiAgICogKHdoaWNoIGhhcyBhIGBzb3VyY2VQb3J0YCBwb2ludGluZyBhdCB0aGUgdXBzdHJlYW0gbGlzdGVuZXIsIG5vdCBhIHBvcnQgdGhlIGlucHV0XG4gICAqIGl0c2VsZiBsaXN0ZW5zIG9uKS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2xpc3RlbmluZ1BvcnQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHR3byBwcm90b2NvbHMgc2hhcmUgdGhlIHNhbWUgcHJvdG9jb2wgaWRlbnRpZmllci5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX21hdGNoZXNLaW5kKG90aGVyOiBSb3V0ZXJJbnB1dFByb3RvY29sKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3RvY29sTmFtZS52YWx1ZSA9PT0gb3RoZXIuX3Byb3RvY29sTmFtZS52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcHJvdG9jb2wgaXMgU1JUIChDYWxsZXIgb3IgTGlzdGVuZXIpLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfaXNTcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3RvY29sTmFtZS52YWx1ZSA9PT0gUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMuU1JUX0NBTExFUi52YWx1ZVxuICAgICAgfHwgdGhpcy5fcHJvdG9jb2xOYW1lLnZhbHVlID09PSBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucy5TUlRfTElTVEVORVIudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcG9ydCBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhpcyBwcm90b2NvbCBhbmQgYW5vdGhlciBpbiBhIGZhaWxvdmVyIG9yXG4gICAqIG1lcmdlIGNvbmZpZ3VyYXRpb24uIFRocm93cyBvbiBjb25mbGljdHMgYXBwcm9wcmlhdGUgdG8gdGhlIHByb3RvY29sIGtpbmQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF92YWxpZGF0ZVBvcnRDb25mbGljdHMob3RoZXI6IFJvdXRlcklucHV0UHJvdG9jb2wsIGNvbmZpZ1R5cGU6IFByb3RvY29sQ29uZmlnVHlwZSk6IHZvaWQge1xuICAgIGNvbnN0IHByb3RvY29sVmFsdWUgPSB0aGlzLl9wcm90b2NvbE5hbWUudmFsdWU7XG5cbiAgICBpZiAocHJvdG9jb2xWYWx1ZSA9PT0gUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMuUklTVC52YWx1ZSkge1xuICAgICAgY29uc3QgcmlzdDEgPSB0aGlzLl9jb25maWcucmlzdDtcbiAgICAgIGNvbnN0IHJpc3QyID0gb3RoZXIuX2NvbmZpZy5yaXN0O1xuICAgICAgaWYgKHJpc3QxICYmIHJpc3QyICYmICdwb3J0JyBpbiByaXN0MSAmJiAncG9ydCcgaW4gcmlzdDIpIHtcbiAgICAgICAgY29uc3QgcG9ydDEgPSByaXN0MS5wb3J0O1xuICAgICAgICBjb25zdCBwb3J0MiA9IHJpc3QyLnBvcnQ7XG4gICAgICAgIGlmIChwb3J0MSA9PT0gcG9ydDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICBsaXRgRHVwbGljYXRlUmlzdFBvcnRgLFxuICAgICAgICAgICAgYCR7Y29uZmlnVHlwZX0gY29uZmlndXJhdGlvbiBjYW5ub3QgdXNlIHRoZSBzYW1lIFJJU1QgcG9ydCAke3BvcnQxfSBmb3IgYm90aCBwcm90b2NvbHMsIGAgK1xuICAgICAgICAgICAgJ2VhY2ggcHJvdG9jb2wgbXVzdCB1c2UgYSBkaWZmZXJlbnQgcG9ydCBudW1iZXInLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHBvcnQxIC0gcG9ydDIpIDwgMikge1xuICAgICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGxpdGBDb25zZWN1dGl2ZVJpc3RQb3J0YCxcbiAgICAgICAgICAgIGAke2NvbmZpZ1R5cGV9IGNvbmZpZ3VyYXRpb24gY2Fubm90IHVzZSBjb25zZWN1dGl2ZSBSSVNUIHBvcnRzICR7TWF0aC5taW4ocG9ydDEsIHBvcnQyKX0gYW5kICR7TWF0aC5tYXgocG9ydDEsIHBvcnQyKX0sIGAgK1xuICAgICAgICAgICAgJ1JJU1QgcHJvdG9jb2xzIHJlcXVpcmUgbm9uLWNvbnNlY3V0aXZlIHBvcnRzIHRvIGF2b2lkIG92ZXJsYXBwaW5nIHJhbmdlcyAoZS5nLiwgdXNlIDYwMDAgYW5kIDYwMDIpJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3RvY29sVmFsdWUgPT09IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zLlJUUC52YWx1ZSkge1xuICAgICAgY29uc3QgcnRwMSA9IHRoaXMuX2NvbmZpZy5ydHA7XG4gICAgICBjb25zdCBydHAyID0gb3RoZXIuX2NvbmZpZy5ydHA7XG4gICAgICBpZiAocnRwMSAmJiBydHAyICYmICdwb3J0JyBpbiBydHAxICYmICdwb3J0JyBpbiBydHAyICYmIHJ0cDEucG9ydCA9PT0gcnRwMi5wb3J0KSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgRHVwbGljYXRlUnRwUG9ydGAsXG4gICAgICAgICAgYCR7Y29uZmlnVHlwZX0gY29uZmlndXJhdGlvbiBjYW5ub3QgdXNlIHRoZSBzYW1lIFJUUCBwb3J0ICR7cnRwMS5wb3J0fSBmb3IgYm90aCBwcm90b2NvbHMsIGAgK1xuICAgICAgICAgICdlYWNoIHByb3RvY29sIG11c3QgdXNlIGEgZGlmZmVyZW50IHBvcnQgbnVtYmVyJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xWYWx1ZSA9PT0gUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMuU1JUX0xJU1RFTkVSLnZhbHVlKSB7XG4gICAgICBjb25zdCBzcnQxID0gdGhpcy5fY29uZmlnLnNydExpc3RlbmVyO1xuICAgICAgY29uc3Qgc3J0MiA9IG90aGVyLl9jb25maWcuc3J0TGlzdGVuZXI7XG4gICAgICBpZiAoc3J0MSAmJiBzcnQyICYmICdwb3J0JyBpbiBzcnQxICYmICdwb3J0JyBpbiBzcnQyICYmIHNydDEucG9ydCA9PT0gc3J0Mi5wb3J0KSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgRHVwbGljYXRlU3J0TGlzdGVuZXJQb3J0YCxcbiAgICAgICAgICBgJHtjb25maWdUeXBlfSBjb25maWd1cmF0aW9uIGNhbm5vdCB1c2UgdGhlIHNhbWUgU1JUIExpc3RlbmVyIHBvcnQgJHtzcnQxLnBvcnR9IGZvciBib3RoIHByb3RvY29scywgYCArXG4gICAgICAgICAgJ2VhY2ggcHJvdG9jb2wgbXVzdCB1c2UgYSBkaWZmZXJlbnQgcG9ydCBudW1iZXInLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHN0YW5kYXJkIFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhcmRDb25maWd1cmF0aW9uUHJvcHMge1xuICAvKiogTmV0d29yayBpbnRlcmZhY2UgZm9yIHRoZSBSb3V0ZXIgSW5wdXQgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0ludGVyZmFjZTogSVJvdXRlck5ldHdvcmtJbnRlcmZhY2U7XG4gIC8qKiBQcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5wdXQgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w6IFJvdXRlcklucHV0UHJvdG9jb2w7XG4gIC8qKlxuICAgKiBUaGUgYXZhaWxhYmlsaXR5IHpvbmUgd2hlcmUgdGhlIHJvdXRlciBpbnB1dCBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFzc2lnbmVkIGJ5IHRoZSBNZWRpYUNvbm5lY3Qgc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBmYWlsb3ZlciBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhaWxvdmVyQ29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqIE5ldHdvcmsgaW50ZXJmYWNlIGZvciB0aGUgUm91dGVyIElucHV0ICovXG4gIHJlYWRvbmx5IG5ldHdvcmtJbnRlcmZhY2U6IElSb3V0ZXJOZXR3b3JrSW50ZXJmYWNlO1xuICAvKiogQXJyYXkgb2YgZXhhY3RseSAyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25zIGZvciBmYWlsb3ZlciAobXVzdCBiZSBzYW1lIHByb3RvY29sIHR5cGUpICovXG4gIHJlYWRvbmx5IHByb3RvY29sczogUm91dGVySW5wdXRQcm90b2NvbFtdO1xuICAvKipcbiAgICogU291cmNlIHByaW9yaXR5IGNvbmZpZ3VyYXRpb24gZm9yIGZhaWxvdmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTb3VyY2VQcmlvcml0eUNvbmZpZy5ub25lKClcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVByaW9yaXR5PzogU291cmNlUHJpb3JpdHlDb25maWc7XG4gIC8qKlxuICAgKiBUaGUgYXZhaWxhYmlsaXR5IHpvbmUgd2hlcmUgdGhlIHJvdXRlciBpbnB1dCBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFzc2lnbmVkIGJ5IHRoZSBNZWRpYUNvbm5lY3Qgc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBtZXJnZSBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lcmdlQ29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqIE5ldHdvcmsgaW50ZXJmYWNlIGZvciB0aGUgUm91dGVyIElucHV0ICovXG4gIHJlYWRvbmx5IG5ldHdvcmtJbnRlcmZhY2U6IElSb3V0ZXJOZXR3b3JrSW50ZXJmYWNlO1xuICAvKiogQXJyYXkgb2YgZXhhY3RseSAyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25zIGZvciBtZXJnZSAobXVzdCBiZSBzYW1lIG5vbi1TUlQgcHJvdG9jb2wgdHlwZSkgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xzOiBSb3V0ZXJJbnB1dFByb3RvY29sW107XG4gIC8qKiBSZWNvdmVyeSB3aW5kb3cgZm9yIG1lcmdlIG9wZXJhdGlvbiAqL1xuICByZWFkb25seSBtZXJnZVJlY292ZXJ5V2luZG93OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgem9uZSB3aGVyZSB0aGUgcm91dGVyIGlucHV0IGlzIGxvY2F0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXNzaWduZWQgYnkgdGhlIE1lZGlhQ29ubmVjdCBzZXJ2aWNlXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1lZGlhQ29ubmVjdCBGbG93IFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd0NvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKiBUaGUgTWVkaWFDb25uZWN0IGZsb3cgdG8gdXNlIGFzIGlucHV0ICovXG4gIHJlYWRvbmx5IGZsb3c6IElGbG93O1xuICAvKiogVGhlIGZsb3cgb3V0cHV0IHRoYXQgZmVlZHMgdGhpcyByb3V0ZXIgaW5wdXQgKi9cbiAgcmVhZG9ubHkgZmxvd091dHB1dDogSUZsb3dPdXRwdXQ7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlVHJhbnNpdERlY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvbiAtIHdpdGhvdXQgYSBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd0NvbmZpZ3VyYXRpb25XaXRob3V0Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIEF2YWlsYWJpbGl0eSBab25lIHRoZSByb3V0ZXIgaW5wdXQgd2lsbCBiZSBwbGFjZWQgaW4uXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlVHJhbnNpdERlY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUxpdmUgQ2hhbm5lbCBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBVc2UgdGhpcyB3aGVuIHRoZSBNZWRpYUxpdmUgY2hhbm5lbCBhbHJlYWR5IGV4aXN0cyBhbmQgeW91IHdhbnQgdG8gaW5nZXN0XG4gKiBmcm9tIG9uZSBvZiBpdHMgb3V0cHV0cyBpbW1lZGlhdGVseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZWRpYUxpdmVDaGFubmVsQ29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBNZWRpYUxpdmUgY2hhbm5lbCB0byB1c2UgYXMgaW5wdXQuXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsOiBJQ2hhbm5lbFJlZjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGluZGl2aWR1YWwgb3V0cHV0ICh3aXRoaW4gdGhlIGNoYW5uZWwncyBNZWRpYUNvbm5lY3QgUm91dGVyIG91dHB1dFxuICAgKiBncm91cCkgdG8gY29ubmVjdCB0byB0aGlzIHJvdXRlciBpbnB1dCDigJQgbm90IHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZ3JvdXAgaXRzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgTWVkaWFMaXZlIHBpcGVsaW5lIHRvIGNvbm5lY3QgdG8gdGhpcyByb3V0ZXIgaW5wdXQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZTogTWVkaWFMaXZlUGlwZWxpbmU7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uLiBNdXN0IG1hdGNoIHRoZSBlbmNyeXB0aW9uIHR5cGUgY29uZmlndXJlZCBvbiB0aGVcbiAgICogTWVkaWFMaXZlIGNoYW5uZWwncyBNZWRpYUNvbm5lY3QgUm91dGVyIG91dHB1dCBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvbWF0aWMgZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlVHJhbnNpdERlY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUxpdmUgQ2hhbm5lbCBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvbiB3aXRob3V0IGEgc3BlY2lmaWMgY2hhbm5lbCBjb25uZWN0aW9uLlxuICpcbiAqIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIHRoZSByb3V0ZXIgaW5wdXQgYmVmb3JlIHRoZSB0YXJnZXQgTWVkaWFMaXZlIGNoYW5uZWwgZXhpc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhTGl2ZUNoYW5uZWxDb25maWd1cmF0aW9uV2l0aG91dENvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBBdmFpbGFiaWxpdHkgWm9uZSB0aGUgcm91dGVyIGlucHV0IHdpbGwgYmUgcGxhY2VkIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWMgZW5jcnlwdGlvbiB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb25zXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgc3RhbmRhcmQgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHNpbmdsZSBwcm90b2NvbFxuICAgKiBAcGFyYW0gcHJvcHMgU3RhbmRhcmQgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3Igc3RhbmRhcmQgc2V0dXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RhbmRhcmQocHJvcHM6IFN0YW5kYXJkQ29uZmlndXJhdGlvblByb3BzKTogUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IFN0YW5kYXJkUm91dGVySW5wdXRDb25maWcocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZhaWxvdmVyIFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uIHdpdGggdHdvIG1hdGNoaW5nIHByb3RvY29sc1xuICAgKiBAcGFyYW0gcHJvcHMgRmFpbG92ZXIgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3IgZmFpbG92ZXIgc2V0dXBcbiAgICogQHRocm93cyBFcnJvciBpZiBwcm90b2NvbHMgZG9uJ3QgbWF0Y2ggb3IgY291bnQgaXMgbm90IGV4YWN0bHkgMlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmYWlsb3Zlcihwcm9wczogRmFpbG92ZXJDb25maWd1cmF0aW9uUHJvcHMpOiBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnByb3RvY29scykgJiYgcHJvcHMucHJvdG9jb2xzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBGYWlsb3ZlclByb3RvY29sQ291bnRgLCBgRmFpbG92ZXIgY29uZmlndXJhdGlvbiByZXF1aXJlcyBleGFjdGx5IDIgcHJvdG9jb2xzLCBnb3QgJHtwcm9wcy5wcm90b2NvbHMubGVuZ3RofWApO1xuICAgIH1cbiAgICBpZiAoIXByb3BzLnByb3RvY29sc1swXS5fbWF0Y2hlc0tpbmQocHJvcHMucHJvdG9jb2xzWzFdKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBGYWlsb3ZlclByb3RvY29sTWlzbWF0Y2hgLCAnUHJvdG9jb2xzIG11c3QgbWF0Y2gnKTtcbiAgICB9XG4gICAgcHJvcHMucHJvdG9jb2xzWzBdLl92YWxpZGF0ZVBvcnRDb25mbGljdHMocHJvcHMucHJvdG9jb2xzWzFdLCBQcm90b2NvbENvbmZpZ1R5cGUuRkFJTE9WRVIpO1xuICAgIHJldHVybiBuZXcgRmFpbG92ZXJSb3V0ZXJJbnB1dENvbmZpZyhwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbWVyZ2UgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb24gd2l0aCB0d28gbWF0Y2hpbmcgbm9uLVNSVCBwcm90b2NvbHNcbiAgICogQHBhcmFtIHByb3BzIE1lcmdlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIG1lcmdlIHNldHVwXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgcHJvdG9jb2xzIGRvbid0IG1hdGNoLCBjb3VudCBpcyBub3QgZXhhY3RseSAyLCBvciBTUlQgcHJvdG9jb2xzIGFyZSB1c2VkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lcmdlKHByb3BzOiBNZXJnZUNvbmZpZ3VyYXRpb25Qcm9wcyk6IFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMucHJvdG9jb2xzKSAmJiBwcm9wcy5wcm90b2NvbHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE1lcmdlUHJvdG9jb2xDb3VudGAsIGBNZXJnZSBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGV4YWN0bHkgMiBwcm90b2NvbHMsIGdvdCAke3Byb3BzLnByb3RvY29scy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5wcm90b2NvbHMuc29tZShwID0+IHAuX2lzU3J0KCkpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE1lcmdlU3J0Tm90U3VwcG9ydGVkYCwgJ1NSVCBwcm90b2NvbHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gbWVyZ2UgY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXByb3BzLnByb3RvY29sc1swXS5fbWF0Y2hlc0tpbmQocHJvcHMucHJvdG9jb2xzWzFdKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBNZXJnZVByb3RvY29sTWlzbWF0Y2hgLCAnUHJvdG9jb2xzIG11c3QgbWF0Y2gnKTtcbiAgICB9XG4gICAgcHJvcHMucHJvdG9jb2xzWzBdLl92YWxpZGF0ZVBvcnRDb25mbGljdHMocHJvcHMucHJvdG9jb2xzWzFdLCBQcm90b2NvbENvbmZpZ1R5cGUuTUVSR0UpO1xuICAgIHJldHVybiBuZXcgTWVyZ2VSb3V0ZXJJbnB1dENvbmZpZyhwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBjb25uZWN0aW5nIHRvIGEgc3BlY2lmaWMgZmxvd1xuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHByZXBhcmUgdGhlIHJvdXRlciBpbnB1dCBmb3IgYSBmbG93IGNvbm5lY3Rpb24gbGF0ZXJcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhQ29ubmVjdCBGbG93IGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyB3aXRob3V0IGNvbm5lY3Rpb25cbiAgICogQHJldHVybnMgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBzZXR1cCB3aXRob3V0IGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFDb25uZWN0Rmxvd1dpdGhvdXRDb25uZWN0aW9uKHByb3BzOiBNZWRpYUNvbm5lY3RGbG93Q29uZmlndXJhdGlvbldpdGhvdXRDb25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFDb25uZWN0Rmxvd1JvdXRlcklucHV0Q29uZmlnKHsgc291cmNlVHJhbnNpdERlY3J5cHRpb246IHByb3BzLnNvdXJjZVRyYW5zaXREZWNyeXB0aW9uIH0sIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhQ29ubmVjdCBGbG93IFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBzb3VyY2UgZmxvdyBhbHJlYWR5IGV4aXN0cyBhbmQgeW91IHdhbnQgdG8gY29ubmVjdCBpbW1lZGlhdGVseS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhQ29ubmVjdCBGbG93IGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhQ29ubmVjdCBGbG93IHNldHVwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhQ29ubmVjdEZsb3cocHJvcHM6IE1lZGlhQ29ubmVjdEZsb3dDb25maWd1cmF0aW9uUHJvcHMpOiBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFDb25uZWN0Rmxvd1JvdXRlcklucHV0Q29uZmlnKHtcbiAgICAgIGZsb3c6IHByb3BzLmZsb3csXG4gICAgICBmbG93T3V0cHV0OiBwcm9wcy5mbG93T3V0cHV0LFxuICAgICAgc291cmNlVHJhbnNpdERlY3J5cHRpb246IHByb3BzLnNvdXJjZVRyYW5zaXREZWNyeXB0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhTGl2ZSBDaGFubmVsIFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBzb3VyY2UgTWVkaWFMaXZlIGNoYW5uZWwgYWxyZWFkeSBleGlzdHMgYW5kIHlvdSB3YW50IHRvXG4gICAqIGluZ2VzdCBmcm9tIG9uZSBvZiBpdHMgb3V0cHV0cyBpbW1lZGlhdGVseS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhTGl2ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhTGl2ZSBjaGFubmVsIHNldHVwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhTGl2ZUNoYW5uZWwocHJvcHM6IE1lZGlhTGl2ZUNoYW5uZWxDb25maWd1cmF0aW9uUHJvcHMpOiBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFMaXZlQ2hhbm5lbFJvdXRlcklucHV0Q29uZmlnKHtcbiAgICAgIG1lZGlhTGl2ZUNoYW5uZWxBcm46IHByb3BzLmNoYW5uZWwuY2hhbm5lbFJlZi5jaGFubmVsQXJuLFxuICAgICAgbWVkaWFMaXZlQ2hhbm5lbE91dHB1dE5hbWU6IHByb3BzLm91dHB1dE5hbWUsXG4gICAgICBtZWRpYUxpdmVQaXBlbGluZUlkOiBwcm9wcy5waXBlbGluZSxcbiAgICAgIHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uOiBwcm9wcy5zb3VyY2VUcmFuc2l0RGVjcnlwdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUxpdmUgQ2hhbm5lbCBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvbiB3aXRob3V0IGEgc3BlY2lmaWMgY2hhbm5lbCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcm91dGVyIGlucHV0IGJlZm9yZSB0aGUgdGFyZ2V0IE1lZGlhTGl2ZSBjaGFubmVsIGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhTGl2ZSBjaGFubmVsIG5vLWNvbm5lY3Rpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhTGl2ZSBjaGFubmVsIHNldHVwIHdpdGhvdXQgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUxpdmVDaGFubmVsV2l0aG91dENvbm5lY3Rpb24ocHJvcHM6IE1lZGlhTGl2ZUNoYW5uZWxDb25maWd1cmF0aW9uV2l0aG91dENvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUxpdmVDaGFubmVsUm91dGVySW5wdXRDb25maWcoeyBzb3VyY2VUcmFuc2l0RGVjcnlwdGlvbjogcHJvcHMuc291cmNlVHJhbnNpdERlY3J5cHRpb24gfSwgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gaXRzIENsb3VkRm9ybWF0aW9uIHNoYXBlLiBDYWxsZWQgYnkgdGhlIFJvdXRlcklucHV0XG4gICAqIGNvbnN0cnVjdG9yIOKAlCBlYWNoIGNvbmNyZXRlIHN1YmNsYXNzIHN1cHBsaWVzIGl0cyBvd24gdmFyaWFudC1zcGVjaWZpYyByZW5kZXJpbmcuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlcklucHV0QXJuPzogc3RyaW5nKToge1xuICAgIGNvbmZpZzogQ2ZuUm91dGVySW5wdXQuUm91dGVySW5wdXRDb25maWd1cmF0aW9uUHJvcGVydHk7IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGluZ2VzdCBlbmRwb2ludHMgZm9yIHByb3RvY29sLWJhc2VkIGlucHV0cyB0aGF0IGxpc3RlbiBvbiBvbmUgb3IgbW9yZVxuICAgKiBwb3J0cy5cbiAgICpcbiAgICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSB2YXJpYW50IGhhcyBubyBjb25jZXB0IG9mIGEgbGlzdGVuIHBvcnQgKFNSVCBjYWxsZXIsXG4gICAqIE1lZGlhQ29ubmVjdCBGbG93LCBNZWRpYUxpdmUgQ2hhbm5lbCkuIFJldHVybnMgYW4gYXJyYXkgd2l0aCBvbmUgZW50cnkgZm9yXG4gICAqIHN0YW5kYXJkIHZhcmlhbnRzLCBhbmQgb25lIGVudHJ5IHBlciBzb3VyY2UgZm9yIGZhaWxvdmVyIGFuZCBtZXJnZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX2VuZHBvaW50cyhpcEFkZHJlc3M6IHN0cmluZyk6IFJvdXRlcklucHV0RW5kcG9pbnRbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYW4gaW5nZXN0IFVSTCBzdHJpbmcgKHNjaGVtZTovL2lwOnBvcnQpLiBVc2VkIGJ5IGBfaW5nZXN0VXJsKClgIG9uIGluZGl2aWR1YWxcbiAqIHByb3RvY29scyBhbmQgY29tcG9zZWQgaW50byB0aGUgcGVyLWNvbmZpZy12YXJpYW50IGBfZW5kcG9pbnRzKClgIHJlc3VsdHMuXG4gKlxuICogRXh0cmFjdHMgdGhlIGJhc2UgcHJvdG9jb2wgZm9yIHRoZSBVUkwgc2NoZW1lIChlLmcuIFNSVF9MSVNURU5FUiDihpIgc3J0LCBSVFAg4oaSIHJ0cCkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckluZ2VzdFVybChwcm90b2NvbE5hbWU6IHN0cmluZywgcG9ydDogbnVtYmVyLCBpcEFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNjaGVtZSA9IHByb3RvY29sTmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCdfJylbMF07XG4gIHJldHVybiBGbi5qb2luKCcnLCBbYCR7c2NoZW1lfTovL2AsIGlwQWRkcmVzcywgYDoke3BvcnR9YF0pO1xufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IHN0YW5kYXJkIChzaW5nbGUtcHJvdG9jb2wpIHJvdXRlciBpbnB1dCBjb25maWd1cmF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFN0YW5kYXJkUm91dGVySW5wdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTdGFuZGFyZENvbmZpZ3VyYXRpb25Qcm9wcykgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlcklucHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnByb3BzLnByb3RvY29sLl9iaW5kKHNjb3BlLCByb3V0ZXJJbnB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBzdGFuZGFyZDoge1xuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VBcm46IHRoaXMucHJvcHMubmV0d29ya0ludGVyZmFjZS5yb3V0ZXJOZXR3b3JrSW50ZXJmYWNlQXJuLFxuICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbC5uYW1lLnZhbHVlLFxuICAgICAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogcHJvdG9jb2wuY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMucHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIF9lbmRwb2ludHMoaXBBZGRyZXNzOiBzdHJpbmcpOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHVybCA9IHRoaXMucHJvcHMucHJvdG9jb2wuX2luZ2VzdFVybChpcEFkZHJlc3MpO1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3BzLnByb3RvY29sLl9saXN0ZW5pbmdQb3J0KCk7XG4gICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkIHx8IHBvcnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gW3sgdXJsLCBwb3J0IH1dO1xuICB9XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogZmFpbG92ZXIgcm91dGVyIGlucHV0IGNvbmZpZ3VyYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgRmFpbG92ZXJSb3V0ZXJJbnB1dENvbmZpZyBleHRlbmRzIFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEZhaWxvdmVyQ29uZmlndXJhdGlvblByb3BzKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVySW5wdXRBcm4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcmlvcml0eSA9ICh0aGlzLnByb3BzLnNvdXJjZVByaW9yaXR5ID8/IFNvdXJjZVByaW9yaXR5Q29uZmlnLm5vbmUoKSkuX2JpbmQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGZhaWxvdmVyOiB7XG4gICAgICAgICAgbmV0d29ya0ludGVyZmFjZUFybjogdGhpcy5wcm9wcy5uZXR3b3JrSW50ZXJmYWNlLnJvdXRlck5ldHdvcmtJbnRlcmZhY2VBcm4sXG4gICAgICAgICAgcHJvdG9jb2xDb25maWd1cmF0aW9uczogdGhpcy5wcm9wcy5wcm90b2NvbHMubWFwKHAgPT4gcC5fYmluZChzY29wZSwgcm91dGVySW5wdXRBcm4pLmNvbmZpZyksXG4gICAgICAgICAgc291cmNlUHJpb3JpdHlNb2RlOiBwcmlvcml0eS5zb3VyY2VQcmlvcml0eU1vZGUsXG4gICAgICAgICAgcHJpbWFyeVNvdXJjZUluZGV4OiBwcmlvcml0eS5wcmltYXJ5U291cmNlSW5kZXgsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5wcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgX2VuZHBvaW50cyhpcEFkZHJlc3M6IHN0cmluZyk6IFJvdXRlcklucHV0RW5kcG9pbnRbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZW5kcG9pbnRzOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5wcm9wcy5wcm90b2NvbHMpIHtcbiAgICAgIGNvbnN0IHVybCA9IHAuX2luZ2VzdFVybChpcEFkZHJlc3MpO1xuICAgICAgY29uc3QgcG9ydCA9IHAuX2xpc3RlbmluZ1BvcnQoKTtcbiAgICAgIGlmICh1cmwgPT09IHVuZGVmaW5lZCB8fCBwb3J0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBlbmRwb2ludHMucHVzaCh7IHVybCwgcG9ydCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVuZHBvaW50cztcbiAgfVxufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IG1lcmdlIHJvdXRlciBpbnB1dCBjb25maWd1cmF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE1lcmdlUm91dGVySW5wdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBNZXJnZUNvbmZpZ3VyYXRpb25Qcm9wcykgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlcklucHV0QXJuPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZXJnZToge1xuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VBcm46IHRoaXMucHJvcHMubmV0d29ya0ludGVyZmFjZS5yb3V0ZXJOZXR3b3JrSW50ZXJmYWNlQXJuLFxuICAgICAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbnM6IHRoaXMucHJvcHMucHJvdG9jb2xzLm1hcChwID0+IHAuX2JpbmQoc2NvcGUsIHJvdXRlcklucHV0QXJuKS5jb25maWcpLFxuICAgICAgICAgIG1lcmdlUmVjb3ZlcnlXaW5kb3dNaWxsaXNlY29uZHM6IHRoaXMucHJvcHMubWVyZ2VSZWNvdmVyeVdpbmRvdy50b01pbGxpc2Vjb25kcygpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMucHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIF9lbmRwb2ludHMoaXBBZGRyZXNzOiBzdHJpbmcpOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVuZHBvaW50czogUm91dGVySW5wdXRFbmRwb2ludFtdID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMucHJvcHMucHJvdG9jb2xzKSB7XG4gICAgICBjb25zdCB1cmwgPSBwLl9pbmdlc3RVcmwoaXBBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHBvcnQgPSBwLl9saXN0ZW5pbmdQb3J0KCk7XG4gICAgICBpZiAodXJsID09PSB1bmRlZmluZWQgfHwgcG9ydCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgZW5kcG9pbnRzLnB1c2goeyB1cmwsIHBvcnQgfSk7XG4gICAgfVxuICAgIHJldHVybiBlbmRwb2ludHM7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBvcHRpb25zIGZvciB7QGxpbmsgTWVkaWFDb25uZWN0Rmxvd1JvdXRlcklucHV0Q29uZmlnfS5cbiAqL1xuaW50ZXJmYWNlIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJJbnB1dE9wdGlvbnMge1xuICByZWFkb25seSBmbG93PzogSUZsb3c7XG4gIHJlYWRvbmx5IGZsb3dPdXRwdXQ/OiBJRmxvd091dHB1dDtcbiAgcmVhZG9ubHkgc291cmNlVHJhbnNpdERlY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBNZWRpYUNvbm5lY3QgRmxvdyByb3V0ZXIgaW5wdXQgY29uZmlndXJhdGlvbiAod2l0aCBvciB3aXRob3V0IGNvbm5lY3Rpb24pLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJJbnB1dENvbmZpZyBleHRlbmRzIFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTWVkaWFDb25uZWN0Rmxvd1JvdXRlcklucHV0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmcsXG4gICkgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlcklucHV0QXJuPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZWRpYUNvbm5lY3RGbG93OiB7XG4gICAgICAgICAgZmxvd0FybjogdGhpcy5vcHRpb25zLmZsb3c/LmZsb3dBcm4sXG4gICAgICAgICAgZmxvd091dHB1dEFybjogdGhpcy5vcHRpb25zLmZsb3dPdXRwdXQ/LmZsb3dPdXRwdXRBcm4sXG4gICAgICAgICAgc291cmNlVHJhbnNpdERlY3J5cHRpb246IHJlbmRlclRyYW5zaXRFbmNyeXB0aW9uKHNjb3BlLCAnU291cmNlVHJhbnNpdERlY3J5cHRpb25Sb2xlJywgdGhpcy5vcHRpb25zLnNvdXJjZVRyYW5zaXREZWNyeXB0aW9uLCByb3V0ZXJJbnB1dEFybiksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5hdmFpbGFiaWxpdHlab25lLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgX2VuZHBvaW50cyhfaXBBZGRyZXNzOiBzdHJpbmcpOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBvcHRpb25zIGZvciB7QGxpbmsgTWVkaWFMaXZlQ2hhbm5lbFJvdXRlcklucHV0Q29uZmlnfS5cbiAqL1xuaW50ZXJmYWNlIE1lZGlhTGl2ZUNoYW5uZWxSb3V0ZXJJbnB1dE9wdGlvbnMge1xuICByZWFkb25seSBtZWRpYUxpdmVDaGFubmVsQXJuPzogc3RyaW5nO1xuICByZWFkb25seSBtZWRpYUxpdmVDaGFubmVsT3V0cHV0TmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbWVkaWFMaXZlUGlwZWxpbmVJZD86IE1lZGlhTGl2ZVBpcGVsaW5lO1xuICByZWFkb25seSBzb3VyY2VUcmFuc2l0RGVjcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IE1lZGlhTGl2ZSBDaGFubmVsIHJvdXRlciBpbnB1dCBjb25maWd1cmF0aW9uICh3aXRoIG9yIHdpdGhvdXQgY29ubmVjdGlvbikuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTWVkaWFMaXZlQ2hhbm5lbFJvdXRlcklucHV0Q29uZmlnIGV4dGVuZHMgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBNZWRpYUxpdmVDaGFubmVsUm91dGVySW5wdXRPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZyxcbiAgKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVySW5wdXRBcm4/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG1lZGlhTGl2ZUNoYW5uZWw6IHtcbiAgICAgICAgICBtZWRpYUxpdmVDaGFubmVsQXJuOiB0aGlzLm9wdGlvbnMubWVkaWFMaXZlQ2hhbm5lbEFybixcbiAgICAgICAgICBtZWRpYUxpdmVDaGFubmVsT3V0cHV0TmFtZTogdGhpcy5vcHRpb25zLm1lZGlhTGl2ZUNoYW5uZWxPdXRwdXROYW1lLFxuICAgICAgICAgIG1lZGlhTGl2ZVBpcGVsaW5lSWQ6IHRoaXMub3B0aW9ucy5tZWRpYUxpdmVQaXBlbGluZUlkLFxuICAgICAgICAgIHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uOiByZW5kZXJUcmFuc2l0RW5jcnlwdGlvbihzY29wZSwgJ1NvdXJjZVRyYW5zaXREZWNyeXB0aW9uUm9sZScsIHRoaXMub3B0aW9ucy5zb3VyY2VUcmFuc2l0RGVjcnlwdGlvbiwgcm91dGVySW5wdXRBcm4pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIF9lbmRwb2ludHMoX2lwQWRkcmVzczogc3RyaW5nKTogUm91dGVySW5wdXRFbmRwb2ludFtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQSBNZWRpYUNvbm5lY3QgUm91dGVyIElucHV0IHRoYXQgcmVjZWl2ZXMgbWVkaWEgc3RyZWFtcyBhbmQgcm91dGVzIHRoZW0gdG8gb3V0cHV0cy5cbiAqXG4gKiBSb3V0ZXIgSW5wdXRzIHN1cHBvcnQgbXVsdGlwbGUgY29uZmlndXJhdGlvbiB0eXBlczpcbiAqIC0gU3RhbmRhcmQ6IFNpbmdsZSBwcm90b2NvbCBpbnB1dFxuICogLSBGYWlsb3ZlcjogVHdvIG1hdGNoaW5nIHByb3RvY29scyBmb3IgcmVkdW5kYW5jeVxuICogLSBNZXJnZTogVHdvIG1hdGNoaW5nIG5vbi1TUlQgcHJvdG9jb2xzIGZvciBzdHJlYW0gbWVyZ2luZ1xuICogLSBNZWRpYUNvbm5lY3QgRmxvdzogSW5wdXQgZnJvbSBhbiBleGlzdGluZyBNZWRpYUNvbm5lY3QgRmxvd1xuICovXG5hYnN0cmFjdCBjbGFzcyBSb3V0ZXJJbnB1dEJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZXJJbnB1dCB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJJbnB1dEFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcm91dGVySW5wdXRJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXBBZGRyZXNzOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBlbmRwb2ludHM6IFJvdXRlcklucHV0RW5kcG9pbnRbXTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRyYW5zaXRFbmNyeXB0aW9uU2VjcmV0PzogSVNlY3JldDtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGdyYW50czogUm91dGVySW5wdXRHcmFudHM7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoaXMgUm91dGVyIElucHV0IHJlc291cmNlLlxuICAgKiBSZXF1aXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgSVJvdXRlcklucHV0UmVmIGludGVyZmFjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcm91dGVySW5wdXRSZWYoKTogUm91dGVySW5wdXRSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7IHJvdXRlcklucHV0QXJuOiB0aGlzLnJvdXRlcklucHV0QXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRoaXMgcm91dGVyIGlucHV0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9NZWRpYUNvbm5lY3QnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFJvdXRlcklucHV0QVJOOiB0aGlzLnJvdXRlcklucHV0QXJuLFxuICAgICAgICAuLi5wcm9wcz8uZGltZW5zaW9uc01hcCxcbiAgICAgIH0sXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgYml0cmF0ZSBvZiB0aGUgcm91dGVyIGlucHV0J3MgcGF5bG9hZC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNCaXRyYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJJbnB1dEJpdFJhdGUnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdhdmcnLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQklUU19QRVJfU0VDT05ELFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciBwYWNrZXRzIGxvc3QgaW4gdHJhbnNpdCB0aGF0IHdlcmUgbm90IHJlY292ZXJlZCBieSBlcnJvciBjb3JyZWN0aW9uLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY05vdFJlY292ZXJlZFBhY2tldHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlcklucHV0Tm90UmVjb3ZlcmVkUGFja2V0cycsIHtcbiAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5DT1VOVCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIGJ5IHRoZSByb3V0ZXIgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVG90YWxQYWNrZXRzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJJbnB1dFRvdGFsUGFja2V0cycsIHtcbiAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5DT1VOVCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHJvdXRlciBpbnB1dCBjb25uZWN0aW9uIHN0YXRlICgxIGNvbm5lY3RlZCwgMCBkaXNjb25uZWN0ZWQpLiBBcHBsaWVzIHRvIFNSVCBzb3VyY2VzIG9ubHkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ29ubmVjdGVkKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJJbnB1dENvbm5lY3RlZCcsIHtcbiAgICAgIHN0YXRpc3RpYzogJ21pbicsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5OT05FLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciBjb250aW51aXR5IGNvdW50ZXIgZXJyb3JzIGluIHRoZSB0cmFuc3BvcnQgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0NvbnRpbnVpdHlDb3VudGVyRXJyb3JzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJJbnB1dENDRXJyb3JzJywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgcmVjb3ZlcnkgbGF0ZW5jeSBvZiB0aGUgaW5wdXQgc3RyZWFtLiBBcHBsaWVzIHRvIFJJU1QsIFNSVCwgYW5kIFJUUC1GRUMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTGF0ZW5jeShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVySW5wdXRMYXRlbmN5Jywge1xuICAgICAgc3RhdGlzdGljOiAnYXZnJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0Lk1JTExJU0VDT05EUyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm91dGVyIGlucHV0IGhhcyBzd2l0Y2hlZCBzb3VyY2VzIGluIEZhaWxvdmVyIG1vZGUuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRmFpbG92ZXJTd2l0Y2hlcyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVySW5wdXRGYWlsb3ZlclN3aXRjaGVzJywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IFJvdXRlciBJbnB1dC5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFJvdXRlcklucHV0IGV4dGVuZHMgUm91dGVySW5wdXRCYXNlIGltcGxlbWVudHMgSVJvdXRlcklucHV0IHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtbWVkaWFjb25uZWN0LWFscGhhLlJvdXRlcklucHV0JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIFJvdXRlciBJbnB1dCBmcm9tIGl0cyBBUk4uXG4gICAqXG4gICAqIFVzZSBgZnJvbVJvdXRlcklucHV0QXR0cmlidXRlcygpYCBpbnN0ZWFkIGlmIHlvdSBuZWVkIHRvIGV4cG9zZSBgcm91dGVySW5wdXRJZGBcbiAgICogb3IgYGlwQWRkcmVzc2Agb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSByb3V0ZXJJbnB1dEFybiBUaGUgQVJOIG9mIHRoZSBSb3V0ZXIgSW5wdXRcbiAgICogQHJldHVybnMgQSBSb3V0ZXIgSW5wdXQgY29uc3RydWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Sb3V0ZXJJbnB1dEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCByb3V0ZXJJbnB1dEFybjogc3RyaW5nKTogSVJvdXRlcklucHV0IHtcbiAgICByZXR1cm4gUm91dGVySW5wdXQuZnJvbVJvdXRlcklucHV0QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgcm91dGVySW5wdXRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIFJvdXRlciBJbnB1dCBmcm9tIGl0cyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBQcm92aWRlIGByb3V0ZXJJbnB1dElkYCBhbmQvb3IgYGlwQWRkcmVzc2Agd2hlbiBpbXBvcnRpbmcgYW4gaW5wdXQgdGhhdCB3YXMgZGVwbG95ZWRcbiAgICogZXh0ZXJuYWxseSDigJQgb3RoZXJ3aXNlIGFjY2Vzc2luZyB0aG9zZSBwcm9wZXJ0aWVzIG9uIHRoZSBpbXBvcnRlZCBjb25zdHJ1Y3Qgd2lsbCB0aHJvdy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgUm91dGVyIElucHV0IGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgQSBSb3V0ZXIgSW5wdXQgY29uc3RydWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Sb3V0ZXJJbnB1dEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFJvdXRlcklucHV0QXR0cmlidXRlcyk6IElSb3V0ZXJJbnB1dCB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUm91dGVySW5wdXRCYXNlIGltcGxlbWVudHMgSVJvdXRlcklucHV0IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb3V0ZXJJbnB1dEFybiA9IGF0dHJzLnJvdXRlcklucHV0QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNpdEVuY3J5cHRpb25TZWNyZXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRzID0gUm91dGVySW5wdXRHcmFudHMuZnJvbVJvdXRlcklucHV0KHRoaXMpO1xuXG4gICAgICBwdWJsaWMgZ2V0IGVuZHBvaW50cygpOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10ge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBSb3V0ZXJJbnB1dEVuZHBvaW50c05vdEF2YWlsYWJsZUltcG9ydGVkYCxcbiAgICAgICAgICBgJ2VuZHBvaW50cycgaXMgbm90IGF2YWlsYWJsZSBvbiBpbXBvcnRlZCBSb3V0ZXJJbnB1dCAke3RoaXMubm9kZS5wYXRofTsgb25seSBSb3V0ZXJJbnB1dHMgY29uc3RydWN0ZWQgaW4gdGhpcyBhcHAgZm9yIGxpc3RlbmluZyBwcm90b2NvbCB2YXJpYW50cyAoUlRQLCBSSVNULCBTUlQgbGlzdGVuZXIsIGluY2x1ZGluZyBmYWlsb3ZlciBhbmQgbWVyZ2UpIGV4cG9zZSBpbmdlc3QgZW5kcG9pbnRzYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZ2V0IHJvdXRlcklucHV0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGF0dHJzLnJvdXRlcklucHV0SWQpIHJldHVybiBhdHRycy5yb3V0ZXJJbnB1dElkO1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBSb3V0ZXJJbnB1dElkTm90UHJvdmlkZWRgLFxuICAgICAgICAgIGAncm91dGVySW5wdXRJZCcgaXMgbm90IGF2YWlsYWJsZSBvbiBpbXBvcnRlZCBSb3V0ZXJJbnB1dCAke3RoaXMubm9kZS5wYXRofTsgcGFzcyBpdCB2aWEgZnJvbVJvdXRlcklucHV0QXR0cmlidXRlc2AsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBpcEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGF0dHJzLmlwQWRkcmVzcykgcmV0dXJuIGF0dHJzLmlwQWRkcmVzcztcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUm91dGVySW5wdXRJcEFkZHJlc3NOb3RQcm92aWRlZGAsXG4gICAgICAgICAgYCdpcEFkZHJlc3MnIGlzIG5vdCBhdmFpbGFibGUgb24gaW1wb3J0ZWQgUm91dGVySW5wdXQgJHt0aGlzLm5vZGUucGF0aH07IHBhc3MgaXQgdmlhIGZyb21Sb3V0ZXJJbnB1dEF0dHJpYnV0ZXNgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWF4aW11bSBiaXRyYXRlIGluIE1icHMgZm9yIGEga25vd24gdGllciwgb3IgdW5kZWZpbmVkIGZvciBjdXN0b20gdGllcnMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB0aWVyTGltaXRNYnBzKHRpZXI6IFJvdXRlcklucHV0VGllcik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlcklucHV0VGllci5JTlBVVF8yMC52YWx1ZSkgcmV0dXJuIDIwO1xuICAgIGlmICh0aWVyLnZhbHVlID09PSBSb3V0ZXJJbnB1dFRpZXIuSU5QVVRfNTAudmFsdWUpIHJldHVybiA1MDtcbiAgICBpZiAodGllci52YWx1ZSA9PT0gUm91dGVySW5wdXRUaWVyLklOUFVUXzEwMC52YWx1ZSkgcmV0dXJuIDEwMDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlcklucHV0QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJJbnB1dElkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5kcG9pbnRzOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10gfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2l0RW5jcnlwdGlvblNlY3JldD86IElTZWNyZXQ7XG4gIHB1YmxpYyByZWFkb25seSBncmFudHM6IFJvdXRlcklucHV0R3JhbnRzO1xuXG4gIHB1YmxpYyBnZXQgZW5kcG9pbnRzKCk6IFJvdXRlcklucHV0RW5kcG9pbnRbXSB7XG4gICAgaWYgKHRoaXMuX2VuZHBvaW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgUm91dGVySW5wdXRFbmRwb2ludHNOb3RBdmFpbGFibGVDb25maWdgLFxuICAgICAgICBgJ2VuZHBvaW50cycgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIFJvdXRlcklucHV0ICR7dGhpcy5ub2RlLnBhdGh9OyBvbmx5IGxpc3RlbmluZyBwcm90b2NvbCB2YXJpYW50cyAoUlRQLCBSSVNULCBTUlQgbGlzdGVuZXIg4oCUIGluY2x1ZGluZyBmYWlsb3ZlciBhbmQgbWVyZ2UgYnVpbHQgZnJvbSB0aG9zZSkgZXhwb3NlIGluZ2VzdCBlbmRwb2ludHMg4oCUIFNSVCBjYWxsZXIsIE1lZGlhQ29ubmVjdCBGbG93LCBhbmQgTWVkaWFMaXZlIENoYW5uZWwgaW5wdXRzIGRvIG5vdGAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZW5kcG9pbnRzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlcklucHV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMucm91dGVySW5wdXROYW1lID8/IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjggfSkgfSksXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByb3V0ZXIgaW5wdXQgbmFtZSBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5yb3V0ZXJJbnB1dE5hbWUgIT0gbnVsbCAmJiBwcm9wcy5yb3V0ZXJJbnB1dE5hbWUgIT09ICcnICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMucm91dGVySW5wdXROYW1lKSkge1xuICAgICAgaWYgKHByb3BzLnJvdXRlcklucHV0TmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVySW5wdXROYW1lTGVuZ3RoYCwgYFJvdXRlciBpbnB1dCBuYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjggY2hhcmFjdGVycywgZ290ICR7cHJvcHMucm91dGVySW5wdXROYW1lLmxlbmd0aH1gLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmICghL15bYS16QS1aMC05Xy1dKyQvLnRlc3QocHJvcHMucm91dGVySW5wdXROYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJJbnB1dE5hbWVGb3JtYXRgLCBgUm91dGVyIGlucHV0IG5hbWUgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3JlcywgZ290ICcke3Byb3BzLnJvdXRlcklucHV0TmFtZX0nYCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWF4aW11bSBiaXRyYXRlXG4gICAgaWYgKCFwcm9wcy5tYXhpbXVtQml0cmF0ZS5pc1VucmVzb2x2ZWQoKSAmJiBwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpIDwgMTAwMDAwMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVySW5wdXRNaW5CaXRyYXRlYCwgYE1heGltdW0gYml0cmF0ZSBtdXN0IGJlIGF0IGxlYXN0IDEsMDAwLDAwMCBiaXRzL3MgKDEgTWJwcyksIGdvdCAke3Byb3BzLm1heGltdW1CaXRyYXRlLnRvQnBzKCl9YCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYml0cmF0ZSBkb2VzIG5vdCBleGNlZWQgdGllciBsaW1pdFxuICAgIGNvbnN0IHJlc29sdmVkVGllciA9IHByb3BzLnRpZXIgPz8gUm91dGVySW5wdXRUaWVyLklOUFVUXzIwO1xuICAgIGNvbnN0IHRpZXJNYnBzID0gUm91dGVySW5wdXQudGllckxpbWl0TWJwcyhyZXNvbHZlZFRpZXIpO1xuICAgIGlmIChleGNlZWRzUm91dGVyVGllckJpdHJhdGUodGllck1icHMsIHByb3BzLm1heGltdW1CaXRyYXRlKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVySW5wdXRCaXRyYXRlRXhjZWVkc1RpZXJgLCBgTWF4aW11bSBiaXRyYXRlICR7cHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKSAvIDFfMDAwXzAwMH0gTWJwcyBleGNlZWRzIHRoZSAke3Jlc29sdmVkVGllci52YWx1ZX0gdGllciBsaW1pdCBvZiAke3RpZXJNYnBzfSBNYnBzYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWFpbnRlbmFuY2UgdGltZSBmb3JtYXRcbiAgICBpZiAocHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICB2YWxpZGF0ZU1haW50ZW5hbmNlVGltZShwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24udGltZSk7XG4gICAgfVxuXG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IHRhcmdldFJlZ2lvbiA9IHByb3BzLnJlZ2lvbk5hbWUgPz8gc3RhY2sucmVnaW9uO1xuXG4gICAgLy8gV2lsZGNhcmQgdGhlIGlkIOKAlCBwaW5uaW5nIHRoZSBsaXZlIEFSTiAoYXR0ckFybikgd291bGQgY3JlYXRlIGEgcm9sZSDihpIgcm91dGVyLWlucHV0IOKGkiByb2xlIGN5Y2xlLlxuICAgIGNvbnN0IHJvdXRlcklucHV0QXJuID0gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdtZWRpYWNvbm5lY3QnLFxuICAgICAgcmVnaW9uOiB0YXJnZXRSZWdpb24sXG4gICAgICByZXNvdXJjZTogJ3JvdXRlcklucHV0JyxcbiAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbmZpZ0JpbmQgPSBwcm9wcy5jb25maWd1cmF0aW9uLl9iaW5kKHRoaXMsIHJvdXRlcklucHV0QXJuKTtcblxuICAgIC8vIFZhbGlkYXRlIEFaIG1hdGNoZXMgcmVnaW9uIGlmIHByb3ZpZGVkXG4gICAgaWYgKGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSkgJiYgIVRva2VuLmlzVW5yZXNvbHZlZCh0YXJnZXRSZWdpb24pXG4gICAgICAmJiAhY29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lLnN0YXJ0c1dpdGgodGFyZ2V0UmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVySW5wdXRBelJlZ2lvbk1pc21hdGNoYCwgYEF2YWlsYWJpbGl0eSB6b25lICcke2NvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZX0nIG11c3QgYmUgd2l0aGluIHJlZ2lvbiAnJHt0YXJnZXRSZWdpb259J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zaXQgPSByZXNvbHZlVHJhbnNpdEVuY3J5cHRpb24odGhpcywgJ1RyYW5zaXRFbmNyeXB0aW9uUm9sZScsIHByb3BzLnRyYW5zaXRFbmNyeXB0aW9uLCByb3V0ZXJJbnB1dEFybik7XG5cbiAgICBjb25zdCByb3V0ZXJpbnB1dCA9IG5ldyBDZm5Sb3V0ZXJJbnB1dCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIG1heGltdW1CaXRyYXRlOiBwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpLFxuICAgICAgdGllcjogKHByb3BzLnRpZXIgPz8gUm91dGVySW5wdXRUaWVyLklOUFVUXzIwKS52YWx1ZSxcbiAgICAgIHJvdXRpbmdTY29wZTogcHJvcHMucm91dGluZ1Njb3BlLnZhbHVlLFxuICAgICAgbWFpbnRlbmFuY2VDb25maWd1cmF0aW9uOiBwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24gPyB7XG4gICAgICAgIHByZWZlcnJlZERheVRpbWU6IHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbixcbiAgICAgIH0gOiB7XG4gICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ0JpbmQuY29uZmlnLFxuICAgICAgdHJhbnNpdEVuY3J5cHRpb246IHRyYW5zaXQuY29uZmlnLFxuICAgICAgcmVnaW9uTmFtZTogdGFyZ2V0UmVnaW9uLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogY29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgdGFnczogcHJvcHMudGFncyA/IHJlbmRlclRhZ3MocHJvcHMudGFncykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlcklucHV0QXJuID0gcm91dGVyaW5wdXQuYXR0ckFybjtcbiAgICB0aGlzLnJvdXRlcklucHV0SWQgPSByb3V0ZXJpbnB1dC5hdHRySWQ7XG4gICAgdGhpcy5pcEFkZHJlc3MgPSByb3V0ZXJpbnB1dC5hdHRySXBBZGRyZXNzO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gcm91dGVyaW5wdXQuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IHJvdXRlcmlucHV0LmF0dHJVcGRhdGVkQXQ7XG5cbiAgICAvLyBXaXRob3V0IHRoaXMgdGhlIHJvdXRlciBpbnB1dCBjYW4gYmUgY3JlYXRlZCBiZWZvcmUgdGhlXG4gICAgLy8gcG9saWN5IGlzIGF0dGFjaGVkIChcImFjY2VzcyBkZW5pZWRcIiBhdCBjcmVhdGUgdGltZSkuIE9yZGVyaW5nIHRoZSBncmFudCBiZWZvcmUgdGhlXG4gICAgLy8gcm91dGVyIGlucHV0IHB1bGxzIHRoZSBwb2xpY3kgaW4gYXMgYSBkZXBlbmRlbmN5LlxuICAgIHRyYW5zaXQuZ3JhbnQ/LmFwcGx5QmVmb3JlKHJvdXRlcmlucHV0KTtcblxuICAgIC8vIENvbXB1dGUgaW5nZXN0IGVuZHBvaW50cyBmb3IgcHJvdG9jb2wtYmFzZWQgdmFyaWFudHNcbiAgICB0aGlzLl9lbmRwb2ludHMgPSBwcm9wcy5jb25maWd1cmF0aW9uLl9lbmRwb2ludHMocm91dGVyaW5wdXQuYXR0cklwQWRkcmVzcyk7XG5cbiAgICAvLyBTdG9yZSB0aGUgdHJhbnNpdCBlbmNyeXB0aW9uIHNlY3JldCBpZiBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgdGhpcy50cmFuc2l0RW5jcnlwdGlvblNlY3JldCA9IHByb3BzLnRyYW5zaXRFbmNyeXB0aW9uPy5zZWNyZXQ7XG4gICAgdGhpcy5ncmFudHMgPSBSb3V0ZXJJbnB1dEdyYW50cy5mcm9tUm91dGVySW5wdXQodGhpcyk7XG4gIH1cbn1cbiJdfQ==
|
|
1100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicm91dGVyLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUFxSTtBQUVySSwrREFBMEQ7QUFDMUQsbUVBQThEO0FBSTlELDRFQUE0RDtBQUM1RCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBSTFFLG1GQUFvRTtBQUdwRSxxQ0FBdUs7QUFFdks7O0dBRUc7QUFDSCxNQUFhLDBCQUEwQjtJQW1CRDs7SUFsQnBDLG1DQUFtQztJQUM1QixNQUFNLENBQVUsR0FBRyxHQUFHLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUseUNBQXlDO0lBQ2xDLE1BQU0sQ0FBVSxJQUFJLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRSw4Q0FBOEM7SUFDdkMsTUFBTSxDQUFVLFVBQVUsR0FBRyxJQUFJLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pGLGdEQUFnRDtJQUN6QyxNQUFNLENBQVUsWUFBWSxHQUFHLElBQUksMEJBQTBCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFckY7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5QztJQUVELDZDQUE2QztJQUM3QyxZQUFvQyxLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtLQUFJO0lBRXJELCtCQUErQjtJQUN4QixRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ25COztBQXhCSCxnRUF5QkM7QUFrSkQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFlYTs7SUFkcEMsK0NBQStDO0lBQ3hDLE1BQU0sQ0FBVSxRQUFRLEdBQUcsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFD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N0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7WUFDL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxpREFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkQ7O1lBNUxVLHVEQUFXOzs7OztBQUFYLGtDQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCaXRyYXRlLCBJUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIER1cmF0aW9uLCBGbiwgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBTdGFjaywgVG9rZW4sIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY09wdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBNZXRyaWMsIFVuaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBDZm5Sb3V0ZXJJbnB1dCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tZWRpYWNvbm5lY3QnO1xuaW1wb3J0IHR5cGUgeyBJUm91dGVySW5wdXRSZWYsIFJvdXRlcklucHV0UmVmZXJlbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhY29ubmVjdCc7XG5pbXBvcnQgdHlwZSB7IElDaGFubmVsUmVmIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhbGl2ZSc7XG5pbXBvcnQgdHlwZSB7IElTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBJRmxvdyB9IGZyb20gJy4vZmxvdyc7XG5pbXBvcnQgdHlwZSB7IElGbG93T3V0cHV0IH0gZnJvbSAnLi9mbG93LW91dHB1dCc7XG5pbXBvcnQgeyBSb3V0ZXJJbnB1dEdyYW50cyB9IGZyb20gJy4vbWVkaWFjb25uZWN0LWdyYW50cy5nZW5lcmF0ZWQnO1xuaW1wb3J0IHR5cGUgeyBJUm91dGVyTmV0d29ya0ludGVyZmFjZSB9IGZyb20gJy4vcm91dGVyLW5ldHdvcmstaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgTWFpbnRlbmFuY2VEYXksIE1lZGlhTGl2ZVBpcGVsaW5lLCBSb3V0ZXJTcnRFbmNyeXB0aW9uLCBUcmFuc2l0RW5jcnlwdGlvbiB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IHJlbmRlclRhZ3MsIGV4Y2VlZHNSb3V0ZXJUaWVyQml0cmF0ZSwgcmVuZGVyUm91dGVyU3J0RW5jcnlwdGlvbiwgcmVuZGVyVHJhbnNpdEVuY3J5cHRpb24sIHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbiwgdmFsaWRhdGVNYWludGVuYW5jZVRpbWUgfSBmcm9tICcuL3NoYXJlZCc7XG5cbi8qKlxuICogUHJvdG9jb2wgb3B0aW9ucyBhdmFpbGFibGUgZm9yIFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMge1xuICAvKiogUmVhbC10aW1lIFRyYW5zcG9ydCBQcm90b2NvbCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJUUCA9IG5ldyBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucygnUlRQJyk7XG4gIC8qKiBSZWxpYWJsZSBJbnRlcm5ldCBTdHJlYW0gVHJhbnNwb3J0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklTVCA9IG5ldyBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucygnUklTVCcpO1xuICAvKiogU2VjdXJlIFJlbGlhYmxlIFRyYW5zcG9ydCAtIENhbGxlciBtb2RlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1JUX0NBTExFUiA9IG5ldyBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucygnU1JUX0NBTExFUicpO1xuICAvKiogU2VjdXJlIFJlbGlhYmxlIFRyYW5zcG9ydCAtIExpc3RlbmVyIG1vZGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTUlRfTElTVEVORVIgPSBuZXcgUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMoJ1NSVF9MSVNURU5FUicpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gcHJvdG9jb2wgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm90b2NvbCBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zIHtcbiAgICByZXR1cm4gbmV3IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0gdmFsdWUgVGhlIHByb3RvY29sIHN0cmluZyB2YWx1ZSAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nKSB7fVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBpbmdlc3QgZW5kcG9pbnQgd2hlcmUgdGhlIHJvdXRlciBpbnB1dCBsaXN0ZW5zIGZvciB1cHN0cmVhbSBjb250ZW50LlxuICpcbiAqIEZhaWxvdmVyIGFuZCBtZXJnZSBjb25maWd1cmF0aW9ucyBleHBvc2UgdHdvIGVuZHBvaW50czsgc3RhbmRhcmQgY29uZmlndXJhdGlvbnNcbiAqIGV4cG9zZSBvbmUuIFJldHVybmVkIGJ5IHtAbGluayBJUm91dGVySW5wdXQuZW5kcG9pbnRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJJbnB1dEVuZHBvaW50IHtcbiAgLyoqXG4gICAqIFRoZSBmdWxsIGluZ2VzdCBVUkwgY29tYmluaW5nIHByb3RvY29sIHNjaGVtZSwgSVAsIGFuZCBwb3J0LiBGb3IgZXhhbXBsZTpcbiAgICogYHNydDovLzIwMy4wLjExMy4xMDo1MDAwYCBvciBgcnRwOi8vMjAzLjAuMTEzLjEwOjUwMDFgLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0ZW5pbmcgcG9ydCBhdCB3aGljaCB0aGUgcm91dGVyIGlucHV0IGFjY2VwdHMgdXBzdHJlYW0gY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFJvdXRlciBJbnB1dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZXJJbnB1dCBleHRlbmRzIElSZXNvdXJjZSwgSVJvdXRlcklucHV0UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcm91dGVyIGlucHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJJbnB1dEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJvdXRlciBpbnB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVySW5wdXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgcm91dGVyIGlucHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSByb3V0ZXIgaW5wdXQgd2FzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSByb3V0ZXIgaW5wdXQgd2FzIGxhc3QgdXBkYXRlZC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5nZXN0IGVuZHBvaW50cyAoVVJMICsgcG9ydCkgd2hlcmUgdGhlIHJvdXRlciBpbnB1dCBsaXN0ZW5zLlxuICAgKlxuICAgKiBSZXR1cm5zIG9uZSBlbnRyeSBmb3Igc3RhbmRhcmQgcHJvdG9jb2wtYmFzZWQgdmFyaWFudHMgKFJUUCwgUklTVCwgU1JUIGxpc3RlbmVyKSxcbiAgICogYW5kIG9uZSBlbnRyeSBwZXIgc291cmNlIGZvciBmYWlsb3ZlciBhbmQgbWVyZ2UgY29uZmlndXJhdGlvbnMgYnVpbHQgZnJvbSB0aG9zZVxuICAgKiBwcm90b2NvbHMuIEZvciBleGFtcGxlIGEgZmFpbG92ZXIgUlRQIGlucHV0IHdpbGwgcmV0dXJuOlxuICAgKlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgIHsgdXJsOiAncnRwOi8vMjAzLjAuMTEzLjEwOjUwMDAnLCBwb3J0OiA1MDAwIH0sXG4gICAqICAgeyB1cmw6ICdydHA6Ly8yMDMuMC4xMTMuMTA6NTAwMScsIHBvcnQ6IDUwMDEgfSxcbiAgICogXVxuICAgKiBgYGBcbiAgICpcbiAgICogQWNjZXNzaW5nIHRoaXMgb24gU1JUIGNhbGxlciAod2hlcmUgdGhlIHJvdXRlciBpbnB1dCBkaWFscyBvdXQgdG8gYSByZW1vdGVcbiAgICogc291cmNlKSwgTWVkaWFDb25uZWN0IEZsb3csIE1lZGlhTGl2ZSBDaGFubmVsLCBvciBpbXBvcnRlZCBpbnB1dHMgdGhyb3dzIOKAlCB0aG9zZVxuICAgKiB2YXJpYW50cyBkbyBub3QgZXhwb3NlIGhvc3Q6cG9ydCBwYWlycyB0aGUgaW5wdXQgbGlzdGVucyBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50czogUm91dGVySW5wdXRFbmRwb2ludFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIHRoZSB0cmFuc2l0IGVuY3J5cHRpb24gcGFzc3BocmFzZS5cbiAgICpcbiAgICogT25seSBhdmFpbGFibGUgd2hlbiB0aGUgUm91dGVyIElucHV0IHdhcyBjcmVhdGVkIHdpdGggZXhwbGljaXRcbiAgICogYHRyYW5zaXRFbmNyeXB0aW9uYCBjb25maWd1cmF0aW9uLiBOb3QgYXZhaWxhYmxlIGZvclxuICAgKiBhdXRvbWF0aWMgZW5jcnlwdGlvbiBvciBpbXBvcnRlZCBpbnB1dHMuXG4gICAqL1xuICByZWFkb25seSB0cmFuc2l0RW5jcnlwdGlvblNlY3JldD86IElTZWNyZXQ7XG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2YgZ3JhbnQgbWV0aG9kcyBmb3IgdGhpcyByb3V0ZXIgaW5wdXQuXG4gICAqL1xuICByZWFkb25seSBncmFudHM6IFJvdXRlcklucHV0R3JhbnRzO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdGhpcyByb3V0ZXIgaW5wdXQuXG4gICAqXG4gICAqIFJvdXRlciBpbnB1dCBtZXRyaWNzIGFyZSBkaW1lbnNpb25lZCBieSBgUm91dGVySW5wdXRBUk5gLiBTZWUgdGhlIE1lZGlhQ29ubmVjdFxuICAgKiBkb2N1bWVudGF0aW9uIGZvciBhdmFpbGFibGUgbWV0cmljIG5hbWVzIChlLmcuIGBSb3V0ZXJJbnB1dEJpdFJhdGVgLFxuICAgKiBgUm91dGVySW5wdXROb3RSZWNvdmVyZWRQYWNrZXRzYCkuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGJpdHJhdGUgb2YgdGhlIHJvdXRlciBpbnB1dCdzIHBheWxvYWQuXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0JpdHJhdGUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHBhY2tldHMgbG9zdCBpbiB0cmFuc2l0IHRoYXQgd2VyZSBub3QgcmVjb3ZlcmVkIGJ5IGVycm9yIGNvcnJlY3Rpb24uXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljTm90UmVjb3ZlcmVkUGFja2V0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIGJ5IHRoZSByb3V0ZXIgaW5wdXQuXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljVG90YWxQYWNrZXRzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgcm91dGVyIGlucHV0IGNvbm5lY3Rpb24gc3RhdGUgKDEgY29ubmVjdGVkLCAwIGRpc2Nvbm5lY3RlZCkuIEFwcGxpZXMgdG8gU1JUIHNvdXJjZXMgb25seS5cbiAgICogQGRlZmF1bHQgLSBtaW5pbXVtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljQ29ubmVjdGVkKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciBjb250aW51aXR5IGNvdW50ZXIgZXJyb3JzIGluIHRoZSB0cmFuc3BvcnQgc3RyZWFtLlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0NvbnRpbnVpdHlDb3VudGVyRXJyb3JzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgcmVjb3ZlcnkgbGF0ZW5jeSBvZiB0aGUgaW5wdXQgc3RyZWFtLiBBcHBsaWVzIHRvIFJJU1QsIFNSVCwgYW5kIFJUUC1GRUMuXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0xhdGVuY3kocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJvdXRlciBpbnB1dCBoYXMgc3dpdGNoZWQgc291cmNlcyBpbiBGYWlsb3ZlciBtb2RlLlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0ZhaWxvdmVyU3dpdGNoZXMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xufVxuXG4vKipcbiAqIFJvdXRpbmcgc2NvcGUgZm9yIHRoZSBSb3V0ZXIgSW5wdXRcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRpbmdTY29wZSB7XG4gIC8qKiBSb3V0ZSB0cmFmZmljIHdpdGhpbiB0aGUgc2FtZSBBV1MgcmVnaW9uICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVHSU9OQUwgPSBuZXcgUm91dGluZ1Njb3BlKCdSRUdJT05BTCcpO1xuICAvKiogUm91dGUgdHJhZmZpYyBnbG9iYWxseSBhY3Jvc3MgQVdTIHJlZ2lvbnMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHTE9CQUwgPSBuZXcgUm91dGluZ1Njb3BlKCdHTE9CQUwnKTtcblxuICAvKipcbiAgICogVXNlIGEgY3VzdG9tIHJvdXRpbmcgc2NvcGUgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSByb3V0aW5nIHNjb3BlIHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogUm91dGluZ1Njb3BlIHtcbiAgICByZXR1cm4gbmV3IFJvdXRpbmdTY29wZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIHZhbHVlIFRoZSByb3V0aW5nIHNjb3BlIHN0cmluZyB2YWx1ZSAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nKSB7fVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaWVyIGZvciBhIHJvdXRlciBpbnB1dC4gVGhlIHRpZXIgZGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkgbGltaXRzLCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsXG4gKiBhbmQgYXNzb2NpYXRlZCBjb3N0cy4gVGhlIGBtYXhpbXVtQml0cmF0ZWAgbXVzdCBmYWxsIHdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSBzZWxlY3RlZCB0aWVyLlxuICovXG5leHBvcnQgY2xhc3MgUm91dGVySW5wdXRUaWVyIHtcbiAgLyoqIFN1cHBvcnRzIGEgbWF4aW11bSBiaXRyYXRlIHVwIHRvIDEwMCBtZWdhYml0cyBwZXIgc2Vjb25kLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOUFVUXzEwMCA9IG5ldyBSb3V0ZXJJbnB1dFRpZXIoJ0lOUFVUXzEwMCcpO1xuICAvKiogU3VwcG9ydHMgYSBtYXhpbXVtIGJpdHJhdGUgdXAgdG8gNTAgbWVnYWJpdHMgcGVyIHNlY29uZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlBVVF81MCA9IG5ldyBSb3V0ZXJJbnB1dFRpZXIoJ0lOUFVUXzUwJyk7XG4gIC8qKiBTdXBwb3J0cyBhIG1heGltdW0gYml0cmF0ZSB1cCB0byAyMCBtZWdhYml0cyBwZXIgc2Vjb25kLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOUFVUXzIwID0gbmV3IFJvdXRlcklucHV0VGllcignSU5QVVRfMjAnKTtcblxuICAvKipcbiAgICogVXNlIGEgY3VzdG9tIHRpZXIgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB0aWVyIHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogUm91dGVySW5wdXRUaWVyIHtcbiAgICByZXR1cm4gbmV3IFJvdXRlcklucHV0VGllcih2YWx1ZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIHZhbHVlIFRoZSB0aWVyIHN0cmluZyB2YWx1ZSAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nKSB7fVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzY2hlZHVsZWQgbWFpbnRlbmFuY2Ugd2luZG93c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1haW50ZW5hbmNlQ29uZmlndXJhdGlvbiB7XG4gIC8qKiBEYXkgb2YgdGhlIHdlZWsgZm9yIG1haW50ZW5hbmNlIChlLmcuLCAnTW9uZGF5JywgJ1R1ZXNkYXknKSAqL1xuICByZWFkb25seSBkYXk6IE1haW50ZW5hbmNlRGF5O1xuICAvKiogVGltZSBvZiBkYXkgZm9yIG1haW50ZW5hbmNlIGluIEhIOk1NIGZvcm1hdCAoZS5nLiwgJzAyOjAwJykgKi9cbiAgcmVhZG9ubHkgdGltZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgUm91dGVyIElucHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVySW5wdXRQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBSb3V0ZXIgSW5wdXRcbiAgICogQGRlZmF1bHQgLSBHZW5lcmF0ZWQgYXV0b21hdGljYWxseVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVySW5wdXROYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG1heGltdW0gYml0cmF0ZSBmb3IgdGhlIHJvdXRlciBpbnB1dC4gTXVzdCBmYWxsIHdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSBzZWxlY3RlZCBgdGllcmAuICovXG4gIHJlYWRvbmx5IG1heGltdW1CaXRyYXRlOiBCaXRyYXRlO1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdXRlciBpbnB1dCBpcyBjb25maWd1cmVkIGZvciBSZWdpb25hbCBvciBnbG9iYWwgcm91dGluZy4gKi9cbiAgcmVhZG9ubHkgcm91dGluZ1Njb3BlOiBSb3V0aW5nU2NvcGU7XG4gIC8qKlxuICAgKiBUaWVyIGZvciB0aGlzIGlucHV0LiBUaGUgdGllciBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBsaW1pdHMsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyxcbiAgICogYW5kIGFzc29jaWF0ZWQgY29zdHM7IGBtYXhpbXVtQml0cmF0ZWAgbXVzdCBmYWxsIHdpdGhpbiBpdHMgbGltaXRzLlxuICAgKiBAZGVmYXVsdCBSb3V0ZXJJbnB1dFRpZXIuSU5QVVRfMjBcbiAgICovXG4gIHJlYWRvbmx5IHRpZXI/OiBSb3V0ZXJJbnB1dFRpZXI7XG4gIC8qKiBDb25maWd1cmF0aW9uIGZvciB0aGUgUm91dGVyIElucHV0IChzdGFuZGFyZCwgZmFpbG92ZXIsIG1lcmdlLCBvciBNZWRpYUNvbm5lY3QgZmxvdykgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogUm91dGVySW5wdXRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogTWFpbnRlbmFuY2Ugd2luZG93IGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1haW50ZW5hbmNlIHdpbmRvdyB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IG1haW50ZW5hbmNlQ29uZmlndXJhdGlvbj86IE1haW50ZW5hbmNlQ29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBBV1MgUmVnaW9uIHdoZXJlIHRoZSByb3V0ZXIgaW5wdXQgaXMgbG9jYXRlZC5cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0cyB0byB0aGUgc2FtZSByZWdpb24gYXMgc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUYWdzIHRvIGFkZCB0byB0aGUgUm91dGVyIElucHV0XG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBUcmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiB1c2luZyBBV1MgU2VjcmV0cyBNYW5hZ2VyLlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkIHdpdGhvdXQgYSByb2xlLCBhIHNjb3BlZCBJQU0gcm9sZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2l0aCByZWFkXG4gICAqIGFjY2VzcyB0byB0aGUgc2VjcmV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgUm91dGVyIElucHV0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlcklucHV0QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJvdXRlciBpbnB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlcklucHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcm91dGVyIGlucHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFjY2Vzc2luZyBgcm91dGVySW5wdXRJZGAgb24gdGhlIGltcG9ydGVkIGlucHV0IHRocm93czsgb25seSBwcm92aWRlIHdoZW4gYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVySW5wdXRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQIGFkZHJlc3MgdGhhdCB0aGUgcm91dGVyIGlucHV0IHVzZXMgdG8gaW5nZXN0IGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWNjZXNzaW5nIGBpcEFkZHJlc3NgIG9uIHRoZSBpbXBvcnRlZCBpbnB1dCB0aHJvd3M7IG9ubHkgcHJvdmlkZSB3aGVuIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGlwQWRkcmVzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24gKEZFQykgb3B0aW9ucyBmb3IgUlRQIHByb3RvY29sXG4gKi9cbmV4cG9ydCBlbnVtIEZvcndhcmRFcnJvckNvcnJlY3Rpb24ge1xuICAvKiogRW5hYmxlIEZvcndhcmQgRXJyb3IgQ29ycmVjdGlvbiAqL1xuICBFTkFCTEVEPSdFTkFCTEVEJyxcbiAgLyoqIERpc2FibGUgRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uICovXG4gIERJU0FCTEVEPSdESVNBQkxFRCcsXG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB3aGljaCBwcm90b2NvbCBpbiBhIGZhaWxvdmVyIGNvbmZpZ3VyYXRpb24ncyBwcm90b2NvbHMgYXJyYXkgaXMgcHJpbWFyeS5cbiAqL1xuZXhwb3J0IGVudW0gUHJpbWFyeVNvdXJjZSB7XG4gIC8qKiBUaGUgZmlyc3QgcHJvdG9jb2wgaW4gdGhlIGZhaWxvdmVyIHByb3RvY29scyBhcnJheS4gKi9cbiAgRklSU1RfU09VUkNFID0gMCxcbiAgLyoqIFRoZSBzZWNvbmQgcHJvdG9jb2wgaW4gdGhlIGZhaWxvdmVyIHByb3RvY29scyBhcnJheS4gKi9cbiAgU0VDT05EX1NPVVJDRSA9IDEsXG59XG5cbi8qKlxuICogSW50ZXJuYWwgQ0ZOLWxldmVsIHZhbHVlcyBmb3IgdGhlIHNvdXJjZSBwcmlvcml0eSBtb2RlLlxuICogQGludGVybmFsXG4gKi9cbmVudW0gU291cmNlUHJpb3JpdHlNb2RlIHtcbiAgLyoqIEJvdGggc291cmNlcyBhcmUgZXF1YWwgcHJpb3JpdHkg4oCUIHRoZSBzZXJ2aWNlIHBpY2tzIG9uZS4gKi9cbiAgTk9fUFJJT1JJVFkgPSAnTk9fUFJJT1JJVFknLFxuICAvKiogT25lIHNvdXJjZSBpcyBwcmltYXJ5LCB0aGUgb3RoZXIgaXMgYmFja3VwLiAqL1xuICBQUklNQVJZX1NFQ09OREFSWSA9ICdQUklNQVJZX1NFQ09OREFSWScsXG59XG5cbi8qKlxuICogU291cmNlIHByaW9yaXR5IGNvbmZpZ3VyYXRpb24gZm9yIGZhaWxvdmVyIFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNvdXJjZVByaW9yaXR5Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRyZWF0IGJvdGggc291cmNlcyB3aXRoIGVxdWFsIHByaW9yaXR5IOKAlCBNZWRpYUNvbm5lY3QgcGlja3Mgb25lIHdoZW4gbmVlZGVkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBub25lKCk6IFNvdXJjZVByaW9yaXR5Q29uZmlnIHtcbiAgICByZXR1cm4gbmV3IFNvdXJjZVByaW9yaXR5Q29uZmlnKFNvdXJjZVByaW9yaXR5TW9kZS5OT19QUklPUklUWSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGUgb25lIG9mIHRoZSB0d28gc291cmNlcyBhcyBwcmltYXJ5OyB0aGUgb3RoZXIgaXMgdHJlYXRlZCBhcyBiYWNrdXAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHByaW1hcnlTZWNvbmRhcnkocHJpbWFyeTogUHJpbWFyeVNvdXJjZSk6IFNvdXJjZVByaW9yaXR5Q29uZmlnIHtcbiAgICByZXR1cm4gbmV3IFNvdXJjZVByaW9yaXR5Q29uZmlnKFNvdXJjZVByaW9yaXR5TW9kZS5QUklNQVJZX1NFQ09OREFSWSwgcHJpbWFyeSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGU6IFNvdXJjZVByaW9yaXR5TW9kZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmltYXJ5OiBQcmltYXJ5U291cmNlIHwgdW5kZWZpbmVkLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGNvbmZpZ3VyYXRpb24gdG8gaXRzIENGTiBzaGFwZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2JpbmQoKTogeyBzb3VyY2VQcmlvcml0eU1vZGU6IHN0cmluZzsgcHJpbWFyeVNvdXJjZUluZGV4PzogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2VQcmlvcml0eU1vZGU6IHRoaXMuX21vZGUsXG4gICAgICBwcmltYXJ5U291cmNlSW5kZXg6IHRoaXMuX3ByaW1hcnksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJUUCBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnRwUHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgUlRQIHRyYWZmaWMgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAvKipcbiAgICogRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uIHNldHRpbmdcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQ7IHdoZW4gb21pdHRlZCwgTWVkaWFDb25uZWN0IGFwcGxpZXMgRm9yd2FyZEVycm9yQ29ycmVjdGlvbi5ESVNBQkxFRCBhdCBkZXBsb3kgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yd2FyZEVycm9yQ29ycmVjdGlvbj86IEZvcndhcmRFcnJvckNvcnJlY3Rpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUklTVCBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmlzdFByb3RvY29sUHJvcHMge1xuICAvKiogUG9ydCBudW1iZXIgZm9yIFJJU1QgdHJhZmZpYyAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKiBSZWNvdmVyeSBsYXRlbmN5IGZvciBSSVNUICovXG4gIHJlYWRvbmx5IHJlY292ZXJ5TGF0ZW5jeTogRHVyYXRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU1JUIExpc3RlbmVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcnRMaXN0ZW5lclByb3RvY29sUHJvcHMge1xuICAvKiogUG9ydCBudW1iZXIgZm9yIFNSVCBsaXN0ZW5lciAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIGxhdGVuY3kgZm9yIFNSVCAqL1xuICByZWFkb25seSBtaW5pbXVtTGF0ZW5jeTogRHVyYXRpb247XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZWNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGVuY3J5cHRlZCBTUlQgc3RyZWFtc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlY3J5cHRpb25Db25maWd1cmF0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTUlQgQ2FsbGVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcnRDYWxsZXJQcm90b2NvbFByb3BzIHtcbiAgLyoqIFNvdXJjZSBJUCBhZGRyZXNzIHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgc291cmNlQWRkcmVzczogc3RyaW5nO1xuICAvKiogU291cmNlIHBvcnQgdG8gY29ubmVjdCB0byAqL1xuICByZWFkb25seSBzb3VyY2VQb3J0OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIGxhdGVuY3kgZm9yIFNSVCAqL1xuICByZWFkb25seSBtaW5pbXVtTGF0ZW5jeTogRHVyYXRpb247XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzdHJlYW0gSUQgZm9yIFNSVCBjb25uZWN0aW9uXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RyZWFtIElEXG4gICAqL1xuICByZWFkb25seSBzdHJlYW1JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgZW5jcnlwdGVkIFNSVCBzdHJlYW1zXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVjcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVjcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBSb3V0ZXJTcnRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgd2hpY2ggY29uZmlndXJhdGlvbiB0eXBlIGEgcG9ydCBjb25mbGljdCBjaGVjayBpcyBiZWluZyBwZXJmb3JtZWQgZm9yLlxuICogQGludGVybmFsXG4gKi9cbmVudW0gUHJvdG9jb2xDb25maWdUeXBlIHtcbiAgLyoqIEZhaWxvdmVyLW1vZGUgcm91dGVyIGlucHV0IGNvbmZpZ3VyYXRpb24uICovXG4gIEZBSUxPVkVSID0gJ2ZhaWxvdmVyJyxcbiAgLyoqIE1lcmdlLW1vZGUgcm91dGVyIGlucHV0IGNvbmZpZ3VyYXRpb24uICovXG4gIE1FUkdFID0gJ21lcmdlJyxcbn1cblxuLyoqXG4gKiBGYWN0b3J5IGNsYXNzIGZvciBjcmVhdGluZyBSb3V0ZXIgSW5wdXQgcHJvdG9jb2wgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlcklucHV0UHJvdG9jb2wge1xuICAvKipcbiAgICogQ3JlYXRlIGFuIFJUUCBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBwcm9wcyBSVFAgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFJUUFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBydHAocHJvcHM6IFJ0cFByb3RvY29sUHJvcHMpOiBSb3V0ZXJJbnB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJJbnB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlcklucHV0UHJvdG9jb2woUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMuUlRQLCB7XG4gICAgICBydHA6IHtcbiAgICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgICAgZm9yd2FyZEVycm9yQ29ycmVjdGlvbjogcHJvcHMuZm9yd2FyZEVycm9yQ29ycmVjdGlvbixcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMucG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgUklTVCBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBwcm9wcyBSSVNUIHByb3RvY29sIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVySW5wdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBSSVNUXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJpc3QocHJvcHM6IFJpc3RQcm90b2NvbFByb3BzKTogUm91dGVySW5wdXRQcm90b2NvbCB7XG4gICAgUm91dGVySW5wdXRQcm90b2NvbC52YWxpZGF0ZVBvcnQocHJvcHMucG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJJbnB1dFByb3RvY29sKFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zLlJJU1QsIHtcbiAgICAgIHJpc3Q6IHtcbiAgICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgICAgcmVjb3ZlcnlMYXRlbmN5TWlsbGlzZWNvbmRzOiBwcm9wcy5yZWNvdmVyeUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMucG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFNSVCBMaXN0ZW5lclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcnRMaXN0ZW5lcihwcm9wczogU3J0TGlzdGVuZXJQcm90b2NvbFByb3BzKTogUm91dGVySW5wdXRQcm90b2NvbCB7XG4gICAgUm91dGVySW5wdXRQcm90b2NvbC52YWxpZGF0ZVBvcnQocHJvcHMucG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJJbnB1dFByb3RvY29sKFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zLlNSVF9MSVNURU5FUiwge1xuICAgICAgc3J0TGlzdGVuZXI6IHtcbiAgICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgICAgbWluaW11bUxhdGVuY3lNaWxsaXNlY29uZHM6IHByb3BzLm1pbmltdW1MYXRlbmN5LnRvTWlsbGlzZWNvbmRzKCksXG4gICAgICB9LFxuICAgIH0sIHByb3BzLnBvcnQsIHByb3BzLmRlY3J5cHRpb25Db25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gU1JUIENhbGxlciBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgQ2FsbGVyIHByb3RvY29sIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVySW5wdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBTUlQgQ2FsbGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNydENhbGxlcihwcm9wczogU3J0Q2FsbGVyUHJvdG9jb2xQcm9wcyk6IFJvdXRlcklucHV0UHJvdG9jb2wge1xuICAgIFJvdXRlcklucHV0UHJvdG9jb2wudmFsaWRhdGVTcnRDYWxsZXJQb3J0KHByb3BzLnNvdXJjZVBvcnQpO1xuICAgIHJldHVybiBuZXcgUm91dGVySW5wdXRQcm90b2NvbChSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucy5TUlRfQ0FMTEVSLCB7XG4gICAgICBzcnRDYWxsZXI6IHtcbiAgICAgICAgc291cmNlQWRkcmVzczogcHJvcHMuc291cmNlQWRkcmVzcyxcbiAgICAgICAgc291cmNlUG9ydDogcHJvcHMuc291cmNlUG9ydCxcbiAgICAgICAgbWluaW11bUxhdGVuY3lNaWxsaXNlY29uZHM6IHByb3BzLm1pbmltdW1MYXRlbmN5LnRvTWlsbGlzZWNvbmRzKCksXG4gICAgICAgIHN0cmVhbUlkOiBwcm9wcy5zdHJlYW1JZCxcbiAgICAgIH0sXG4gICAgfSwgdW5kZWZpbmVkLCBwcm9wcy5kZWNyeXB0aW9uQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBwb3J0IGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UgKDMwMDAtMzAwMDApXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVBvcnQocG9ydDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocG9ydCkgJiYgKHBvcnQgPCAzMDAwIHx8IHBvcnQgPiAzMDAwMCkpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVySW5wdXRQb3J0UmFuZ2VgLCBgUG9ydCBtdXN0IGJlIGJldHdlZW4gMzAwMCBhbmQgMzAwMDAsIGdvdCAke3BvcnR9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgU1JUIENhbGxlciBwb3J0IGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UgKDAtNjU1MzUpXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVNydENhbGxlclBvcnQocG9ydDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocG9ydCkgJiYgKHBvcnQgPCAwIHx8IHBvcnQgPiA2NTUzNSkpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgU3J0Q2FsbGVyUG9ydFJhbmdlYCwgYFNSVCBDYWxsZXIgcG9ydCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNjU1MzUsIGdvdCAke3BvcnR9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvdG9jb2xOYW1lOiBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBDZm5Sb3V0ZXJJbnB1dC5Sb3V0ZXJJbnB1dFByb3RvY29sQ29uZmlndXJhdGlvblByb3BlcnR5O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wb3J0PzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWNyeXB0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHByb3RvY29sTmFtZTogUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMsXG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJJbnB1dC5Sb3V0ZXJJbnB1dFByb3RvY29sQ29uZmlndXJhdGlvblByb3BlcnR5LFxuICAgIHBvcnQ/OiBudW1iZXIsXG4gICAgZGVjcnlwdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb24sXG4gICkge1xuICAgIHRoaXMuX3Byb3RvY29sTmFtZSA9IHByb3RvY29sTmFtZTtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5fcG9ydCA9IHBvcnQ7XG4gICAgdGhpcy5fZGVjcnlwdGlvbiA9IGRlY3J5cHRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGlzIHByb3RvY29sIHRvIGl0cyBDRk4tcmVhZHkgZm9ybS4gUmV0dXJucyB0aGUgcHJvdG9jb2wgaWRlbnRpZmllcixcbiAgICogdGhlIENGTiBjb25maWd1cmF0aW9uIHNoYXBlICh3aXRoIFNSVCBkZWNyeXB0aW9uIGF1dG8tcm9sZSBtYXRlcmlhbGl6ZWQgaWYgbmVlZGVkKSxcbiAgICogYW5kIHRoZSBpbmdlc3QgcG9ydCBpZiB0aGUgcHJvdG9jb2wgaGFzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlICAgICAgICAgQ29uc3RydWN0IHRoYXQgc2NvcGVzIHRoZSBhdXRvLWNyZWF0ZWQgZGVjcnlwdGlvbiByb2xlXG4gICAqIEBwYXJhbSByb3V0ZXJJbnB1dEFybiAgT3B0aW9uYWwgQVJOIG9mIHRoZSBjb25zdW1pbmcgcm91dGVyIGlucHV0IOKAlCB3aGVuIHByb3ZpZGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlcyB0aGUgYXV0by1jcmVhdGVkIGRlY3J5cHRpb24gcm9sZSdzIHRydXN0IHBvbGljeS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVySW5wdXRBcm4/OiBzdHJpbmcpOiB7XG4gICAgbmFtZTogUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnM7XG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJJbnB1dC5Sb3V0ZXJJbnB1dFByb3RvY29sQ29uZmlndXJhdGlvblByb3BlcnR5O1xuICAgIHBvcnQ/OiBudW1iZXI7XG4gIH0ge1xuICAgIGlmICghdGhpcy5fZGVjcnlwdGlvbikge1xuICAgICAgcmV0dXJuIHsgbmFtZTogdGhpcy5fcHJvdG9jb2xOYW1lLCBjb25maWc6IHRoaXMuX2NvbmZpZywgcG9ydDogdGhpcy5fcG9ydCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRlY3J5cHRpb25Db25maWd1cmF0aW9uID0gcmVuZGVyUm91dGVyU3J0RW5jcnlwdGlvbihzY29wZSwgJ0RlY3J5cHRpb25Sb2xlJywgdGhpcy5fZGVjcnlwdGlvbiwgcm91dGVySW5wdXRBcm4pO1xuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5zcnRMaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5fcHJvdG9jb2xOYW1lLFxuICAgICAgICBwb3J0OiB0aGlzLl9wb3J0LFxuICAgICAgICBjb25maWc6IHsgc3J0TGlzdGVuZXI6IHsgLi4udGhpcy5fY29uZmlnLnNydExpc3RlbmVyLCBkZWNyeXB0aW9uQ29uZmlndXJhdGlvbiB9IH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydENhbGxlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5fcHJvdG9jb2xOYW1lLFxuICAgICAgICBwb3J0OiB0aGlzLl9wb3J0LFxuICAgICAgICBjb25maWc6IHsgc3J0Q2FsbGVyOiB7IC4uLnRoaXMuX2NvbmZpZy5zcnRDYWxsZXIsIGRlY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IG5hbWU6IHRoaXMuX3Byb3RvY29sTmFtZSwgY29uZmlnOiB0aGlzLl9jb25maWcsIHBvcnQ6IHRoaXMuX3BvcnQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBpbmdlc3QgVVJMIChzY2hlbWU6Ly9pcEFkZHJlc3M6cG9ydCkgZm9yIHRoaXMgcHJvdG9jb2wsIGlmIGl0IGhhc1xuICAgKiBhIGxpc3RlbmluZyBwb3J0LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfaW5nZXN0VXJsKGlwQWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fcG9ydCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZW5kZXJJbmdlc3RVcmwodGhpcy5fcHJvdG9jb2xOYW1lLnZhbHVlLCB0aGlzLl9wb3J0LCBpcEFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0ZW5pbmcgcG9ydCBmb3IgdGhpcyBwcm90b2NvbCwgaWYgaXQgaGFzIG9uZS4gVW5kZWZpbmVkIGZvciBTUlQgY2FsbGVyXG4gICAqICh3aGljaCBoYXMgYSBgc291cmNlUG9ydGAgcG9pbnRpbmcgYXQgdGhlIHVwc3RyZWFtIGxpc3RlbmVyLCBub3QgYSBwb3J0IHRoZSBpbnB1dFxuICAgKiBpdHNlbGYgbGlzdGVucyBvbikuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9saXN0ZW5pbmdQb3J0KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BvcnQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0d28gcHJvdG9jb2xzIHNoYXJlIHRoZSBzYW1lIHByb3RvY29sIGlkZW50aWZpZXIuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9tYXRjaGVzS2luZChvdGhlcjogUm91dGVySW5wdXRQcm90b2NvbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wcm90b2NvbE5hbWUudmFsdWUgPT09IG90aGVyLl9wcm90b2NvbE5hbWUudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHByb3RvY29sIGlzIFNSVCAoQ2FsbGVyIG9yIExpc3RlbmVyKS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2lzU3J0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wcm90b2NvbE5hbWUudmFsdWUgPT09IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zLlNSVF9DQUxMRVIudmFsdWVcbiAgICAgIHx8IHRoaXMuX3Byb3RvY29sTmFtZS52YWx1ZSA9PT0gUm91dGVySW5wdXRQcm90b2NvbE9wdGlvbnMuU1JUX0xJU1RFTkVSLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHBvcnQgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoaXMgcHJvdG9jb2wgYW5kIGFub3RoZXIgaW4gYSBmYWlsb3ZlciBvclxuICAgKiBtZXJnZSBjb25maWd1cmF0aW9uLiBUaHJvd3Mgb24gY29uZmxpY3RzIGFwcHJvcHJpYXRlIHRvIHRoZSBwcm90b2NvbCBraW5kLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdmFsaWRhdGVQb3J0Q29uZmxpY3RzKG90aGVyOiBSb3V0ZXJJbnB1dFByb3RvY29sLCBjb25maWdUeXBlOiBQcm90b2NvbENvbmZpZ1R5cGUpOiB2b2lkIHtcbiAgICBjb25zdCBwcm90b2NvbFZhbHVlID0gdGhpcy5fcHJvdG9jb2xOYW1lLnZhbHVlO1xuXG4gICAgaWYgKHByb3RvY29sVmFsdWUgPT09IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zLlJJU1QudmFsdWUpIHtcbiAgICAgIGNvbnN0IHJpc3QxID0gdGhpcy5fY29uZmlnLnJpc3Q7XG4gICAgICBjb25zdCByaXN0MiA9IG90aGVyLl9jb25maWcucmlzdDtcbiAgICAgIGlmIChyaXN0MSAmJiByaXN0MiAmJiAncG9ydCcgaW4gcmlzdDEgJiYgJ3BvcnQnIGluIHJpc3QyKSB7XG4gICAgICAgIGNvbnN0IHBvcnQxID0gcmlzdDEucG9ydDtcbiAgICAgICAgY29uc3QgcG9ydDIgPSByaXN0Mi5wb3J0O1xuICAgICAgICBpZiAocG9ydDEgPT09IHBvcnQyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgbGl0YER1cGxpY2F0ZVJpc3RQb3J0YCxcbiAgICAgICAgICAgIGAke2NvbmZpZ1R5cGV9IGNvbmZpZ3VyYXRpb24gY2Fubm90IHVzZSB0aGUgc2FtZSBSSVNUIHBvcnQgJHtwb3J0MX0gZm9yIGJvdGggcHJvdG9jb2xzLCBgICtcbiAgICAgICAgICAgICdlYWNoIHByb3RvY29sIG11c3QgdXNlIGEgZGlmZmVyZW50IHBvcnQgbnVtYmVyJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhwb3J0MSAtIHBvcnQyKSA8IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICBsaXRgQ29uc2VjdXRpdmVSaXN0UG9ydGAsXG4gICAgICAgICAgICBgJHtjb25maWdUeXBlfSBjb25maWd1cmF0aW9uIGNhbm5vdCB1c2UgY29uc2VjdXRpdmUgUklTVCBwb3J0cyAke01hdGgubWluKHBvcnQxLCBwb3J0Mil9IGFuZCAke01hdGgubWF4KHBvcnQxLCBwb3J0Mil9LCBgICtcbiAgICAgICAgICAgICdSSVNUIHByb3RvY29scyByZXF1aXJlIG5vbi1jb25zZWN1dGl2ZSBwb3J0cyB0byBhdm9pZCBvdmVybGFwcGluZyByYW5nZXMgKGUuZy4sIHVzZSA2MDAwIGFuZCA2MDAyKScsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm90b2NvbFZhbHVlID09PSBSb3V0ZXJJbnB1dFByb3RvY29sT3B0aW9ucy5SVFAudmFsdWUpIHtcbiAgICAgIGNvbnN0IHJ0cDEgPSB0aGlzLl9jb25maWcucnRwO1xuICAgICAgY29uc3QgcnRwMiA9IG90aGVyLl9jb25maWcucnRwO1xuICAgICAgaWYgKHJ0cDEgJiYgcnRwMiAmJiAncG9ydCcgaW4gcnRwMSAmJiAncG9ydCcgaW4gcnRwMiAmJiBydHAxLnBvcnQgPT09IHJ0cDIucG9ydCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YER1cGxpY2F0ZVJ0cFBvcnRgLFxuICAgICAgICAgIGAke2NvbmZpZ1R5cGV9IGNvbmZpZ3VyYXRpb24gY2Fubm90IHVzZSB0aGUgc2FtZSBSVFAgcG9ydCAke3J0cDEucG9ydH0gZm9yIGJvdGggcHJvdG9jb2xzLCBgICtcbiAgICAgICAgICAnZWFjaCBwcm90b2NvbCBtdXN0IHVzZSBhIGRpZmZlcmVudCBwb3J0IG51bWJlcicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3RvY29sVmFsdWUgPT09IFJvdXRlcklucHV0UHJvdG9jb2xPcHRpb25zLlNSVF9MSVNURU5FUi52YWx1ZSkge1xuICAgICAgY29uc3Qgc3J0MSA9IHRoaXMuX2NvbmZpZy5zcnRMaXN0ZW5lcjtcbiAgICAgIGNvbnN0IHNydDIgPSBvdGhlci5fY29uZmlnLnNydExpc3RlbmVyO1xuICAgICAgaWYgKHNydDEgJiYgc3J0MiAmJiAncG9ydCcgaW4gc3J0MSAmJiAncG9ydCcgaW4gc3J0MiAmJiBzcnQxLnBvcnQgPT09IHNydDIucG9ydCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YER1cGxpY2F0ZVNydExpc3RlbmVyUG9ydGAsXG4gICAgICAgICAgYCR7Y29uZmlnVHlwZX0gY29uZmlndXJhdGlvbiBjYW5ub3QgdXNlIHRoZSBzYW1lIFNSVCBMaXN0ZW5lciBwb3J0ICR7c3J0MS5wb3J0fSBmb3IgYm90aCBwcm90b2NvbHMsIGAgK1xuICAgICAgICAgICdlYWNoIHByb3RvY29sIG11c3QgdXNlIGEgZGlmZmVyZW50IHBvcnQgbnVtYmVyJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBzdGFuZGFyZCBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkQ29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqIE5ldHdvcmsgaW50ZXJmYWNlIGZvciB0aGUgUm91dGVyIElucHV0ICovXG4gIHJlYWRvbmx5IG5ldHdvcmtJbnRlcmZhY2U6IElSb3V0ZXJOZXR3b3JrSW50ZXJmYWNlO1xuICAvKiogUHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGlucHV0ICovXG4gIHJlYWRvbmx5IHByb3RvY29sOiBSb3V0ZXJJbnB1dFByb3RvY29sO1xuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lIHdoZXJlIHRoZSByb3V0ZXIgaW5wdXQgaXMgbG9jYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhc3NpZ25lZCBieSB0aGUgTWVkaWFDb25uZWN0IHNlcnZpY2VcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZmFpbG92ZXIgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsb3ZlckNvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKiBOZXR3b3JrIGludGVyZmFjZSBmb3IgdGhlIFJvdXRlciBJbnB1dCAqL1xuICByZWFkb25seSBuZXR3b3JrSW50ZXJmYWNlOiBJUm91dGVyTmV0d29ya0ludGVyZmFjZTtcbiAgLyoqIEFycmF5IG9mIGV4YWN0bHkgMiBwcm90b2NvbCBjb25maWd1cmF0aW9ucyBmb3IgZmFpbG92ZXIgKG11c3QgYmUgc2FtZSBwcm90b2NvbCB0eXBlKSAqL1xuICByZWFkb25seSBwcm90b2NvbHM6IFJvdXRlcklucHV0UHJvdG9jb2xbXTtcbiAgLyoqXG4gICAqIFNvdXJjZSBwcmlvcml0eSBjb25maWd1cmF0aW9uIGZvciBmYWlsb3Zlci5cbiAgICpcbiAgICogQGRlZmF1bHQgU291cmNlUHJpb3JpdHlDb25maWcubm9uZSgpXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQcmlvcml0eT86IFNvdXJjZVByaW9yaXR5Q29uZmlnO1xuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lIHdoZXJlIHRoZSByb3V0ZXIgaW5wdXQgaXMgbG9jYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhc3NpZ25lZCBieSB0aGUgTWVkaWFDb25uZWN0IHNlcnZpY2VcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgbWVyZ2UgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXJnZUNvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKiBOZXR3b3JrIGludGVyZmFjZSBmb3IgdGhlIFJvdXRlciBJbnB1dCAqL1xuICByZWFkb25seSBuZXR3b3JrSW50ZXJmYWNlOiBJUm91dGVyTmV0d29ya0ludGVyZmFjZTtcbiAgLyoqIEFycmF5IG9mIGV4YWN0bHkgMiBwcm90b2NvbCBjb25maWd1cmF0aW9ucyBmb3IgbWVyZ2UgKG11c3QgYmUgc2FtZSBub24tU1JUIHByb3RvY29sIHR5cGUpICovXG4gIHJlYWRvbmx5IHByb3RvY29sczogUm91dGVySW5wdXRQcm90b2NvbFtdO1xuICAvKiogUmVjb3Zlcnkgd2luZG93IGZvciBtZXJnZSBvcGVyYXRpb24gKi9cbiAgcmVhZG9ubHkgbWVyZ2VSZWNvdmVyeVdpbmRvdzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgYXZhaWxhYmlsaXR5IHpvbmUgd2hlcmUgdGhlIHJvdXRlciBpbnB1dCBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFzc2lnbmVkIGJ5IHRoZSBNZWRpYUNvbm5lY3Qgc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhQ29ubmVjdEZsb3dDb25maWd1cmF0aW9uUHJvcHMge1xuICAvKiogVGhlIE1lZGlhQ29ubmVjdCBmbG93IHRvIHVzZSBhcyBpbnB1dCAqL1xuICByZWFkb25seSBmbG93OiBJRmxvdztcbiAgLyoqIFRoZSBmbG93IG91dHB1dCB0aGF0IGZlZWRzIHRoaXMgcm91dGVyIGlucHV0ICovXG4gIHJlYWRvbmx5IGZsb3dPdXRwdXQ6IElGbG93T3V0cHV0O1xuICAvKipcbiAgICogT3B0aW9uYWwgdHJhbnNpdCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWMgZW5jcnlwdGlvbiB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb24gLSB3aXRob3V0IGEgY29ubmVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhQ29ubmVjdEZsb3dDb25maWd1cmF0aW9uV2l0aG91dENvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBBdmFpbGFiaWxpdHkgWm9uZSB0aGUgcm91dGVyIGlucHV0IHdpbGwgYmUgcGxhY2VkIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgdHJhbnNpdCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWMgZW5jcnlwdGlvbiB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFMaXZlIENoYW5uZWwgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVXNlIHRoaXMgd2hlbiB0aGUgTWVkaWFMaXZlIGNoYW5uZWwgYWxyZWFkeSBleGlzdHMgYW5kIHlvdSB3YW50IHRvIGluZ2VzdFxuICogZnJvbSBvbmUgb2YgaXRzIG91dHB1dHMgaW1tZWRpYXRlbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFMaXZlQ2hhbm5lbENvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgTWVkaWFMaXZlIGNoYW5uZWwgdG8gdXNlIGFzIGlucHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbDogSUNoYW5uZWxSZWY7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbmRpdmlkdWFsIG91dHB1dCAod2l0aGluIHRoZSBjaGFubmVsJ3MgTWVkaWFDb25uZWN0IFJvdXRlciBvdXRwdXRcbiAgICogZ3JvdXApIHRvIGNvbm5lY3QgdG8gdGhpcyByb3V0ZXIgaW5wdXQg4oCUIG5vdCB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IGdyb3VwIGl0c2VsZi5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE1lZGlhTGl2ZSBwaXBlbGluZSB0byBjb25uZWN0IHRvIHRoaXMgcm91dGVyIGlucHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmU6IE1lZGlhTGl2ZVBpcGVsaW5lO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi4gTXVzdCBtYXRjaCB0aGUgZW5jcnlwdGlvbiB0eXBlIGNvbmZpZ3VyZWQgb24gdGhlXG4gICAqIE1lZGlhTGl2ZSBjaGFubmVsJ3MgTWVkaWFDb25uZWN0IFJvdXRlciBvdXRwdXQgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0b21hdGljIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFMaXZlIENoYW5uZWwgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBhIHNwZWNpZmljIGNoYW5uZWwgY29ubmVjdGlvbi5cbiAqXG4gKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcm91dGVyIGlucHV0IGJlZm9yZSB0aGUgdGFyZ2V0IE1lZGlhTGl2ZSBjaGFubmVsIGV4aXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZWRpYUxpdmVDaGFubmVsQ29uZmlndXJhdGlvbldpdGhvdXRDb25uZWN0aW9uUHJvcHMge1xuICAvKipcbiAgICogQXZhaWxhYmlsaXR5IFpvbmUgdGhlIHJvdXRlciBpbnB1dCB3aWxsIGJlIHBsYWNlZCBpbi5cbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgdHJhbnNpdCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VUcmFuc2l0RGVjcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHN0YW5kYXJkIFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uIHdpdGggYSBzaW5nbGUgcHJvdG9jb2xcbiAgICogQHBhcmFtIHByb3BzIFN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIHN0YW5kYXJkIHNldHVwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN0YW5kYXJkKHByb3BzOiBTdGFuZGFyZENvbmZpZ3VyYXRpb25Qcm9wcyk6IFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGFuZGFyZFJvdXRlcklucHV0Q29uZmlnKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmYWlsb3ZlciBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvbiB3aXRoIHR3byBtYXRjaGluZyBwcm90b2NvbHNcbiAgICogQHBhcmFtIHByb3BzIEZhaWxvdmVyIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIGZhaWxvdmVyIHNldHVwXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgcHJvdG9jb2xzIGRvbid0IG1hdGNoIG9yIGNvdW50IGlzIG5vdCBleGFjdGx5IDJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZmFpbG92ZXIocHJvcHM6IEZhaWxvdmVyQ29uZmlndXJhdGlvblByb3BzKTogUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5wcm90b2NvbHMpICYmIHByb3BzLnByb3RvY29scy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgRmFpbG92ZXJQcm90b2NvbENvdW50YCwgYEZhaWxvdmVyIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgZXhhY3RseSAyIHByb3RvY29scywgZ290ICR7cHJvcHMucHJvdG9jb2xzLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgaWYgKCFwcm9wcy5wcm90b2NvbHNbMF0uX21hdGNoZXNLaW5kKHByb3BzLnByb3RvY29sc1sxXSkpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgRmFpbG92ZXJQcm90b2NvbE1pc21hdGNoYCwgJ1Byb3RvY29scyBtdXN0IG1hdGNoJyk7XG4gICAgfVxuICAgIHByb3BzLnByb3RvY29sc1swXS5fdmFsaWRhdGVQb3J0Q29uZmxpY3RzKHByb3BzLnByb3RvY29sc1sxXSwgUHJvdG9jb2xDb25maWdUeXBlLkZBSUxPVkVSKTtcbiAgICByZXR1cm4gbmV3IEZhaWxvdmVyUm91dGVySW5wdXRDb25maWcocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1lcmdlIFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uIHdpdGggdHdvIG1hdGNoaW5nIG5vbi1TUlQgcHJvdG9jb2xzXG4gICAqIEBwYXJhbSBwcm9wcyBNZXJnZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBtZXJnZSBzZXR1cFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHByb3RvY29scyBkb24ndCBtYXRjaCwgY291bnQgaXMgbm90IGV4YWN0bHkgMiwgb3IgU1JUIHByb3RvY29scyBhcmUgdXNlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZXJnZShwcm9wczogTWVyZ2VDb25maWd1cmF0aW9uUHJvcHMpOiBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnByb3RvY29scykgJiYgcHJvcHMucHJvdG9jb2xzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBNZXJnZVByb3RvY29sQ291bnRgLCBgTWVyZ2UgY29uZmlndXJhdGlvbiByZXF1aXJlcyBleGFjdGx5IDIgcHJvdG9jb2xzLCBnb3QgJHtwcm9wcy5wcm90b2NvbHMubGVuZ3RofWApO1xuICAgIH1cbiAgICBpZiAocHJvcHMucHJvdG9jb2xzLnNvbWUocCA9PiBwLl9pc1NydCgpKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBNZXJnZVNydE5vdFN1cHBvcnRlZGAsICdTUlQgcHJvdG9jb2xzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG1lcmdlIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFwcm9wcy5wcm90b2NvbHNbMF0uX21hdGNoZXNLaW5kKHByb3BzLnByb3RvY29sc1sxXSkpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTWVyZ2VQcm90b2NvbE1pc21hdGNoYCwgJ1Byb3RvY29scyBtdXN0IG1hdGNoJyk7XG4gICAgfVxuICAgIHByb3BzLnByb3RvY29sc1swXS5fdmFsaWRhdGVQb3J0Q29uZmxpY3RzKHByb3BzLnByb3RvY29sc1sxXSwgUHJvdG9jb2xDb25maWdUeXBlLk1FUkdFKTtcbiAgICByZXR1cm4gbmV3IE1lcmdlUm91dGVySW5wdXRDb25maWcocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhQ29ubmVjdCBGbG93IFJvdXRlciBJbnB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgY29ubmVjdGluZyB0byBhIHNwZWNpZmljIGZsb3dcbiAgICogVXNlIHRoaXMgd2hlbiB5b3Ugd2FudCB0byBwcmVwYXJlIHRoZSByb3V0ZXIgaW5wdXQgZm9yIGEgZmxvdyBjb25uZWN0aW9uIGxhdGVyXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUNvbm5lY3QgRmxvdyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgd2l0aG91dCBjb25uZWN0aW9uXG4gICAqIEByZXR1cm5zIFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3IgTWVkaWFDb25uZWN0IEZsb3cgc2V0dXAgd2l0aG91dCBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhQ29ubmVjdEZsb3dXaXRob3V0Q29ubmVjdGlvbihwcm9wczogTWVkaWFDb25uZWN0Rmxvd0NvbmZpZ3VyYXRpb25XaXRob3V0Q29ubmVjdGlvblByb3BzKTogUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJJbnB1dENvbmZpZyh7IHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uOiBwcm9wcy5zb3VyY2VUcmFuc2l0RGVjcnlwdGlvbiB9LCBwcm9wcy5hdmFpbGFiaWxpdHlab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgc291cmNlIGZsb3cgYWxyZWFkeSBleGlzdHMgYW5kIHlvdSB3YW50IHRvIGNvbm5lY3QgaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUNvbm5lY3QgRmxvdyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBzZXR1cFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUNvbm5lY3RGbG93KHByb3BzOiBNZWRpYUNvbm5lY3RGbG93Q29uZmlndXJhdGlvblByb3BzKTogUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJJbnB1dENvbmZpZyh7XG4gICAgICBmbG93OiBwcm9wcy5mbG93LFxuICAgICAgZmxvd091dHB1dDogcHJvcHMuZmxvd091dHB1dCxcbiAgICAgIHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uOiBwcm9wcy5zb3VyY2VUcmFuc2l0RGVjcnlwdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUxpdmUgQ2hhbm5lbCBSb3V0ZXIgSW5wdXQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgc291cmNlIE1lZGlhTGl2ZSBjaGFubmVsIGFscmVhZHkgZXhpc3RzIGFuZCB5b3Ugd2FudCB0b1xuICAgKiBpbmdlc3QgZnJvbSBvbmUgb2YgaXRzIG91dHB1dHMgaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUxpdmUgY2hhbm5lbCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUxpdmUgY2hhbm5lbCBzZXR1cFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUxpdmVDaGFubmVsKHByb3BzOiBNZWRpYUxpdmVDaGFubmVsQ29uZmlndXJhdGlvblByb3BzKTogUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhTGl2ZUNoYW5uZWxSb3V0ZXJJbnB1dENvbmZpZyh7XG4gICAgICBtZWRpYUxpdmVDaGFubmVsQXJuOiBwcm9wcy5jaGFubmVsLmNoYW5uZWxSZWYuY2hhbm5lbEFybixcbiAgICAgIG1lZGlhTGl2ZUNoYW5uZWxPdXRwdXROYW1lOiBwcm9wcy5vdXRwdXROYW1lLFxuICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogcHJvcHMucGlwZWxpbmUsXG4gICAgICBzb3VyY2VUcmFuc2l0RGVjcnlwdGlvbjogcHJvcHMuc291cmNlVHJhbnNpdERlY3J5cHRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFMaXZlIENoYW5uZWwgUm91dGVyIElucHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBhIHNwZWNpZmljIGNoYW5uZWwgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB5b3Ugd2FudCB0byBzZXQgdXAgdGhlIHJvdXRlciBpbnB1dCBiZWZvcmUgdGhlIHRhcmdldCBNZWRpYUxpdmUgY2hhbm5lbCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUxpdmUgY2hhbm5lbCBuby1jb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUxpdmUgY2hhbm5lbCBzZXR1cCB3aXRob3V0IGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFMaXZlQ2hhbm5lbFdpdGhvdXRDb25uZWN0aW9uKHByb3BzOiBNZWRpYUxpdmVDaGFubmVsQ29uZmlndXJhdGlvbldpdGhvdXRDb25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFMaXZlQ2hhbm5lbFJvdXRlcklucHV0Q29uZmlnKHsgc291cmNlVHJhbnNpdERlY3J5cHRpb246IHByb3BzLnNvdXJjZVRyYW5zaXREZWNyeXB0aW9uIH0sIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhpcyBjb25maWd1cmF0aW9uIHRvIGl0cyBDbG91ZEZvcm1hdGlvbiBzaGFwZS4gQ2FsbGVkIGJ5IHRoZSBSb3V0ZXJJbnB1dFxuICAgKiBjb25zdHJ1Y3RvciDigJQgZWFjaCBjb25jcmV0ZSBzdWJjbGFzcyBzdXBwbGllcyBpdHMgb3duIHZhcmlhbnQtc3BlY2lmaWMgcmVuZGVyaW5nLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJJbnB1dEFybj86IHN0cmluZyk6IHtcbiAgICBjb25maWc6IENmblJvdXRlcklucHV0LlJvdXRlcklucHV0Q29uZmlndXJhdGlvblByb3BlcnR5OyBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBpbmdlc3QgZW5kcG9pbnRzIGZvciBwcm90b2NvbC1iYXNlZCBpbnB1dHMgdGhhdCBsaXN0ZW4gb24gb25lIG9yIG1vcmVcbiAgICogcG9ydHMuXG4gICAqXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgdmFyaWFudCBoYXMgbm8gY29uY2VwdCBvZiBhIGxpc3RlbiBwb3J0IChTUlQgY2FsbGVyLFxuICAgKiBNZWRpYUNvbm5lY3QgRmxvdywgTWVkaWFMaXZlIENoYW5uZWwpLiBSZXR1cm5zIGFuIGFycmF5IHdpdGggb25lIGVudHJ5IGZvclxuICAgKiBzdGFuZGFyZCB2YXJpYW50cywgYW5kIG9uZSBlbnRyeSBwZXIgc291cmNlIGZvciBmYWlsb3ZlciBhbmQgbWVyZ2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9lbmRwb2ludHMoaXBBZGRyZXNzOiBzdHJpbmcpOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVuZGVyIGFuIGluZ2VzdCBVUkwgc3RyaW5nIChzY2hlbWU6Ly9pcDpwb3J0KS4gVXNlZCBieSBgX2luZ2VzdFVybCgpYCBvbiBpbmRpdmlkdWFsXG4gKiBwcm90b2NvbHMgYW5kIGNvbXBvc2VkIGludG8gdGhlIHBlci1jb25maWctdmFyaWFudCBgX2VuZHBvaW50cygpYCByZXN1bHRzLlxuICpcbiAqIEV4dHJhY3RzIHRoZSBiYXNlIHByb3RvY29sIGZvciB0aGUgVVJMIHNjaGVtZSAoZS5nLiBTUlRfTElTVEVORVIg4oaSIHNydCwgUlRQIOKGkiBydHApLlxuICovXG5mdW5jdGlvbiByZW5kZXJJbmdlc3RVcmwocHJvdG9jb2xOYW1lOiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgaXBBZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzY2hlbWUgPSBwcm90b2NvbE5hbWUudG9Mb3dlckNhc2UoKS5zcGxpdCgnXycpWzBdO1xuICByZXR1cm4gRm4uam9pbignJywgW2Ake3NjaGVtZX06Ly9gLCBpcEFkZHJlc3MsIGA6JHtwb3J0fWBdKTtcbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBzdGFuZGFyZCAoc2luZ2xlLXByb3RvY29sKSByb3V0ZXIgaW5wdXQgY29uZmlndXJhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBTdGFuZGFyZFJvdXRlcklucHV0Q29uZmlnIGV4dGVuZHMgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogU3RhbmRhcmRDb25maWd1cmF0aW9uUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJJbnB1dEFybj86IHN0cmluZykge1xuICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5wcm9wcy5wcm90b2NvbC5fYmluZChzY29wZSwgcm91dGVySW5wdXRBcm4pO1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgc3RhbmRhcmQ6IHtcbiAgICAgICAgICBuZXR3b3JrSW50ZXJmYWNlQXJuOiB0aGlzLnByb3BzLm5ldHdvcmtJbnRlcmZhY2Uucm91dGVyTmV0d29ya0ludGVyZmFjZUFybixcbiAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wubmFtZS52YWx1ZSxcbiAgICAgICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb246IHByb3RvY29sLmNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLnByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBfZW5kcG9pbnRzKGlwQWRkcmVzczogc3RyaW5nKTogUm91dGVySW5wdXRFbmRwb2ludFtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnByb3BzLnByb3RvY29sLl9pbmdlc3RVcmwoaXBBZGRyZXNzKTtcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5wcm9wcy5wcm90b2NvbC5fbGlzdGVuaW5nUG9ydCgpO1xuICAgIGlmICh1cmwgPT09IHVuZGVmaW5lZCB8fCBwb3J0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFt7IHVybCwgcG9ydCB9XTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IGZhaWxvdmVyIHJvdXRlciBpbnB1dCBjb25maWd1cmF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIEZhaWxvdmVyUm91dGVySW5wdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBGYWlsb3ZlckNvbmZpZ3VyYXRpb25Qcm9wcykgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlcklucHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJpb3JpdHkgPSAodGhpcy5wcm9wcy5zb3VyY2VQcmlvcml0eSA/PyBTb3VyY2VQcmlvcml0eUNvbmZpZy5ub25lKCkpLl9iaW5kKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBmYWlsb3Zlcjoge1xuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VBcm46IHRoaXMucHJvcHMubmV0d29ya0ludGVyZmFjZS5yb3V0ZXJOZXR3b3JrSW50ZXJmYWNlQXJuLFxuICAgICAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbnM6IHRoaXMucHJvcHMucHJvdG9jb2xzLm1hcChwID0+IHAuX2JpbmQoc2NvcGUsIHJvdXRlcklucHV0QXJuKS5jb25maWcpLFxuICAgICAgICAgIHNvdXJjZVByaW9yaXR5TW9kZTogcHJpb3JpdHkuc291cmNlUHJpb3JpdHlNb2RlLFxuICAgICAgICAgIHByaW1hcnlTb3VyY2VJbmRleDogcHJpb3JpdHkucHJpbWFyeVNvdXJjZUluZGV4LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMucHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIF9lbmRwb2ludHMoaXBBZGRyZXNzOiBzdHJpbmcpOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVuZHBvaW50czogUm91dGVySW5wdXRFbmRwb2ludFtdID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMucHJvcHMucHJvdG9jb2xzKSB7XG4gICAgICBjb25zdCB1cmwgPSBwLl9pbmdlc3RVcmwoaXBBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHBvcnQgPSBwLl9saXN0ZW5pbmdQb3J0KCk7XG4gICAgICBpZiAodXJsID09PSB1bmRlZmluZWQgfHwgcG9ydCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgZW5kcG9pbnRzLnB1c2goeyB1cmwsIHBvcnQgfSk7XG4gICAgfVxuICAgIHJldHVybiBlbmRwb2ludHM7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBtZXJnZSByb3V0ZXIgaW5wdXQgY29uZmlndXJhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBNZXJnZVJvdXRlcklucHV0Q29uZmlnIGV4dGVuZHMgUm91dGVySW5wdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogTWVyZ2VDb25maWd1cmF0aW9uUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJJbnB1dEFybj86IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgbWVyZ2U6IHtcbiAgICAgICAgICBuZXR3b3JrSW50ZXJmYWNlQXJuOiB0aGlzLnByb3BzLm5ldHdvcmtJbnRlcmZhY2Uucm91dGVyTmV0d29ya0ludGVyZmFjZUFybixcbiAgICAgICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb25zOiB0aGlzLnByb3BzLnByb3RvY29scy5tYXAocCA9PiBwLl9iaW5kKHNjb3BlLCByb3V0ZXJJbnB1dEFybikuY29uZmlnKSxcbiAgICAgICAgICBtZXJnZVJlY292ZXJ5V2luZG93TWlsbGlzZWNvbmRzOiB0aGlzLnByb3BzLm1lcmdlUmVjb3ZlcnlXaW5kb3cudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLnByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBfZW5kcG9pbnRzKGlwQWRkcmVzczogc3RyaW5nKTogUm91dGVySW5wdXRFbmRwb2ludFtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlbmRwb2ludHM6IFJvdXRlcklucHV0RW5kcG9pbnRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLnByb3BzLnByb3RvY29scykge1xuICAgICAgY29uc3QgdXJsID0gcC5faW5nZXN0VXJsKGlwQWRkcmVzcyk7XG4gICAgICBjb25zdCBwb3J0ID0gcC5fbGlzdGVuaW5nUG9ydCgpO1xuICAgICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkIHx8IHBvcnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGVuZHBvaW50cy5wdXNoKHsgdXJsLCBwb3J0IH0pO1xuICAgIH1cbiAgICByZXR1cm4gZW5kcG9pbnRzO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgb3B0aW9ucyBmb3Ige0BsaW5rIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJJbnB1dENvbmZpZ30uXG4gKi9cbmludGVyZmFjZSBNZWRpYUNvbm5lY3RGbG93Um91dGVySW5wdXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgZmxvdz86IElGbG93O1xuICByZWFkb25seSBmbG93T3V0cHV0PzogSUZsb3dPdXRwdXQ7XG4gIHJlYWRvbmx5IHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogTWVkaWFDb25uZWN0IEZsb3cgcm91dGVyIGlucHV0IGNvbmZpZ3VyYXRpb24gKHdpdGggb3Igd2l0aG91dCBjb25uZWN0aW9uKS5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBNZWRpYUNvbm5lY3RGbG93Um91dGVySW5wdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJJbnB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJJbnB1dE9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nLFxuICApIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJJbnB1dEFybj86IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgbWVkaWFDb25uZWN0Rmxvdzoge1xuICAgICAgICAgIGZsb3dBcm46IHRoaXMub3B0aW9ucy5mbG93Py5mbG93QXJuLFxuICAgICAgICAgIGZsb3dPdXRwdXRBcm46IHRoaXMub3B0aW9ucy5mbG93T3V0cHV0Py5mbG93T3V0cHV0QXJuLFxuICAgICAgICAgIHNvdXJjZVRyYW5zaXREZWNyeXB0aW9uOiByZW5kZXJUcmFuc2l0RW5jcnlwdGlvbihzY29wZSwgJ1NvdXJjZVRyYW5zaXREZWNyeXB0aW9uUm9sZScsIHRoaXMub3B0aW9ucy5zb3VyY2VUcmFuc2l0RGVjcnlwdGlvbiwgcm91dGVySW5wdXRBcm4pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIF9lbmRwb2ludHMoX2lwQWRkcmVzczogc3RyaW5nKTogUm91dGVySW5wdXRFbmRwb2ludFtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgb3B0aW9ucyBmb3Ige0BsaW5rIE1lZGlhTGl2ZUNoYW5uZWxSb3V0ZXJJbnB1dENvbmZpZ30uXG4gKi9cbmludGVyZmFjZSBNZWRpYUxpdmVDaGFubmVsUm91dGVySW5wdXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgbWVkaWFMaXZlQ2hhbm5lbEFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgbWVkaWFMaXZlQ2hhbm5lbE91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lZGlhTGl2ZVBpcGVsaW5lSWQ/OiBNZWRpYUxpdmVQaXBlbGluZTtcbiAgcmVhZG9ubHkgc291cmNlVHJhbnNpdERlY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBNZWRpYUxpdmUgQ2hhbm5lbCByb3V0ZXIgaW5wdXQgY29uZmlndXJhdGlvbiAod2l0aCBvciB3aXRob3V0IGNvbm5lY3Rpb24pLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE1lZGlhTGl2ZUNoYW5uZWxSb3V0ZXJJbnB1dENvbmZpZyBleHRlbmRzIFJvdXRlcklucHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTWVkaWFMaXZlQ2hhbm5lbFJvdXRlcklucHV0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmcsXG4gICkgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlcklucHV0QXJuPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZWRpYUxpdmVDaGFubmVsOiB7XG4gICAgICAgICAgbWVkaWFMaXZlQ2hhbm5lbEFybjogdGhpcy5vcHRpb25zLm1lZGlhTGl2ZUNoYW5uZWxBcm4sXG4gICAgICAgICAgbWVkaWFMaXZlQ2hhbm5lbE91dHB1dE5hbWU6IHRoaXMub3B0aW9ucy5tZWRpYUxpdmVDaGFubmVsT3V0cHV0TmFtZSxcbiAgICAgICAgICBtZWRpYUxpdmVQaXBlbGluZUlkOiB0aGlzLm9wdGlvbnMubWVkaWFMaXZlUGlwZWxpbmVJZCxcbiAgICAgICAgICBzb3VyY2VUcmFuc2l0RGVjcnlwdGlvbjogcmVuZGVyVHJhbnNpdEVuY3J5cHRpb24oc2NvcGUsICdTb3VyY2VUcmFuc2l0RGVjcnlwdGlvblJvbGUnLCB0aGlzLm9wdGlvbnMuc291cmNlVHJhbnNpdERlY3J5cHRpb24sIHJvdXRlcklucHV0QXJuKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBfZW5kcG9pbnRzKF9pcEFkZHJlc3M6IHN0cmluZyk6IFJvdXRlcklucHV0RW5kcG9pbnRbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEEgTWVkaWFDb25uZWN0IFJvdXRlciBJbnB1dCB0aGF0IHJlY2VpdmVzIG1lZGlhIHN0cmVhbXMgYW5kIHJvdXRlcyB0aGVtIHRvIG91dHB1dHMuXG4gKlxuICogUm91dGVyIElucHV0cyBzdXBwb3J0IG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gdHlwZXM6XG4gKiAtIFN0YW5kYXJkOiBTaW5nbGUgcHJvdG9jb2wgaW5wdXRcbiAqIC0gRmFpbG92ZXI6IFR3byBtYXRjaGluZyBwcm90b2NvbHMgZm9yIHJlZHVuZGFuY3lcbiAqIC0gTWVyZ2U6IFR3byBtYXRjaGluZyBub24tU1JUIHByb3RvY29scyBmb3Igc3RyZWFtIG1lcmdpbmdcbiAqIC0gTWVkaWFDb25uZWN0IEZsb3c6IElucHV0IGZyb20gYW4gZXhpc3RpbmcgTWVkaWFDb25uZWN0IEZsb3dcbiAqL1xuYWJzdHJhY3QgY2xhc3MgUm91dGVySW5wdXRCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVySW5wdXQge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcm91dGVySW5wdXRBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlcklucHV0SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZW5kcG9pbnRzOiBSb3V0ZXJJbnB1dEVuZHBvaW50W107XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0cmFuc2l0RW5jcnlwdGlvblNlY3JldD86IElTZWNyZXQ7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudHM6IFJvdXRlcklucHV0R3JhbnRzO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGlzIFJvdXRlciBJbnB1dCByZXNvdXJjZS5cbiAgICogUmVxdWlyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIElSb3V0ZXJJbnB1dFJlZiBpbnRlcmZhY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvdXRlcklucHV0UmVmKCk6IFJvdXRlcklucHV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4geyByb3V0ZXJJbnB1dEFybjogdGhpcy5yb3V0ZXJJbnB1dEFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0aGlzIHJvdXRlciBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuYW1lc3BhY2U6ICdBV1MvTWVkaWFDb25uZWN0JyxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBSb3V0ZXJJbnB1dEFSTjogdGhpcy5yb3V0ZXJJbnB1dEFybixcbiAgICAgICAgLi4ucHJvcHM/LmRpbWVuc2lvbnNNYXAsXG4gICAgICB9LFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGJpdHJhdGUgb2YgdGhlIHJvdXRlciBpbnB1dCdzIHBheWxvYWQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQml0cmF0ZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVySW5wdXRCaXRSYXRlJywge1xuICAgICAgc3RhdGlzdGljOiAnYXZnJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkJJVFNfUEVSX1NFQ09ORCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgcGFja2V0cyBsb3N0IGluIHRyYW5zaXQgdGhhdCB3ZXJlIG5vdCByZWNvdmVyZWQgYnkgZXJyb3IgY29ycmVjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNOb3RSZWNvdmVyZWRQYWNrZXRzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJJbnB1dE5vdFJlY292ZXJlZFBhY2tldHMnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCBieSB0aGUgcm91dGVyIGlucHV0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1RvdGFsUGFja2V0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVySW5wdXRUb3RhbFBhY2tldHMnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByb3V0ZXIgaW5wdXQgY29ubmVjdGlvbiBzdGF0ZSAoMSBjb25uZWN0ZWQsIDAgZGlzY29ubmVjdGVkKS4gQXBwbGllcyB0byBTUlQgc291cmNlcyBvbmx5LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0Nvbm5lY3RlZChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVySW5wdXRDb25uZWN0ZWQnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdtaW4nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuTk9ORSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgY29udGludWl0eSBjb3VudGVyIGVycm9ycyBpbiB0aGUgdHJhbnNwb3J0IHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDb250aW51aXR5Q291bnRlckVycm9ycyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVySW5wdXRDQ0Vycm9ycycsIHtcbiAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5DT1VOVCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHJlY292ZXJ5IGxhdGVuY3kgb2YgdGhlIGlucHV0IHN0cmVhbS4gQXBwbGllcyB0byBSSVNULCBTUlQsIGFuZCBSVFAtRkVDLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0xhdGVuY3kocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlcklucHV0TGF0ZW5jeScsIHtcbiAgICAgIHN0YXRpc3RpYzogJ2F2ZycsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5NSUxMSVNFQ09ORFMsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJvdXRlciBpbnB1dCBoYXMgc3dpdGNoZWQgc291cmNlcyBpbiBGYWlsb3ZlciBtb2RlLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0ZhaWxvdmVyU3dpdGNoZXMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlcklucHV0RmFpbG92ZXJTd2l0Y2hlcycsIHtcbiAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5DT1VOVCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBBV1MgRWxlbWVudGFsIE1lZGlhQ29ubmVjdCBSb3V0ZXIgSW5wdXQuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBSb3V0ZXJJbnB1dCBleHRlbmRzIFJvdXRlcklucHV0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZXJJbnB1dCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLW1lZGlhY29ubmVjdC1hbHBoYS5Sb3V0ZXJJbnB1dCc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSb3V0ZXIgSW5wdXQgZnJvbSBpdHMgQVJOLlxuICAgKlxuICAgKiBVc2UgYGZyb21Sb3V0ZXJJbnB1dEF0dHJpYnV0ZXMoKWAgaW5zdGVhZCBpZiB5b3UgbmVlZCB0byBleHBvc2UgYHJvdXRlcklucHV0SWRgXG4gICAqIG9yIGBpcEFkZHJlc3NgIG9uIHRoZSBpbXBvcnRlZCBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcm91dGVySW5wdXRBcm4gVGhlIEFSTiBvZiB0aGUgUm91dGVyIElucHV0XG4gICAqIEByZXR1cm5zIEEgUm91dGVyIElucHV0IGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUm91dGVySW5wdXRBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcm91dGVySW5wdXRBcm46IHN0cmluZyk6IElSb3V0ZXJJbnB1dCB7XG4gICAgcmV0dXJuIFJvdXRlcklucHV0LmZyb21Sb3V0ZXJJbnB1dEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHJvdXRlcklucHV0QXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSb3V0ZXIgSW5wdXQgZnJvbSBpdHMgYXR0cmlidXRlcy5cbiAgICpcbiAgICogUHJvdmlkZSBgcm91dGVySW5wdXRJZGAgYW5kL29yIGBpcEFkZHJlc3NgIHdoZW4gaW1wb3J0aW5nIGFuIGlucHV0IHRoYXQgd2FzIGRlcGxveWVkXG4gICAqIGV4dGVybmFsbHkg4oCUIG90aGVyd2lzZSBhY2Nlc3NpbmcgdGhvc2UgcHJvcGVydGllcyBvbiB0aGUgaW1wb3J0ZWQgY29uc3RydWN0IHdpbGwgdGhyb3cuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIFJvdXRlciBJbnB1dCBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm5zIEEgUm91dGVyIElucHV0IGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUm91dGVySW5wdXRBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBSb3V0ZXJJbnB1dEF0dHJpYnV0ZXMpOiBJUm91dGVySW5wdXQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJvdXRlcklucHV0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZXJJbnB1dCB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm91dGVySW5wdXRBcm4gPSBhdHRycy5yb3V0ZXJJbnB1dEFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRyYW5zaXRFbmNyeXB0aW9uU2VjcmV0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50cyA9IFJvdXRlcklucHV0R3JhbnRzLmZyb21Sb3V0ZXJJbnB1dCh0aGlzKTtcblxuICAgICAgcHVibGljIGdldCBlbmRwb2ludHMoKTogUm91dGVySW5wdXRFbmRwb2ludFtdIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUm91dGVySW5wdXRFbmRwb2ludHNOb3RBdmFpbGFibGVJbXBvcnRlZGAsXG4gICAgICAgICAgYCdlbmRwb2ludHMnIGlzIG5vdCBhdmFpbGFibGUgb24gaW1wb3J0ZWQgUm91dGVySW5wdXQgJHt0aGlzLm5vZGUucGF0aH07IG9ubHkgUm91dGVySW5wdXRzIGNvbnN0cnVjdGVkIGluIHRoaXMgYXBwIGZvciBsaXN0ZW5pbmcgcHJvdG9jb2wgdmFyaWFudHMgKFJUUCwgUklTVCwgU1JUIGxpc3RlbmVyLCBpbmNsdWRpbmcgZmFpbG92ZXIgYW5kIG1lcmdlKSBleHBvc2UgaW5nZXN0IGVuZHBvaW50c2AsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCByb3V0ZXJJbnB1dElkKCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChhdHRycy5yb3V0ZXJJbnB1dElkKSByZXR1cm4gYXR0cnMucm91dGVySW5wdXRJZDtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUm91dGVySW5wdXRJZE5vdFByb3ZpZGVkYCxcbiAgICAgICAgICBgJ3JvdXRlcklucHV0SWQnIGlzIG5vdCBhdmFpbGFibGUgb24gaW1wb3J0ZWQgUm91dGVySW5wdXQgJHt0aGlzLm5vZGUucGF0aH07IHBhc3MgaXQgdmlhIGZyb21Sb3V0ZXJJbnB1dEF0dHJpYnV0ZXNgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgaXBBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChhdHRycy5pcEFkZHJlc3MpIHJldHVybiBhdHRycy5pcEFkZHJlc3M7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YFJvdXRlcklucHV0SXBBZGRyZXNzTm90UHJvdmlkZWRgLFxuICAgICAgICAgIGAnaXBBZGRyZXNzJyBpcyBub3QgYXZhaWxhYmxlIG9uIGltcG9ydGVkIFJvdXRlcklucHV0ICR7dGhpcy5ub2RlLnBhdGh9OyBwYXNzIGl0IHZpYSBmcm9tUm91dGVySW5wdXRBdHRyaWJ1dGVzYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1heGltdW0gYml0cmF0ZSBpbiBNYnBzIGZvciBhIGtub3duIHRpZXIsIG9yIHVuZGVmaW5lZCBmb3IgY3VzdG9tIHRpZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdGllckxpbWl0TWJwcyh0aWVyOiBSb3V0ZXJJbnB1dFRpZXIpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aWVyLnZhbHVlID09PSBSb3V0ZXJJbnB1dFRpZXIuSU5QVVRfMjAudmFsdWUpIHJldHVybiAyMDtcbiAgICBpZiAodGllci52YWx1ZSA9PT0gUm91dGVySW5wdXRUaWVyLklOUFVUXzUwLnZhbHVlKSByZXR1cm4gNTA7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlcklucHV0VGllci5JTlBVVF8xMDAudmFsdWUpIHJldHVybiAxMDA7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJJbnB1dEFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVySW5wdXRJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaXBBZGRyZXNzOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuZHBvaW50czogUm91dGVySW5wdXRFbmRwb2ludFtdIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNpdEVuY3J5cHRpb25TZWNyZXQ/OiBJU2VjcmV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRzOiBSb3V0ZXJJbnB1dEdyYW50cztcblxuICBwdWJsaWMgZ2V0IGVuZHBvaW50cygpOiBSb3V0ZXJJbnB1dEVuZHBvaW50W10ge1xuICAgIGlmICh0aGlzLl9lbmRwb2ludHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YFJvdXRlcklucHV0RW5kcG9pbnRzTm90QXZhaWxhYmxlQ29uZmlnYCxcbiAgICAgICAgYCdlbmRwb2ludHMnIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBSb3V0ZXJJbnB1dCAke3RoaXMubm9kZS5wYXRofTsgb25seSBsaXN0ZW5pbmcgcHJvdG9jb2wgdmFyaWFudHMgKFJUUCwgUklTVCwgU1JUIGxpc3RlbmVyIOKAlCBpbmNsdWRpbmcgZmFpbG92ZXIgYW5kIG1lcmdlIGJ1aWx0IGZyb20gdGhvc2UpIGV4cG9zZSBpbmdlc3QgZW5kcG9pbnRzIOKAlCBTUlQgY2FsbGVyLCBNZWRpYUNvbm5lY3QgRmxvdywgYW5kIE1lZGlhTGl2ZSBDaGFubmVsIGlucHV0cyBkbyBub3RgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VuZHBvaW50cztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZXJJbnB1dFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnJvdXRlcklucHV0TmFtZSA/PyBMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogMTI4IH0pIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgcm91dGVyIGlucHV0IG5hbWUgaWYgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMucm91dGVySW5wdXROYW1lICE9IG51bGwgJiYgcHJvcHMucm91dGVySW5wdXROYW1lICE9PSAnJyAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnJvdXRlcklucHV0TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5yb3V0ZXJJbnB1dE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlcklucHV0TmFtZUxlbmd0aGAsIGBSb3V0ZXIgaW5wdXQgbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTI4IGNoYXJhY3RlcnMsIGdvdCAke3Byb3BzLnJvdXRlcklucHV0TmFtZS5sZW5ndGh9YCwgdGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAoIS9eW2EtekEtWjAtOV8tXSskLy50ZXN0KHByb3BzLnJvdXRlcklucHV0TmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVySW5wdXROYW1lRm9ybWF0YCwgYFJvdXRlciBpbnB1dCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMsIGdvdCAnJHtwcm9wcy5yb3V0ZXJJbnB1dE5hbWV9J2AsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1heGltdW0gYml0cmF0ZVxuICAgIGlmICghcHJvcHMubWF4aW11bUJpdHJhdGUuaXNVbnJlc29sdmVkKCkgJiYgcHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKSA8IDEwMDAwMDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlcklucHV0TWluQml0cmF0ZWAsIGBNYXhpbXVtIGJpdHJhdGUgbXVzdCBiZSBhdCBsZWFzdCAxLDAwMCwwMDAgYml0cy9zICgxIE1icHMpLCBnb3QgJHtwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpfWAsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGJpdHJhdGUgZG9lcyBub3QgZXhjZWVkIHRpZXIgbGltaXRcbiAgICBjb25zdCByZXNvbHZlZFRpZXIgPSBwcm9wcy50aWVyID8/IFJvdXRlcklucHV0VGllci5JTlBVVF8yMDtcbiAgICBjb25zdCB0aWVyTWJwcyA9IFJvdXRlcklucHV0LnRpZXJMaW1pdE1icHMocmVzb2x2ZWRUaWVyKTtcbiAgICBpZiAoZXhjZWVkc1JvdXRlclRpZXJCaXRyYXRlKHRpZXJNYnBzLCBwcm9wcy5tYXhpbXVtQml0cmF0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlcklucHV0Qml0cmF0ZUV4Y2VlZHNUaWVyYCwgYE1heGltdW0gYml0cmF0ZSAke3Byb3BzLm1heGltdW1CaXRyYXRlLnRvQnBzKCkgLyAxXzAwMF8wMDB9IE1icHMgZXhjZWVkcyB0aGUgJHtyZXNvbHZlZFRpZXIudmFsdWV9IHRpZXIgbGltaXQgb2YgJHt0aWVyTWJwc30gTWJwc2AsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1haW50ZW5hbmNlIHRpbWUgZm9ybWF0XG4gICAgaWYgKHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbikge1xuICAgICAgdmFsaWRhdGVNYWludGVuYW5jZVRpbWUocHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uLnRpbWUpO1xuICAgIH1cblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCB0YXJnZXRSZWdpb24gPSBwcm9wcy5yZWdpb25OYW1lID8/IHN0YWNrLnJlZ2lvbjtcblxuICAgIC8vIFdpbGRjYXJkIHRoZSBpZCDigJQgcGlubmluZyB0aGUgbGl2ZSBBUk4gKGF0dHJBcm4pIHdvdWxkIGNyZWF0ZSBhIHJvbGUg4oaSIHJvdXRlci1pbnB1dCDihpIgcm9sZSBjeWNsZS5cbiAgICBjb25zdCByb3V0ZXJJbnB1dEFybiA9IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnbWVkaWFjb25uZWN0JyxcbiAgICAgIHJlZ2lvbjogdGFyZ2V0UmVnaW9uLFxuICAgICAgcmVzb3VyY2U6ICdyb3V0ZXJJbnB1dCcsXG4gICAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb25maWdCaW5kID0gcHJvcHMuY29uZmlndXJhdGlvbi5fYmluZCh0aGlzLCByb3V0ZXJJbnB1dEFybik7XG5cbiAgICAvLyBWYWxpZGF0ZSBBWiBtYXRjaGVzIHJlZ2lvbiBpZiBwcm92aWRlZFxuICAgIGlmIChjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUpICYmICFUb2tlbi5pc1VucmVzb2x2ZWQodGFyZ2V0UmVnaW9uKVxuICAgICAgJiYgIWNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZS5zdGFydHNXaXRoKHRhcmdldFJlZ2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlcklucHV0QXpSZWdpb25NaXNtYXRjaGAsIGBBdmFpbGFiaWxpdHkgem9uZSAnJHtjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmV9JyBtdXN0IGJlIHdpdGhpbiByZWdpb24gJyR7dGFyZ2V0UmVnaW9ufSdgLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2l0ID0gcmVzb2x2ZVRyYW5zaXRFbmNyeXB0aW9uKHRoaXMsICdUcmFuc2l0RW5jcnlwdGlvblJvbGUnLCBwcm9wcy50cmFuc2l0RW5jcnlwdGlvbiwgcm91dGVySW5wdXRBcm4pO1xuXG4gICAgY29uc3Qgcm91dGVyaW5wdXQgPSBuZXcgQ2ZuUm91dGVySW5wdXQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBtYXhpbXVtQml0cmF0ZTogcHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKSxcbiAgICAgIHRpZXI6IChwcm9wcy50aWVyID8/IFJvdXRlcklucHV0VGllci5JTlBVVF8yMCkudmFsdWUsXG4gICAgICByb3V0aW5nU2NvcGU6IHByb3BzLnJvdXRpbmdTY29wZS52YWx1ZSxcbiAgICAgIG1haW50ZW5hbmNlQ29uZmlndXJhdGlvbjogcHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uID8ge1xuICAgICAgICBwcmVmZXJyZWREYXlUaW1lOiBwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24sXG4gICAgICB9IDoge1xuICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmF0aW9uOiBjb25maWdCaW5kLmNvbmZpZyxcbiAgICAgIHRyYW5zaXRFbmNyeXB0aW9uOiB0cmFuc2l0LmNvbmZpZyxcbiAgICAgIHJlZ2lvbk5hbWU6IHRhcmdldFJlZ2lvbixcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgPyByZW5kZXJUYWdzKHByb3BzLnRhZ3MpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZXJJbnB1dEFybiA9IHJvdXRlcmlucHV0LmF0dHJBcm47XG4gICAgdGhpcy5yb3V0ZXJJbnB1dElkID0gcm91dGVyaW5wdXQuYXR0cklkO1xuICAgIHRoaXMuaXBBZGRyZXNzID0gcm91dGVyaW5wdXQuYXR0cklwQWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHJvdXRlcmlucHV0LmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSByb3V0ZXJpbnB1dC5hdHRyVXBkYXRlZEF0O1xuXG4gICAgLy8gV2l0aG91dCB0aGlzIHRoZSByb3V0ZXIgaW5wdXQgY2FuIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZVxuICAgIC8vIHBvbGljeSBpcyBhdHRhY2hlZCAoXCJhY2Nlc3MgZGVuaWVkXCIgYXQgY3JlYXRlIHRpbWUpLiBPcmRlcmluZyB0aGUgZ3JhbnQgYmVmb3JlIHRoZVxuICAgIC8vIHJvdXRlciBpbnB1dCBwdWxscyB0aGUgcG9saWN5IGluIGFzIGEgZGVwZW5kZW5jeS5cbiAgICB0cmFuc2l0LmdyYW50Py5hcHBseUJlZm9yZShyb3V0ZXJpbnB1dCk7XG5cbiAgICAvLyBDb21wdXRlIGluZ2VzdCBlbmRwb2ludHMgZm9yIHByb3RvY29sLWJhc2VkIHZhcmlhbnRzXG4gICAgdGhpcy5fZW5kcG9pbnRzID0gcHJvcHMuY29uZmlndXJhdGlvbi5fZW5kcG9pbnRzKHJvdXRlcmlucHV0LmF0dHJJcEFkZHJlc3MpO1xuXG4gICAgLy8gU3RvcmUgdGhlIHRyYW5zaXQgZW5jcnlwdGlvbiBzZWNyZXQgaWYgZXhwbGljaXRseSBwcm92aWRlZFxuICAgIHRoaXMudHJhbnNpdEVuY3J5cHRpb25TZWNyZXQgPSBwcm9wcy50cmFuc2l0RW5jcnlwdGlvbj8uc2VjcmV0O1xuICAgIHRoaXMuZ3JhbnRzID0gUm91dGVySW5wdXRHcmFudHMuZnJvbVJvdXRlcklucHV0KHRoaXMpO1xuICB9XG59XG4iXX0=
|
|
@@ -47,7 +47,7 @@ const shared_1 = require("./shared");
|
|
|
47
47
|
* Factory class for creating Router Network configurations
|
|
48
48
|
*/
|
|
49
49
|
class RouterNetworkConfiguration {
|
|
50
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterNetworkConfiguration", version: "2.
|
|
50
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterNetworkConfiguration", version: "2.271.0-alpha.0" };
|
|
51
51
|
/**
|
|
52
52
|
* Create a public network configuration
|
|
53
53
|
* @param props Public network configuration properties
|
|
@@ -137,7 +137,7 @@ let RouterNetworkInterface = (() => {
|
|
|
137
137
|
RouterNetworkInterface = _classThis = _classDescriptor.value;
|
|
138
138
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
139
139
|
}
|
|
140
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterNetworkInterface", version: "2.
|
|
140
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterNetworkInterface", version: "2.271.0-alpha.0" };
|
|
141
141
|
/** Uniquely identifies this class. */
|
|
142
142
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-mediaconnect-alpha.RouterNetworkInterface';
|
|
143
143
|
/**
|
package/lib/router-output.d.ts
CHANGED
|
@@ -33,7 +33,8 @@ export declare class RouterOutputProtocolOptions {
|
|
|
33
33
|
toString(): string;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* Tier for a router output. The tier determines the capacity limits, performance characteristics,
|
|
37
|
+
* and associated costs. The `maximumBitrate` must fall within the limits of the selected tier.
|
|
37
38
|
*/
|
|
38
39
|
export declare class RouterOutputTier {
|
|
39
40
|
readonly value: string;
|
|
@@ -133,12 +134,13 @@ export interface RouterOutputProps {
|
|
|
133
134
|
* @default - Generated automatically
|
|
134
135
|
*/
|
|
135
136
|
readonly routerOutputName?: string;
|
|
136
|
-
/** The maximum bitrate for the router output. */
|
|
137
|
+
/** The maximum bitrate for the router output. Must fall within the limits of the selected `tier`. */
|
|
137
138
|
readonly maximumBitrate: Bitrate;
|
|
138
139
|
/** Indicates whether the router output is configured for Regional or global routing. */
|
|
139
140
|
readonly routingScope: RoutingScope;
|
|
140
141
|
/**
|
|
141
|
-
*
|
|
142
|
+
* Tier for this output. The tier determines the capacity limits, performance characteristics,
|
|
143
|
+
* and associated costs; `maximumBitrate` must fall within its limits.
|
|
142
144
|
*
|
|
143
145
|
* @default RouterOutputTier.OUTPUT_20
|
|
144
146
|
*/
|