@horietakehiro/aws-cdk-utul 0.41.35 → 0.41.36
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/lib/types/cfn-resource-types/aws-bedrockagentcore-memory.d.ts +28 -0
- package/lib/types/cfn-resource-types/aws-bedrockagentcore-memory.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-cluster.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-cluster.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-clustercapacityproviderassociations.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-clustercapacityproviderassociations.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +7 -1
- package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
- package/lib/types/cfn-resource-types/aws-vpclattice-resourcegateway.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-vpclattice-resourcegateway.js +1 -1
- package/package.json +1 -1
|
@@ -36,6 +36,10 @@ export type NamespacesList = Namespace[];
|
|
|
36
36
|
* Text prompt for model instructions
|
|
37
37
|
*/
|
|
38
38
|
export type Prompt = string;
|
|
39
|
+
/**
|
|
40
|
+
* @minItems 1
|
|
41
|
+
*/
|
|
42
|
+
export type TriggerConditionList = TriggerConditionInput[];
|
|
39
43
|
/**
|
|
40
44
|
* List of memory strategies attached to this memory
|
|
41
45
|
*/
|
|
@@ -172,6 +176,7 @@ export interface CustomConfigurationInput {
|
|
|
172
176
|
SemanticOverride?: SemanticOverride;
|
|
173
177
|
SummaryOverride?: SummaryOverride;
|
|
174
178
|
UserPreferenceOverride?: UserPreferenceOverride;
|
|
179
|
+
SelfManagedConfiguration?: SelfManagedConfiguration;
|
|
175
180
|
}
|
|
176
181
|
export interface SemanticOverride {
|
|
177
182
|
Extraction?: SemanticOverrideExtractionConfigurationInput;
|
|
@@ -204,6 +209,29 @@ export interface UserPreferenceOverrideConsolidationConfigurationInput {
|
|
|
204
209
|
AppendToPrompt: Prompt;
|
|
205
210
|
ModelId: string;
|
|
206
211
|
}
|
|
212
|
+
export interface SelfManagedConfiguration {
|
|
213
|
+
TriggerConditions?: TriggerConditionList;
|
|
214
|
+
InvocationConfiguration?: InvocationConfigurationInput;
|
|
215
|
+
HistoricalContextWindowSize?: number;
|
|
216
|
+
}
|
|
217
|
+
export interface TriggerConditionInput {
|
|
218
|
+
MessageBasedTrigger?: MessageBasedTriggerInput;
|
|
219
|
+
TokenBasedTrigger?: TokenBasedTriggerInput;
|
|
220
|
+
TimeBasedTrigger?: TimeBasedTriggerInput;
|
|
221
|
+
}
|
|
222
|
+
export interface MessageBasedTriggerInput {
|
|
223
|
+
MessageCount?: number;
|
|
224
|
+
}
|
|
225
|
+
export interface TokenBasedTriggerInput {
|
|
226
|
+
TokenCount?: number;
|
|
227
|
+
}
|
|
228
|
+
export interface TimeBasedTriggerInput {
|
|
229
|
+
IdleSessionTimeout?: number;
|
|
230
|
+
}
|
|
231
|
+
export interface InvocationConfigurationInput {
|
|
232
|
+
TopicArn?: Arn;
|
|
233
|
+
PayloadDeliveryBucketName?: string;
|
|
234
|
+
}
|
|
207
235
|
/**
|
|
208
236
|
* A map of tag keys and values
|
|
209
237
|
*/
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWJlZHJvY2thZ2VudGNvcmUtbWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWJlZHJvY2thZ2VudGNvcmUtbWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5hbWUgb2YgdGhlIE1lbW9yeSByZXNvdXJjZVxuICovXG5leHBvcnQgdHlwZSBOYW1lID0gc3RyaW5nXG4vKipcbiAqIERlc2NyaXB0aW9uIG9mIHRoZSBNZW1vcnkgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IHR5cGUgRGVzY3JpcHRpb24gPSBzdHJpbmdcbi8qKlxuICogQVJOIGZvcm1hdFxuICovXG5leHBvcnQgdHlwZSBBcm4gPSBzdHJpbmdcbi8qKlxuICogQVJOIG9mIHRoZSBNZW1vcnkgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IHR5cGUgTWVtb3J5QXJuID0gc3RyaW5nXG4vKipcbiAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgTWVtb3J5IHJlc291cmNlXG4gKi9cbmV4cG9ydCB0eXBlIE1lbW9yeUlkID0gc3RyaW5nXG4vKipcbiAqIFN0YXR1cyBvZiB0aGUgTWVtb3J5IHJlc291cmNlXG4gKi9cbmV4cG9ydCB0eXBlIE1lbW9yeVN0YXR1cyA9IChcIkNSRUFUSU5HXCIgfCBcIkFDVElWRVwiIHwgXCJGQUlMRURcIiB8IFwiREVMRVRJTkdcIilcbi8qKlxuICogTmFtZXNwYWNlIGZvciB0aGUgbWVtb3J5IHN0cmF0ZWd5XG4gKi9cbmV4cG9ydCB0eXBlIE5hbWVzcGFjZSA9IHN0cmluZ1xuLyoqXG4gKiBMaXN0IG9mIG5hbWVzcGFjZXMgZm9yIG1lbW9yeSBzdHJhdGVneVxuICogXG4gKiBAbWluSXRlbXMgMVxuICovXG5leHBvcnQgdHlwZSBOYW1lc3BhY2VzTGlzdCA9IE5hbWVzcGFjZVtdXG4vKipcbiAqIFRleHQgcHJvbXB0IGZvciBtb2RlbCBpbnN0cnVjdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgUHJvbXB0ID0gc3RyaW5nXG4vKipcbiAqIEBtaW5JdGVtcyAxXG4gKi9cbmV4cG9ydCB0eXBlIFRyaWdnZXJDb25kaXRpb25MaXN0ID0gVHJpZ2dlckNvbmRpdGlvbklucHV0W11cbi8qKlxuICogTGlzdCBvZiBtZW1vcnkgc3RyYXRlZ2llcyBhdHRhY2hlZCB0byB0aGlzIG1lbW9yeVxuICovXG5leHBvcnQgdHlwZSBNZW1vcnlTdHJhdGVnaWVzID0gTWVtb3J5U3RyYXRlZ3lbXVxuXG4vKipcbiAqIFJlc291cmNlIFR5cGUgZGVmaW5pdGlvbiBmb3IgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpNZW1vcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0JFRFJPQ0tBR0VOVENPUkVfTUVNT1JZIHtcbk5hbWU6IE5hbWVcbkRlc2NyaXB0aW9uPzogRGVzY3JpcHRpb25cbkVuY3J5cHRpb25LZXlBcm4/OiBBcm5cbk1lbW9yeUV4ZWN1dGlvblJvbGVBcm4/OiBBcm5cbi8qKlxuICogRHVyYXRpb24gaW4gZGF5cyB1bnRpbCBtZW1vcnkgZXZlbnRzIGV4cGlyZVxuICovXG5FdmVudEV4cGlyeUR1cmF0aW9uOiBudW1iZXJcbk1lbW9yeUFybj86IE1lbW9yeUFyblxuTWVtb3J5SWQ/OiBNZW1vcnlJZFxuU3RhdHVzPzogTWVtb3J5U3RhdHVzXG5GYWlsdXJlUmVhc29uPzogc3RyaW5nXG5DcmVhdGVkQXQ/OiBzdHJpbmdcblVwZGF0ZWRBdD86IHN0cmluZ1xuTWVtb3J5U3RyYXRlZ2llcz86IE1lbW9yeVN0cmF0ZWdpZXNcblRhZ3M/OiBUYWdzTWFwXG59XG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVN0cmF0ZWd5IHtcblNlbWFudGljTWVtb3J5U3RyYXRlZ3k/OiBTZW1hbnRpY01lbW9yeVN0cmF0ZWd5XG5TdW1tYXJ5TWVtb3J5U3RyYXRlZ3k/OiBTdW1tYXJ5TWVtb3J5U3RyYXRlZ3lcblVzZXJQcmVmZXJlbmNlTWVtb3J5U3RyYXRlZ3k/OiBVc2VyUHJlZmVyZW5jZU1lbW9yeVN0cmF0ZWd5XG5DdXN0b21NZW1vcnlTdHJhdGVneT86IEN1c3RvbU1lbW9yeVN0cmF0ZWd5XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljTWVtb3J5U3RyYXRlZ3kge1xuTmFtZTogTmFtZVxuRGVzY3JpcHRpb24/OiBEZXNjcmlwdGlvblxuTmFtZXNwYWNlcz86IE5hbWVzcGFjZXNMaXN0XG4vKipcbiAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbWVtb3J5IHN0cmF0ZWd5XG4gKi9cblN0cmF0ZWd5SWQ/OiBzdHJpbmdcbi8qKlxuICogVHlwZSBvZiBtZW1vcnkgc3RyYXRlZ3lcbiAqL1xuVHlwZT86IChcIlNFTUFOVElDXCIgfCBcIlNVTU1BUklaQVRJT05cIiB8IFwiVVNFUl9QUkVGRVJFTkNFXCIgfCBcIkNVU1RPTVwiKVxuLyoqXG4gKiBTdGF0dXMgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICovXG5TdGF0dXM/OiAoXCJDUkVBVElOR1wiIHwgXCJBQ1RJVkVcIiB8IFwiREVMRVRJTkdcIiB8IFwiRkFJTEVEXCIpXG4vKipcbiAqIENyZWF0aW9uIHRpbWVzdGFtcCBvZiB0aGUgbWVtb3J5IHN0cmF0ZWd5XG4gKi9cbkNyZWF0ZWRBdD86IHN0cmluZ1xuLyoqXG4gKiBMYXN0IHVwZGF0ZSB0aW1lc3RhbXAgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICovXG5VcGRhdGVkQXQ/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU3VtbWFyeU1lbW9yeVN0cmF0ZWd5IHtcbk5hbWU6IE5hbWVcbkRlc2NyaXB0aW9uPzogRGVzY3JpcHRpb25cbk5hbWVzcGFjZXM/OiBOYW1lc3BhY2VzTGlzdFxuLyoqXG4gKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG1lbW9yeSBzdHJhdGVneVxuICovXG5TdHJhdGVneUlkPzogc3RyaW5nXG4vKipcbiAqIFR5cGUgb2YgbWVtb3J5IHN0cmF0ZWd5XG4gKi9cblR5cGU/OiAoXCJTRU1BTlRJQ1wiIHwgXCJTVU1NQVJJWkFUSU9OXCIgfCBcIlVTRVJfUFJFRkVSRU5DRVwiIHwgXCJDVVNUT01cIilcbi8qKlxuICogU3RhdHVzIG9mIHRoZSBtZW1vcnkgc3RyYXRlZ3lcbiAqL1xuU3RhdHVzPzogKFwiQ1JFQVRJTkdcIiB8IFwiQUNUSVZFXCIgfCBcIkRFTEVUSU5HXCIgfCBcIkZBSUxFRFwiKVxuLyoqXG4gKiBDcmVhdGlvbiB0aW1lc3RhbXAgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICovXG5DcmVhdGVkQXQ/OiBzdHJpbmdcbi8qKlxuICogTGFzdCB1cGRhdGUgdGltZXN0YW1wIG9mIHRoZSBtZW1vcnkgc3RyYXRlZ3lcbiAqL1xuVXBkYXRlZEF0Pzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcmVmZXJlbmNlTWVtb3J5U3RyYXRlZ3kge1xuTmFtZTogTmFtZVxuRGVzY3JpcHRpb24/OiBEZXNjcmlwdGlvblxuTmFtZXNwYWNlcz86IE5hbWVzcGFjZXNMaXN0XG4vKipcbiAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbWVtb3J5IHN0cmF0ZWd5XG4gKi9cblN0cmF0ZWd5SWQ/OiBzdHJpbmdcbi8qKlxuICogVHlwZSBvZiBtZW1vcnkgc3RyYXRlZ3lcbiAqL1xuVHlwZT86IChcIlNFTUFOVElDXCIgfCBcIlNVTU1BUklaQVRJT05cIiB8IFwiVVNFUl9QUkVGRVJFTkNFXCIgfCBcIkNVU1RPTVwiKVxuLyoqXG4gKiBTdGF0dXMgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICovXG5TdGF0dXM/OiAoXCJDUkVBVElOR1wiIHwgXCJBQ1RJVkVcIiB8IFwiREVMRVRJTkdcIiB8IFwiRkFJTEVEXCIpXG4vKipcbiAqIENyZWF0aW9uIHRpbWVzdGFtcCBvZiB0aGUgbWVtb3J5IHN0cmF0ZWd5XG4gKi9cbkNyZWF0ZWRBdD86IHN0cmluZ1xuLyoqXG4gKiBMYXN0IHVwZGF0ZSB0aW1lc3RhbXAgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICovXG5VcGRhdGVkQXQ/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tTWVtb3J5U3RyYXRlZ3kge1xuTmFtZTogTmFtZVxuRGVzY3JpcHRpb24/OiBEZXNjcmlwdGlvblxuTmFtZXNwYWNlcz86IE5hbWVzcGFjZXNMaXN0XG5Db25maWd1cmF0aW9uPzogQ3VzdG9tQ29uZmlndXJhdGlvbklucHV0XG4vKipcbiAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbWVtb3J5IHN0cmF0ZWd5XG4gKi9cblN0cmF0ZWd5SWQ/OiBzdHJpbmdcbi8qKlxuICogVHlwZSBvZiBtZW1vcnkgc3RyYXRlZ3lcbiAqL1xuVHlwZT86IChcIlNFTUFOVElDXCIgfCBcIlNVTU1BUklaQVRJT05cIiB8IFwiVVNFUl9QUkVGRVJFTkNFXCIgfCBcIkNVU1RPTVwiKVxuLyoqXG4gKiBTdGF0dXMgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICovXG5TdGF0dXM/OiAoXCJDUkVBVElOR1wiIHwgXCJBQ1RJVkVcIiB8IFwiREVMRVRJTkdcIiB8IFwiRkFJTEVEXCIpXG4vKipcbiAqIENyZWF0aW9uIHRpbWVzdGFtcCBvZiB0aGUgbWVtb3J5IHN0cmF0ZWd5XG4gKi9cbkNyZWF0ZWRBdD86IHN0cmluZ1xuLyoqXG4gKiBMYXN0IHVwZGF0ZSB0aW1lc3RhbXAgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICovXG5VcGRhdGVkQXQ/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tQ29uZmlndXJhdGlvbklucHV0IHtcblNlbWFudGljT3ZlcnJpZGU/OiBTZW1hbnRpY092ZXJyaWRlXG5TdW1tYXJ5T3ZlcnJpZGU/OiBTdW1tYXJ5T3ZlcnJpZGVcblVzZXJQcmVmZXJlbmNlT3ZlcnJpZGU/OiBVc2VyUHJlZmVyZW5jZU92ZXJyaWRlXG5TZWxmTWFuYWdlZENvbmZpZ3VyYXRpb24/OiBTZWxmTWFuYWdlZENvbmZpZ3VyYXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNPdmVycmlkZSB7XG5FeHRyYWN0aW9uPzogU2VtYW50aWNPdmVycmlkZUV4dHJhY3Rpb25Db25maWd1cmF0aW9uSW5wdXRcbkNvbnNvbGlkYXRpb24/OiBTZW1hbnRpY092ZXJyaWRlQ29uc29saWRhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dFxufVxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY092ZXJyaWRlRXh0cmFjdGlvbkNvbmZpZ3VyYXRpb25JbnB1dCB7XG5BcHBlbmRUb1Byb21wdDogUHJvbXB0XG5Nb2RlbElkOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNPdmVycmlkZUNvbnNvbGlkYXRpb25Db25maWd1cmF0aW9uSW5wdXQge1xuQXBwZW5kVG9Qcm9tcHQ6IFByb21wdFxuTW9kZWxJZDogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFN1bW1hcnlPdmVycmlkZSB7XG5Db25zb2xpZGF0aW9uPzogU3VtbWFyeU92ZXJyaWRlQ29uc29saWRhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dFxufVxuZXhwb3J0IGludGVyZmFjZSBTdW1tYXJ5T3ZlcnJpZGVDb25zb2xpZGF0aW9uQ29uZmlndXJhdGlvbklucHV0IHtcbkFwcGVuZFRvUHJvbXB0OiBQcm9tcHRcbk1vZGVsSWQ6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBVc2VyUHJlZmVyZW5jZU92ZXJyaWRlIHtcbkV4dHJhY3Rpb24/OiBVc2VyUHJlZmVyZW5jZU92ZXJyaWRlRXh0cmFjdGlvbkNvbmZpZ3VyYXRpb25JbnB1dFxuQ29uc29saWRhdGlvbj86IFVzZXJQcmVmZXJlbmNlT3ZlcnJpZGVDb25zb2xpZGF0aW9uQ29uZmlndXJhdGlvbklucHV0XG59XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcmVmZXJlbmNlT3ZlcnJpZGVFeHRyYWN0aW9uQ29uZmlndXJhdGlvbklucHV0IHtcbkFwcGVuZFRvUHJvbXB0OiBQcm9tcHRcbk1vZGVsSWQ6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBVc2VyUHJlZmVyZW5jZU92ZXJyaWRlQ29uc29saWRhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dCB7XG5BcHBlbmRUb1Byb21wdDogUHJvbXB0XG5Nb2RlbElkOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZk1hbmFnZWRDb25maWd1cmF0aW9uIHtcblRyaWdnZXJDb25kaXRpb25zPzogVHJpZ2dlckNvbmRpdGlvbkxpc3Rcbkludm9jYXRpb25Db25maWd1cmF0aW9uPzogSW52b2NhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dFxuSGlzdG9yaWNhbENvbnRleHRXaW5kb3dTaXplPzogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIFRyaWdnZXJDb25kaXRpb25JbnB1dCB7XG5NZXNzYWdlQmFzZWRUcmlnZ2VyPzogTWVzc2FnZUJhc2VkVHJpZ2dlcklucHV0XG5Ub2tlbkJhc2VkVHJpZ2dlcj86IFRva2VuQmFzZWRUcmlnZ2VySW5wdXRcblRpbWVCYXNlZFRyaWdnZXI/OiBUaW1lQmFzZWRUcmlnZ2VySW5wdXRcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUJhc2VkVHJpZ2dlcklucHV0IHtcbk1lc3NhZ2VDb3VudD86IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBUb2tlbkJhc2VkVHJpZ2dlcklucHV0IHtcblRva2VuQ291bnQ/OiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGltZUJhc2VkVHJpZ2dlcklucHV0IHtcbklkbGVTZXNzaW9uVGltZW91dD86IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBJbnZvY2F0aW9uQ29uZmlndXJhdGlvbklucHV0IHtcblRvcGljQXJuPzogQXJuXG5QYXlsb2FkRGVsaXZlcnlCdWNrZXROYW1lPzogc3RyaW5nXG59XG4vKipcbiAqIEEgbWFwIG9mIHRhZyBrZXlzIGFuZCB2YWx1ZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdzTWFwIHtcbi8qKlxuICogVmFsdWUgb2YgYSB0YWdcbiAqIFxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYFRhZ3NNYXBgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIl5bYS16QS1aMC05XFxzLl86Lz0rQC1dezEsMTI4fSRcIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuIl19
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1jbHVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1jbHVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpDbHVzdGVyYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgY2x1c3Rlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19DTFVTVEVSIHtcbi8qKlxuICogVGhlIHNldHRpbmdzIHRvIHVzZSB3aGVuIGNyZWF0aW5nIGEgY2x1c3Rlci4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dXJuIG9uIENsb3VkV2F0Y2ggQ29udGFpbmVyIEluc2lnaHRzIHdpdGggZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBvciBDbG91ZFdhdGNoIENvbnRhaW5lciBJbnNpZ2h0cyBmb3IgYSBjbHVzdGVyLlxuICogIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHkgcHJvdmlkZXMgYWxsIHRoZSBDb250YWluZXIgSW5zaWdodHMgbWV0cmljcywgcGx1cyBhZGRpdGlvbmFsIHRhc2sgYW5kIGNvbnRhaW5lciBtZXRyaWNzLiBUaGlzIHZlcnNpb24gc3VwcG9ydHMgZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBmb3IgQW1hem9uIEVDUyBjbHVzdGVycyB1c2luZyB0aGUgQW1hem9uIEVDMiBhbmQgRmFyZ2F0ZSBsYXVuY2ggdHlwZXMuIEFmdGVyIHlvdSBjb25maWd1cmUgQ29udGFpbmVyIEluc2lnaHRzIHdpdGggZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBvbiBBbWF6b24gRUNTLCBDb250YWluZXIgSW5zaWdodHMgYXV0by1jb2xsZWN0cyBkZXRhaWxlZCBpbmZyYXN0cnVjdHVyZSB0ZWxlbWV0cnkgZnJvbSB0aGUgY2x1c3RlciBsZXZlbCBkb3duIHRvIHRoZSBjb250YWluZXIgbGV2ZWwgaW4geW91ciBlbnZpcm9ubWVudCBhbmQgZGlzcGxheXMgdGhlc2UgY3JpdGljYWwgcGVyZm9ybWFuY2UgZGF0YSBpbiBjdXJhdGVkIGRhc2hib2FyZHMgcmVtb3ZpbmcgdGhlIGhlYXZ5IGxpZnRpbmcgaW4gb2JzZXJ2YWJpbGl0eSBzZXQtdXAuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01vbml0b3IgQW1hem9uIEVDUyBjb250YWluZXJzIHVzaW5nIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Nsb3Vkd2F0Y2gtY29udGFpbmVyLWluc2lnaHRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ2x1c3RlclNldHRpbmdzPzogQ2x1c3RlclNldHRpbmdzW11cbi8qKlxuICogVGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgZm9yIHRoZSBjbHVzdGVyLiBXaGVuIHNlcnZpY2VzIG9yIHRhc2tzIGFyZSBydW4gaW4gdGhlIGNsdXN0ZXIgd2l0aCBubyBsYXVuY2ggdHlwZSBvciBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGlzIHVzZWQuXG4gKi9cbkRlZmF1bHRDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbkNvbmZpZ3VyYXRpb24/OiBDbHVzdGVyQ29uZmlndXJhdGlvblxuU2VydmljZUNvbm5lY3REZWZhdWx0cz86IFNlcnZpY2VDb25uZWN0RGVmYXVsdHNcbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb2Ygb25lIG9yIG1vcmUgY2FwYWNpdHkgcHJvdmlkZXJzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBjbHVzdGVyLiBBIGNhcGFjaXR5IHByb3ZpZGVyIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBiZWZvcmUgaXQgY2FuIGJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgb2YgdGhlIGNsdXN0ZXIgb3IgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHdoZW4gY2FsbGluZyB0aGUgW0NyZWF0ZVNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sKSBvciBbUnVuVGFza10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SdW5UYXNrLmh0bWwpIGFjdGlvbnMuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGJlIGNyZWF0ZWQgYnV0IG5vdCBhc3NvY2lhdGVkIHdpdGggYW5vdGhlciBjbHVzdGVyLiBOZXcgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBbQ3JlYXRlQ2FwYWNpdHlQcm92aWRlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDYXBhY2l0eVByb3ZpZGVyLmh0bWwpIEFQSSBvcGVyYXRpb24uXG4gKiAgVG8gdXNlIGEgRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZC5cbiAqICBUaGUgW1B1dENhcGFjaXR5UHJvdmlkZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0Q2FwYWNpdHlQcm92aWRlci5odG1sKSBBUEkgb3BlcmF0aW9uIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjYXBhY2l0eSBwcm92aWRlcnMgZm9yIGEgY2x1c3RlciBhZnRlciB0aGUgY2x1c3RlciBpcyBjcmVhdGVkLlxuICovXG5DYXBhY2l0eVByb3ZpZGVycz86IHN0cmluZ1tdXG4vKipcbiAqIEEgdXNlci1nZW5lcmF0ZWQgc3RyaW5nIHRoYXQgeW91IHVzZSB0byBpZGVudGlmeSB5b3VyIGNsdXN0ZXIuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgbmFtZSwgQ0ZObG9uZyBnZW5lcmF0ZXMgYSB1bmlxdWUgcGh5c2ljYWwgSUQgZm9yIHRoZSBuYW1lLlxuICovXG5DbHVzdGVyTmFtZT86IHN0cmluZ1xuQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byB0aGUgY2x1c3RlciB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgYm90aC5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogVGhlIHNldHRpbmdzIHRvIHVzZSB3aGVuIGNyZWF0aW5nIGEgY2x1c3Rlci4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dXJuIG9uIENsb3VkV2F0Y2ggQ29udGFpbmVyIEluc2lnaHRzIHdpdGggZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBvciBDbG91ZFdhdGNoIENvbnRhaW5lciBJbnNpZ2h0cyBmb3IgYSBjbHVzdGVyLlxuICogIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHkgcHJvdmlkZXMgYWxsIHRoZSBDb250YWluZXIgSW5zaWdodHMgbWV0cmljcywgcGx1cyBhZGRpdGlvbmFsIHRhc2sgYW5kIGNvbnRhaW5lciBtZXRyaWNzLiBUaGlzIHZlcnNpb24gc3VwcG9ydHMgZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBmb3IgQW1hem9uIEVDUyBjbHVzdGVycyB1c2luZyB0aGUgQW1hem9uIEVDMiBhbmQgRmFyZ2F0ZSBsYXVuY2ggdHlwZXMuIEFmdGVyIHlvdSBjb25maWd1cmUgQ29udGFpbmVyIEluc2lnaHRzIHdpdGggZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBvbiBBbWF6b24gRUNTLCBDb250YWluZXIgSW5zaWdodHMgYXV0by1jb2xsZWN0cyBkZXRhaWxlZCBpbmZyYXN0cnVjdHVyZSB0ZWxlbWV0cnkgZnJvbSB0aGUgY2x1c3RlciBsZXZlbCBkb3duIHRvIHRoZSBjb250YWluZXIgbGV2ZWwgaW4geW91ciBlbnZpcm9ubWVudCBhbmQgZGlzcGxheXMgdGhlc2UgY3JpdGljYWwgcGVyZm9ybWFuY2UgZGF0YSBpbiBjdXJhdGVkIGRhc2hib2FyZHMgcmVtb3ZpbmcgdGhlIGhlYXZ5IGxpZnRpbmcgaW4gb2JzZXJ2YWJpbGl0eSBzZXQtdXAuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01vbml0b3IgQW1hem9uIEVDUyBjb250YWluZXJzIHVzaW5nIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Nsb3Vkd2F0Y2gtY29udGFpbmVyLWluc2lnaHRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyU2V0dGluZ3Mge1xuLyoqXG4gKiBUaGUgdmFsdWUgdG8gc2V0IGZvciB0aGUgY2x1c3RlciBzZXR0aW5nLiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgYGBlbmhhbmNlZGBgLCBgYGVuYWJsZWRgYCwgYW5kIGBgZGlzYWJsZWRgYC4gXG4gKiAgVG8gdXNlIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHksIHNldCB0aGUgYGBjb250YWluZXJJbnNpZ2h0c2BgIGFjY291bnQgc2V0dGluZyB0byBgYGVuaGFuY2VkYGAuXG4gKiAgVG8gdXNlIENvbnRhaW5lciBJbnNpZ2h0cywgc2V0IHRoZSBgYGNvbnRhaW5lckluc2lnaHRzYGAgYWNjb3VudCBzZXR0aW5nIHRvIGBgZW5hYmxlZGBgLlxuICogIElmIGEgY2x1c3RlciB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgb3ZlcnJpZGUgdGhlIGBgY29udGFpbmVySW5zaWdodHNgYCB2YWx1ZSBzZXQgd2l0aCBbUHV0QWNjb3VudFNldHRpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0QWNjb3VudFNldHRpbmcuaHRtbCkgb3IgW1B1dEFjY291bnRTZXR0aW5nRGVmYXVsdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXRBY2NvdW50U2V0dGluZ0RlZmF1bHQuaHRtbCkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjbHVzdGVyIHNldHRpbmcuIFRoZSB2YWx1ZSBpcyBgYGNvbnRhaW5lckluc2lnaHRzYGAgLlxuICovXG5OYW1lPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW1gYCBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIGRldGFpbHMgb2YgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgZm9yIHRoZSBjbHVzdGVyLiBXaGVuIHNlcnZpY2VzIG9yIHRhc2tzIGFyZSBydW4gaW4gdGhlIGNsdXN0ZXIgd2l0aCBubyBsYXVuY2ggdHlwZSBvciBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGlzIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbSB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlci5cbiAqL1xuQ2FwYWNpdHlQcm92aWRlcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgKndlaWdodCogdmFsdWUgZGVzaWduYXRlcyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzIGxhdW5jaGVkIHRoYXQgc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBUaGUgYGB3ZWlnaHRgYCB2YWx1ZSBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYWZ0ZXIgdGhlIGBgYmFzZWBgIHZhbHVlLCBpZiBkZWZpbmVkLCBpcyBzYXRpc2ZpZWQuXG4gKiAgSWYgbm8gYGB3ZWlnaHRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIFdoZW4gbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3ksIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSBhIHdlaWdodCB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYW55IGNhcGFjaXR5IHByb3ZpZGVycyB3aXRoIGEgd2VpZ2h0IG9mIGBgMGBgIGNhbid0IGJlIHVzZWQgdG8gcGxhY2UgdGFza3MuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBpbiBhIHN0cmF0ZWd5IHRoYXQgYWxsIGhhdmUgYSB3ZWlnaHQgb2YgYGAwYGAsIGFueSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBhY3Rpb25zIHVzaW5nIHRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB3aWxsIGZhaWwuXG4gKiAgV2VpZ2h0IHZhbHVlIGNoYXJhY3RlcmlzdGljczpcbiAqICAgKyAgV2VpZ2h0IGlzIGNvbnNpZGVyZWQgYWZ0ZXIgdGhlIGJhc2UgdmFsdWUgaXMgc2F0aXNmaWVkXG4gKiAgICsgIERlZmF1bHQgdmFsdWUgaXMgYGAwYGAgaWYgbm90IHNwZWNpZmllZFxuICogICArICBWYWxpZCByYW5nZTogMCB0byAxLDAwMFxuICogICArICBBdCBsZWFzdCBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgbXVzdCBoYXZlIGEgd2VpZ2h0IGdyZWF0ZXIgdGhhbiB6ZXJvXG4gKiAgICsgIENhcGFjaXR5IHByb3ZpZGVycyB3aXRoIHdlaWdodCBvZiBgYDBgYCBjYW5ub3QgcGxhY2UgdGFza3NcbiAqICAgXG4gKiAgVGFzayBkaXN0cmlidXRpb24gbG9naWM6XG4gKiAgIDEuICBCYXNlIHNhdGlzZmFjdGlvbjogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHRhc2tzIHNwZWNpZmllZCBieSB0aGUgYmFzZSB2YWx1ZSBhcmUgcGxhY2VkIG9uIHRoYXQgY2FwYWNpdHkgcHJvdmlkZXJcbiAqICAgMS4gIFdlaWdodCBkaXN0cmlidXRpb246IEFmdGVyIGJhc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGFkZGl0aW9uYWwgdGFza3MgYXJlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB3ZWlnaHQgcmF0aW9zXG4gKiAgIFxuICogIEV4YW1wbGVzOlxuICogIEVxdWFsIERpc3RyaWJ1dGlvbjogVHdvIGNhcGFjaXR5IHByb3ZpZGVycyBib3RoIHdpdGggd2VpZ2h0IGBgMWBgIHdpbGwgc3BsaXQgdGFza3MgZXZlbmx5IGFmdGVyIGJhc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQuXG4gKiAgV2VpZ2h0ZWQgRGlzdHJpYnV0aW9uOiBJZiBjYXBhY2l0eVByb3ZpZGVyQSBoYXMgd2VpZ2h0IGBgMWBgIGFuZCBjYXBhY2l0eVByb3ZpZGVyQiBoYXMgd2VpZ2h0IGBgNGBgLCB0aGVuIGZvciBldmVyeSAxIHRhc2sgb24gQSwgNCB0YXNrcyB3aWxsIHJ1biBvbiBCLlxuICovXG5XZWlnaHQ/OiBudW1iZXJcbi8qKlxuICogVGhlICpiYXNlKiB2YWx1ZSBkZXNpZ25hdGVzIGhvdyBtYW55IHRhc2tzLCBhdCBhIG1pbmltdW0sIHRvIHJ1biBvbiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyIGZvciBlYWNoIHNlcnZpY2UuIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGhhdmUgYSAqYmFzZSogZGVmaW5lZC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICogIEJhc2UgdmFsdWUgY2hhcmFjdGVyaXN0aWNzOlxuICogICArICBPbmx5IG9uZSBjYXBhY2l0eSBwcm92aWRlciBpbiBhIHN0cmF0ZWd5IGNhbiBoYXZlIGEgYmFzZSBkZWZpbmVkXG4gKiAgICsgIERlZmF1bHQgdmFsdWUgaXMgYGAwYGAgaWYgbm90IHNwZWNpZmllZFxuICogICArICBWYWxpZCByYW5nZTogMCB0byAxMDAsMDAwXG4gKiAgICsgIEJhc2UgcmVxdWlyZW1lbnRzIGFyZSBzYXRpc2ZpZWQgZmlyc3QgYmVmb3JlIHdlaWdodCBkaXN0cmlidXRpb25cbiAqL1xuQmFzZT86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgZXhlY3V0ZSBjb21tYW5kIGFuZCBtYW5hZ2VkIHN0b3JhZ2UgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlckNvbmZpZ3VyYXRpb24ge1xuTWFuYWdlZFN0b3JhZ2VDb25maWd1cmF0aW9uPzogTWFuYWdlZFN0b3JhZ2VDb25maWd1cmF0aW9uXG5FeGVjdXRlQ29tbWFuZENvbmZpZ3VyYXRpb24/OiBFeGVjdXRlQ29tbWFuZENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIGRldGFpbHMgb2YgdGhlIG1hbmFnZWQgc3RvcmFnZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRTdG9yYWdlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFNwZWNpZnkgdGhlIEtNU2xvbmcga2V5IElEIGZvciBGYXJnYXRlIGVwaGVtZXJhbCBzdG9yYWdlLlxuICogIFdoZW4geW91IHNwZWNpZnkgYSBgYGZhcmdhdGVFcGhlbWVyYWxTdG9yYWdlS21zS2V5SWRgYCwgQVdTIEZhcmdhdGUgdXNlcyB0aGUga2V5IHRvIGVuY3J5cHQgZGF0YSBhdCByZXN0IGluIGVwaGVtZXJhbCBzdG9yYWdlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBGYXJnYXRlIGVwaGVtZXJhbCBzdG9yYWdlIGVuY3J5cHRpb24sIHNlZSBbQ3VzdG9tZXIgbWFuYWdlZCBrZXlzIGZvciBGYXJnYXRlIGVwaGVtZXJhbCBzdG9yYWdlIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9mYXJnYXRlLXN0b3JhZ2UtZW5jcnlwdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIGtleSBtdXN0IGJlIGEgc2luZ2xlIFJlZ2lvbiBrZXkuXG4gKi9cbkZhcmdhdGVFcGhlbWVyYWxTdG9yYWdlS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmeSBhIEtNU2xvbmcga2V5IElEIHRvIGVuY3J5cHQgQW1hem9uIEVDUyBtYW5hZ2VkIHN0b3JhZ2UuXG4gKiAgIFdoZW4geW91IHNwZWNpZnkgYSBgYGttc0tleUlkYGAsIEFtYXpvbiBFQ1MgdXNlcyB0aGUga2V5IHRvIGVuY3J5cHQgZGF0YSB2b2x1bWVzIG1hbmFnZWQgYnkgQW1hem9uIEVDUyB0aGF0IGFyZSBhdHRhY2hlZCB0byB0YXNrcyBpbiB0aGUgY2x1c3Rlci4gVGhlIGZvbGxvd2luZyBkYXRhIHZvbHVtZXMgYXJlIG1hbmFnZWQgYnkgQW1hem9uIEVDUzogQW1hem9uIEVCUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZW5jcnlwdGlvbiBvZiBBbWF6b24gRUJTIHZvbHVtZXMgYXR0YWNoZWQgdG8gQW1hem9uIEVDUyB0YXNrcywgc2VlIFtFbmNyeXB0IGRhdGEgc3RvcmVkIGluIEFtYXpvbiBFQlMgdm9sdW1lcyBmb3IgQW1hem9uIEVDU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWJzLWttcy1lbmNyeXB0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUga2V5IG11c3QgYmUgYSBzaW5nbGUgUmVnaW9uIGtleS5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgb2YgdGhlIGV4ZWN1dGUgY29tbWFuZCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVDb21tYW5kQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBsb2cgc2V0dGluZyB0byB1c2UgZm9yIHJlZGlyZWN0aW5nIGxvZ3MgZm9yIHlvdXIgZXhlY3V0ZSBjb21tYW5kIHJlc3VsdHMuIFRoZSBmb2xsb3dpbmcgbG9nIHNldHRpbmdzIGFyZSBhdmFpbGFibGUuXG4gKiAgICsgIGBgTk9ORWBgOiBUaGUgZXhlY3V0ZSBjb21tYW5kIHNlc3Npb24gaXMgbm90IGxvZ2dlZC5cbiAqICAgKyAgYGBERUZBVUxUYGA6IFRoZSBgYGF3c2xvZ3NgYCBjb25maWd1cmF0aW9uIGluIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZC4gSWYgbm8gbG9nZ2luZyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byB0aGlzIHZhbHVlLiBJZiBubyBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiwgdGhlIG91dHB1dCB3b24ndCBiZSBsb2dnZWQuXG4gKiAgICsgIGBgT1ZFUlJJREVgYDogU3BlY2lmeSB0aGUgbG9nZ2luZyBkZXRhaWxzIGFzIGEgcGFydCBvZiBgYGxvZ0NvbmZpZ3VyYXRpb25gYC4gSWYgdGhlIGBgT1ZFUlJJREVgYCBsb2dnaW5nIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBgYGxvZ0NvbmZpZ3VyYXRpb25gYCBpcyByZXF1aXJlZC5cbiAqL1xuTG9nZ2luZz86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZ5IGFuIEtNU2xvbmcga2V5IElEIHRvIGVuY3J5cHQgdGhlIGRhdGEgYmV0d2VlbiB0aGUgbG9jYWwgY2xpZW50IGFuZCB0aGUgY29udGFpbmVyLlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuTG9nQ29uZmlndXJhdGlvbj86IEV4ZWN1dGVDb21tYW5kTG9nQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSByZXN1bHRzIG9mIHRoZSBleGVjdXRlIGNvbW1hbmQgYWN0aW9ucy4gVGhlIGxvZ3MgY2FuIGJlIHNlbnQgdG8gQ2xvdWRXYXRjaCBMb2dzIG9yIGFuIEFtYXpvbiBTMyBidWNrZXQuIFdoZW4gYGBsb2dnaW5nPU9WRVJSSURFYGAgaXMgc3BlY2lmaWVkLCBhIGBgbG9nQ29uZmlndXJhdGlvbmBgIG11c3QgYmUgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRMb2dDb25maWd1cmF0aW9uIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSBlbmNyeXB0aW9uIG9uIHRoZSBTMyBsb2dzLiBJZiBub3Qgc3BlY2lmaWVkLCBlbmNyeXB0aW9uIGlzIG5vdCB1c2VkLlxuICovXG5TM0VuY3J5cHRpb25FbmFibGVkPzogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIGVuY3J5cHRpb24gb24gdGhlIENsb3VkV2F0Y2ggbG9ncy4gSWYgbm90IHNwZWNpZmllZCwgZW5jcnlwdGlvbiB3aWxsIGJlIG9mZi5cbiAqL1xuQ2xvdWRXYXRjaEVuY3J5cHRpb25FbmFibGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgdG8gc2VuZCBsb2dzIHRvLlxuICogICBUaGUgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgbXVzdCBhbHJlYWR5IGJlIGNyZWF0ZWQuXG4gKi9cbkNsb3VkV2F0Y2hMb2dHcm91cE5hbWU/OiBzdHJpbmdcbi8qKlxuICogQW4gb3B0aW9uYWwgZm9sZGVyIGluIHRoZSBTMyBidWNrZXQgdG8gcGxhY2UgbG9ncyBpbi5cbiAqL1xuUzNLZXlQcmVmaXg/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIFMzIGJ1Y2tldCB0byBzZW5kIGxvZ3MgdG8uXG4gKiAgIFRoZSBTMyBidWNrZXQgbXVzdCBhbHJlYWR5IGJlIGNyZWF0ZWQuXG4gKi9cblMzQnVja2V0TmFtZT86IHN0cmluZ1xufVxuLyoqXG4gKiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gc2V0IGEgZGVmYXVsdCBTZXJ2aWNlIENvbm5lY3QgbmFtZXNwYWNlLiBBZnRlciB5b3Ugc2V0IGEgZGVmYXVsdCBTZXJ2aWNlIENvbm5lY3QgbmFtZXNwYWNlLCBhbnkgbmV3IHNlcnZpY2VzIHdpdGggU2VydmljZSBDb25uZWN0IHR1cm5lZCBvbiB0aGF0IGFyZSBjcmVhdGVkIGluIHRoZSBjbHVzdGVyIGFyZSBhZGRlZCBhcyBjbGllbnQgc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGhpcyBzZXR0aW5nIG9ubHkgYXBwbGllcyB0byBuZXcgc2VydmljZXMgdGhhdCBzZXQgdGhlIGBgZW5hYmxlZGBgIHBhcmFtZXRlciB0byBgYHRydWVgYCBpbiB0aGUgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYC4gWW91IGNhbiBzZXQgdGhlIG5hbWVzcGFjZSBvZiBlYWNoIHNlcnZpY2UgaW5kaXZpZHVhbGx5IGluIHRoZSBgYFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbmBgIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBwYXJhbWV0ZXIuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0RGVmYXVsdHMge1xuLyoqXG4gKiBUaGUgbmFtZXNwYWNlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQ01BUGxvbmcgbmFtZXNwYWNlIHRoYXQncyB1c2VkIHdoZW4geW91IGNyZWF0ZSBhIHNlcnZpY2UgYW5kIGRvbid0IHNwZWNpZnkgYSBTZXJ2aWNlIENvbm5lY3QgY29uZmlndXJhdGlvbi4gVGhlIG5hbWVzcGFjZSBuYW1lIGNhbiBpbmNsdWRlIHVwIHRvIDEwMjQgY2hhcmFjdGVycy4gVGhlIG5hbWUgaXMgY2FzZS1zZW5zaXRpdmUuIFRoZSBuYW1lIGNhbid0IGluY2x1ZGUgZ3JlYXRlciB0aGFuICg+KSwgbGVzcyB0aGFuICg8KSwgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyAoXCIpLCBvciBzbGFzaCAoLykuXG4gKiAgSWYgeW91IGVudGVyIGFuIGV4aXN0aW5nIG5hbWVzcGFjZSBuYW1lIG9yIEFSTiwgdGhlbiB0aGF0IG5hbWVzcGFjZSB3aWxsIGJlIHVzZWQuIEFueSBuYW1lc3BhY2UgdHlwZSBpcyBzdXBwb3J0ZWQuIFRoZSBuYW1lc3BhY2UgbXVzdCBiZSBpbiB0aGlzIGFjY291bnQgYW5kIHRoaXMgQVdTIFJlZ2lvbi5cbiAqICBJZiB5b3UgZW50ZXIgYSBuZXcgbmFtZSwgYSBDTUFQbG9uZyBuYW1lc3BhY2Ugd2lsbCBiZSBjcmVhdGVkLiBBbWF6b24gRUNTIGNyZWF0ZXMgYSBDTUFQIG5hbWVzcGFjZSB3aXRoIHRoZSBcIkFQSSBjYWxsc1wiIG1ldGhvZCBvZiBpbnN0YW5jZSBkaXNjb3Zlcnkgb25seS4gVGhpcyBpbnN0YW5jZSBkaXNjb3ZlcnkgbWV0aG9kIGlzIHRoZSBcIkhUVFBcIiBuYW1lc3BhY2UgdHlwZSBpbiB0aGUgQ0xJbG9uZy4gT3RoZXIgdHlwZXMgb2YgaW5zdGFuY2UgZGlzY292ZXJ5IGFyZW4ndCB1c2VkIGJ5IFNlcnZpY2UgQ29ubmVjdC5cbiAqICBJZiB5b3UgdXBkYXRlIHRoZSBjbHVzdGVyIHdpdGggYW4gZW1wdHkgc3RyaW5nIGBgXCJcImBgIGZvciB0aGUgbmFtZXNwYWNlIG5hbWUsIHRoZSBjbHVzdGVyIGNvbmZpZ3VyYXRpb24gZm9yIFNlcnZpY2UgQ29ubmVjdCBpcyByZW1vdmVkLiBOb3RlIHRoYXQgdGhlIG5hbWVzcGFjZSB3aWxsIHJlbWFpbiBpbiBDTUFQIGFuZCBtdXN0IGJlIGRlbGV0ZWQgc2VwYXJhdGVseS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDTUFQbG9uZywgc2VlIFtXb3JraW5nIHdpdGggU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2RnL3dvcmtpbmctd2l0aC1zZXJ2aWNlcy5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKi9cbk5hbWVzcGFjZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gYSByZXNvdXJjZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgdGhlbS5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBvcHRpb25hbCBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBgdmFsdWVgYCBhY3RzIGFzIGEgZGVzY3JpcHRvciB3aXRoaW4gYSB0YWcgY2F0ZWdvcnkgKGtleSkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIE9uZSBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBga2V5YGAgaXMgYSBnZW5lcmFsIGxhYmVsIHRoYXQgYWN0cyBsaWtlIGEgY2F0ZWdvcnkgZm9yIG1vcmUgc3BlY2lmaWMgdGFnIHZhbHVlcy5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4iXX0=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1jbHVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1jbHVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpDbHVzdGVyYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgY2x1c3Rlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19DTFVTVEVSIHtcbi8qKlxuICogVGhlIHNldHRpbmdzIHRvIHVzZSB3aGVuIGNyZWF0aW5nIGEgY2x1c3Rlci4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dXJuIG9uIENsb3VkV2F0Y2ggQ29udGFpbmVyIEluc2lnaHRzIHdpdGggZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBvciBDbG91ZFdhdGNoIENvbnRhaW5lciBJbnNpZ2h0cyBmb3IgYSBjbHVzdGVyLlxuICogIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHkgcHJvdmlkZXMgYWxsIHRoZSBDb250YWluZXIgSW5zaWdodHMgbWV0cmljcywgcGx1cyBhZGRpdGlvbmFsIHRhc2sgYW5kIGNvbnRhaW5lciBtZXRyaWNzLiBUaGlzIHZlcnNpb24gc3VwcG9ydHMgZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBmb3IgQW1hem9uIEVDUyBjbHVzdGVycyB1c2luZyB0aGUgQW1hem9uIEVDMiBhbmQgRmFyZ2F0ZSBsYXVuY2ggdHlwZXMuIEFmdGVyIHlvdSBjb25maWd1cmUgQ29udGFpbmVyIEluc2lnaHRzIHdpdGggZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBvbiBBbWF6b24gRUNTLCBDb250YWluZXIgSW5zaWdodHMgYXV0by1jb2xsZWN0cyBkZXRhaWxlZCBpbmZyYXN0cnVjdHVyZSB0ZWxlbWV0cnkgZnJvbSB0aGUgY2x1c3RlciBsZXZlbCBkb3duIHRvIHRoZSBjb250YWluZXIgbGV2ZWwgaW4geW91ciBlbnZpcm9ubWVudCBhbmQgZGlzcGxheXMgdGhlc2UgY3JpdGljYWwgcGVyZm9ybWFuY2UgZGF0YSBpbiBjdXJhdGVkIGRhc2hib2FyZHMgcmVtb3ZpbmcgdGhlIGhlYXZ5IGxpZnRpbmcgaW4gb2JzZXJ2YWJpbGl0eSBzZXQtdXAuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01vbml0b3IgQW1hem9uIEVDUyBjb250YWluZXJzIHVzaW5nIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Nsb3Vkd2F0Y2gtY29udGFpbmVyLWluc2lnaHRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ2x1c3RlclNldHRpbmdzPzogQ2x1c3RlclNldHRpbmdzW11cbi8qKlxuICogVGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgZm9yIHRoZSBjbHVzdGVyLiBXaGVuIHNlcnZpY2VzIG9yIHRhc2tzIGFyZSBydW4gaW4gdGhlIGNsdXN0ZXIgd2l0aCBubyBsYXVuY2ggdHlwZSBvciBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGlzIHVzZWQuXG4gKi9cbkRlZmF1bHRDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbkNvbmZpZ3VyYXRpb24/OiBDbHVzdGVyQ29uZmlndXJhdGlvblxuU2VydmljZUNvbm5lY3REZWZhdWx0cz86IFNlcnZpY2VDb25uZWN0RGVmYXVsdHNcbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb2Ygb25lIG9yIG1vcmUgY2FwYWNpdHkgcHJvdmlkZXJzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBjbHVzdGVyLiBBIGNhcGFjaXR5IHByb3ZpZGVyIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBiZWZvcmUgaXQgY2FuIGJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgb2YgdGhlIGNsdXN0ZXIgb3IgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHdoZW4gY2FsbGluZyB0aGUgW0NyZWF0ZVNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sKSBvciBbUnVuVGFza10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SdW5UYXNrLmh0bWwpIGFjdGlvbnMuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGJlIGNyZWF0ZWQgYnV0IG5vdCBhc3NvY2lhdGVkIHdpdGggYW5vdGhlciBjbHVzdGVyLiBOZXcgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBbQ3JlYXRlQ2FwYWNpdHlQcm92aWRlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDYXBhY2l0eVByb3ZpZGVyLmh0bWwpIEFQSSBvcGVyYXRpb24uXG4gKiAgVG8gdXNlIGEgRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZC5cbiAqICBUaGUgW1B1dENhcGFjaXR5UHJvdmlkZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0Q2FwYWNpdHlQcm92aWRlci5odG1sKSBBUEkgb3BlcmF0aW9uIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjYXBhY2l0eSBwcm92aWRlcnMgZm9yIGEgY2x1c3RlciBhZnRlciB0aGUgY2x1c3RlciBpcyBjcmVhdGVkLlxuICovXG5DYXBhY2l0eVByb3ZpZGVycz86IHN0cmluZ1tdXG4vKipcbiAqIEEgdXNlci1nZW5lcmF0ZWQgc3RyaW5nIHRoYXQgeW91IHVzZSB0byBpZGVudGlmeSB5b3VyIGNsdXN0ZXIuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgbmFtZSwgQ0ZObG9uZyBnZW5lcmF0ZXMgYSB1bmlxdWUgcGh5c2ljYWwgSUQgZm9yIHRoZSBuYW1lLlxuICovXG5DbHVzdGVyTmFtZT86IHN0cmluZ1xuQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byB0aGUgY2x1c3RlciB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgYm90aC5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogVGhlIHNldHRpbmdzIHRvIHVzZSB3aGVuIGNyZWF0aW5nIGEgY2x1c3Rlci4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dXJuIG9uIENsb3VkV2F0Y2ggQ29udGFpbmVyIEluc2lnaHRzIHdpdGggZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBvciBDbG91ZFdhdGNoIENvbnRhaW5lciBJbnNpZ2h0cyBmb3IgYSBjbHVzdGVyLlxuICogIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHkgcHJvdmlkZXMgYWxsIHRoZSBDb250YWluZXIgSW5zaWdodHMgbWV0cmljcywgcGx1cyBhZGRpdGlvbmFsIHRhc2sgYW5kIGNvbnRhaW5lciBtZXRyaWNzLiBUaGlzIHZlcnNpb24gc3VwcG9ydHMgZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBmb3IgQW1hem9uIEVDUyBjbHVzdGVycyB1c2luZyB0aGUgQW1hem9uIEVDMiBhbmQgRmFyZ2F0ZSBsYXVuY2ggdHlwZXMuIEFmdGVyIHlvdSBjb25maWd1cmUgQ29udGFpbmVyIEluc2lnaHRzIHdpdGggZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eSBvbiBBbWF6b24gRUNTLCBDb250YWluZXIgSW5zaWdodHMgYXV0by1jb2xsZWN0cyBkZXRhaWxlZCBpbmZyYXN0cnVjdHVyZSB0ZWxlbWV0cnkgZnJvbSB0aGUgY2x1c3RlciBsZXZlbCBkb3duIHRvIHRoZSBjb250YWluZXIgbGV2ZWwgaW4geW91ciBlbnZpcm9ubWVudCBhbmQgZGlzcGxheXMgdGhlc2UgY3JpdGljYWwgcGVyZm9ybWFuY2UgZGF0YSBpbiBjdXJhdGVkIGRhc2hib2FyZHMgcmVtb3ZpbmcgdGhlIGhlYXZ5IGxpZnRpbmcgaW4gb2JzZXJ2YWJpbGl0eSBzZXQtdXAuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01vbml0b3IgQW1hem9uIEVDUyBjb250YWluZXJzIHVzaW5nIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Nsb3Vkd2F0Y2gtY29udGFpbmVyLWluc2lnaHRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyU2V0dGluZ3Mge1xuLyoqXG4gKiBUaGUgdmFsdWUgdG8gc2V0IGZvciB0aGUgY2x1c3RlciBzZXR0aW5nLiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgYGBlbmhhbmNlZGBgLCBgYGVuYWJsZWRgYCwgYW5kIGBgZGlzYWJsZWRgYC4gXG4gKiAgVG8gdXNlIENvbnRhaW5lciBJbnNpZ2h0cyB3aXRoIGVuaGFuY2VkIG9ic2VydmFiaWxpdHksIHNldCB0aGUgYGBjb250YWluZXJJbnNpZ2h0c2BgIGFjY291bnQgc2V0dGluZyB0byBgYGVuaGFuY2VkYGAuXG4gKiAgVG8gdXNlIENvbnRhaW5lciBJbnNpZ2h0cywgc2V0IHRoZSBgYGNvbnRhaW5lckluc2lnaHRzYGAgYWNjb3VudCBzZXR0aW5nIHRvIGBgZW5hYmxlZGBgLlxuICogIElmIGEgY2x1c3RlciB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgb3ZlcnJpZGUgdGhlIGBgY29udGFpbmVySW5zaWdodHNgYCB2YWx1ZSBzZXQgd2l0aCBbUHV0QWNjb3VudFNldHRpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0QWNjb3VudFNldHRpbmcuaHRtbCkgb3IgW1B1dEFjY291bnRTZXR0aW5nRGVmYXVsdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXRBY2NvdW50U2V0dGluZ0RlZmF1bHQuaHRtbCkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjbHVzdGVyIHNldHRpbmcuIFRoZSB2YWx1ZSBpcyBgYGNvbnRhaW5lckluc2lnaHRzYGAuXG4gKi9cbk5hbWU/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbWBgIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgZGV0YWlscyBvZiB0aGUgZGVmYXVsdCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBmb3IgdGhlIGNsdXN0ZXIuIFdoZW4gc2VydmljZXMgb3IgdGFza3MgYXJlIHJ1biBpbiB0aGUgY2x1c3RlciB3aXRoIG5vIGxhdW5jaCB0eXBlIG9yIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtIHtcbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVyLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSAqd2VpZ2h0KiB2YWx1ZSBkZXNpZ25hdGVzIHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MgbGF1bmNoZWQgdGhhdCBzaG91bGQgdXNlIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIFRoZSBgYHdlaWdodGBgIHZhbHVlIGlzIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBhZnRlciB0aGUgYGBiYXNlYGAgdmFsdWUsIGlmIGRlZmluZWQsIGlzIHNhdGlzZmllZC5cbiAqICBJZiBubyBgYHdlaWdodGBgIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC4gV2hlbiBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIHNwZWNpZmllZCB3aXRoaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlcnMgbXVzdCBoYXZlIGEgd2VpZ2h0IHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhbnkgY2FwYWNpdHkgcHJvdmlkZXJzIHdpdGggYSB3ZWlnaHQgb2YgYGAwYGAgY2FuJ3QgYmUgdXNlZCB0byBwbGFjZSB0YXNrcy4gSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGluIGEgc3RyYXRlZ3kgdGhhdCBhbGwgaGF2ZSBhIHdlaWdodCBvZiBgYDBgYCwgYW55IGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIGFjdGlvbnMgdXNpbmcgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHdpbGwgZmFpbC5cbiAqICBXZWlnaHQgdmFsdWUgY2hhcmFjdGVyaXN0aWNzOlxuICogICArICBXZWlnaHQgaXMgY29uc2lkZXJlZCBhZnRlciB0aGUgYmFzZSB2YWx1ZSBpcyBzYXRpc2ZpZWRcbiAqICAgKyAgRGVmYXVsdCB2YWx1ZSBpcyBgYDBgYCBpZiBub3Qgc3BlY2lmaWVkXG4gKiAgICsgIFZhbGlkIHJhbmdlOiAwIHRvIDEsMDAwXG4gKiAgICsgIEF0IGxlYXN0IG9uZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGhhdmUgYSB3ZWlnaHQgZ3JlYXRlciB0aGFuIHplcm9cbiAqICAgKyAgQ2FwYWNpdHkgcHJvdmlkZXJzIHdpdGggd2VpZ2h0IG9mIGBgMGBgIGNhbm5vdCBwbGFjZSB0YXNrc1xuICogICBcbiAqICBUYXNrIGRpc3RyaWJ1dGlvbiBsb2dpYzpcbiAqICAgMS4gIEJhc2Ugc2F0aXNmYWN0aW9uOiBUaGUgbWluaW11bSBudW1iZXIgb2YgdGFza3Mgc3BlY2lmaWVkIGJ5IHRoZSBiYXNlIHZhbHVlIGFyZSBwbGFjZWQgb24gdGhhdCBjYXBhY2l0eSBwcm92aWRlclxuICogICAxLiAgV2VpZ2h0IGRpc3RyaWJ1dGlvbjogQWZ0ZXIgYmFzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgYWRkaXRpb25hbCB0YXNrcyBhcmUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHdlaWdodCByYXRpb3NcbiAqICAgXG4gKiAgRXhhbXBsZXM6XG4gKiAgRXF1YWwgRGlzdHJpYnV0aW9uOiBUd28gY2FwYWNpdHkgcHJvdmlkZXJzIGJvdGggd2l0aCB3ZWlnaHQgYGAxYGAgd2lsbCBzcGxpdCB0YXNrcyBldmVubHkgYWZ0ZXIgYmFzZSByZXF1aXJlbWVudHMgYXJlIG1ldC5cbiAqICBXZWlnaHRlZCBEaXN0cmlidXRpb246IElmIGNhcGFjaXR5UHJvdmlkZXJBIGhhcyB3ZWlnaHQgYGAxYGAgYW5kIGNhcGFjaXR5UHJvdmlkZXJCIGhhcyB3ZWlnaHQgYGA0YGAsIHRoZW4gZm9yIGV2ZXJ5IDEgdGFzayBvbiBBLCA0IHRhc2tzIHdpbGwgcnVuIG9uIEIuXG4gKi9cbldlaWdodD86IG51bWJlclxuLyoqXG4gKiBUaGUgKmJhc2UqIHZhbHVlIGRlc2lnbmF0ZXMgaG93IG1hbnkgdGFza3MsIGF0IGEgbWluaW11bSwgdG8gcnVuIG9uIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIgZm9yIGVhY2ggc2VydmljZS4gT25seSBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gaGF2ZSBhICpiYXNlKiBkZWZpbmVkLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuXG4gKiAgQmFzZSB2YWx1ZSBjaGFyYWN0ZXJpc3RpY3M6XG4gKiAgICsgIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgc3RyYXRlZ3kgY2FuIGhhdmUgYSBiYXNlIGRlZmluZWRcbiAqICAgKyAgRGVmYXVsdCB2YWx1ZSBpcyBgYDBgYCBpZiBub3Qgc3BlY2lmaWVkXG4gKiAgICsgIFZhbGlkIHJhbmdlOiAwIHRvIDEwMCwwMDBcbiAqICAgKyAgQmFzZSByZXF1aXJlbWVudHMgYXJlIHNhdGlzZmllZCBmaXJzdCBiZWZvcmUgd2VpZ2h0IGRpc3RyaWJ1dGlvblxuICovXG5CYXNlPzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBleGVjdXRlIGNvbW1hbmQgYW5kIG1hbmFnZWQgc3RvcmFnZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2x1c3Rlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyQ29uZmlndXJhdGlvbiB7XG5NYW5hZ2VkU3RvcmFnZUNvbmZpZ3VyYXRpb24/OiBNYW5hZ2VkU3RvcmFnZUNvbmZpZ3VyYXRpb25cbkV4ZWN1dGVDb21tYW5kQ29uZmlndXJhdGlvbj86IEV4ZWN1dGVDb21tYW5kQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiB0aGUgbWFuYWdlZCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZFN0b3JhZ2VDb25maWd1cmF0aW9uIHtcbi8qKlxuICogU3BlY2lmeSB0aGUgS01TbG9uZyBrZXkgSUQgZm9yIEZhcmdhdGUgZXBoZW1lcmFsIHN0b3JhZ2UuXG4gKiAgV2hlbiB5b3Ugc3BlY2lmeSBhIGBgZmFyZ2F0ZUVwaGVtZXJhbFN0b3JhZ2VLbXNLZXlJZGBgLCBBV1MgRmFyZ2F0ZSB1c2VzIHRoZSBrZXkgdG8gZW5jcnlwdCBkYXRhIGF0IHJlc3QgaW4gZXBoZW1lcmFsIHN0b3JhZ2UuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEZhcmdhdGUgZXBoZW1lcmFsIHN0b3JhZ2UgZW5jcnlwdGlvbiwgc2VlIFtDdXN0b21lciBtYW5hZ2VkIGtleXMgZm9yIEZhcmdhdGUgZXBoZW1lcmFsIHN0b3JhZ2UgZm9yIEFtYXpvbiBFQ1NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2ZhcmdhdGUtc3RvcmFnZS1lbmNyeXB0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUga2V5IG11c3QgYmUgYSBzaW5nbGUgUmVnaW9uIGtleS5cbiAqL1xuRmFyZ2F0ZUVwaGVtZXJhbFN0b3JhZ2VLbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZ5IGEgS01TbG9uZyBrZXkgSUQgdG8gZW5jcnlwdCBBbWF6b24gRUNTIG1hbmFnZWQgc3RvcmFnZS5cbiAqICAgV2hlbiB5b3Ugc3BlY2lmeSBhIGBga21zS2V5SWRgYCwgQW1hem9uIEVDUyB1c2VzIHRoZSBrZXkgdG8gZW5jcnlwdCBkYXRhIHZvbHVtZXMgbWFuYWdlZCBieSBBbWF6b24gRUNTIHRoYXQgYXJlIGF0dGFjaGVkIHRvIHRhc2tzIGluIHRoZSBjbHVzdGVyLiBUaGUgZm9sbG93aW5nIGRhdGEgdm9sdW1lcyBhcmUgbWFuYWdlZCBieSBBbWF6b24gRUNTOiBBbWF6b24gRUJTLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBlbmNyeXB0aW9uIG9mIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byBBbWF6b24gRUNTIHRhc2tzLCBzZWUgW0VuY3J5cHQgZGF0YSBzdG9yZWQgaW4gQW1hem9uIEVCUyB2b2x1bWVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lYnMta21zLWVuY3J5cHRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBrZXkgbXVzdCBiZSBhIHNpbmdsZSBSZWdpb24ga2V5LlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiB0aGUgZXhlY3V0ZSBjb21tYW5kIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGxvZyBzZXR0aW5nIHRvIHVzZSBmb3IgcmVkaXJlY3RpbmcgbG9ncyBmb3IgeW91ciBleGVjdXRlIGNvbW1hbmQgcmVzdWx0cy4gVGhlIGZvbGxvd2luZyBsb2cgc2V0dGluZ3MgYXJlIGF2YWlsYWJsZS5cbiAqICAgKyAgYGBOT05FYGA6IFRoZSBleGVjdXRlIGNvbW1hbmQgc2Vzc2lvbiBpcyBub3QgbG9nZ2VkLlxuICogICArICBgYERFRkFVTFRgYDogVGhlIGBgYXdzbG9nc2BgIGNvbmZpZ3VyYXRpb24gaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkLiBJZiBubyBsb2dnaW5nIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIHRoaXMgdmFsdWUuIElmIG5vIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIgaXMgY29uZmlndXJlZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLCB0aGUgb3V0cHV0IHdvbid0IGJlIGxvZ2dlZC5cbiAqICAgKyAgYGBPVkVSUklERWBgOiBTcGVjaWZ5IHRoZSBsb2dnaW5nIGRldGFpbHMgYXMgYSBwYXJ0IG9mIGBgbG9nQ29uZmlndXJhdGlvbmBgLiBJZiB0aGUgYGBPVkVSUklERWBgIGxvZ2dpbmcgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIGBgbG9nQ29uZmlndXJhdGlvbmBgIGlzIHJlcXVpcmVkLlxuICovXG5Mb2dnaW5nPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZnkgYW4gS01TbG9uZyBrZXkgSUQgdG8gZW5jcnlwdCB0aGUgZGF0YSBiZXR3ZWVuIHRoZSBsb2NhbCBjbGllbnQgYW5kIHRoZSBjb250YWluZXIuXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG5Mb2dDb25maWd1cmF0aW9uPzogRXhlY3V0ZUNvbW1hbmRMb2dDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBsb2cgY29uZmlndXJhdGlvbiBmb3IgdGhlIHJlc3VsdHMgb2YgdGhlIGV4ZWN1dGUgY29tbWFuZCBhY3Rpb25zLiBUaGUgbG9ncyBjYW4gYmUgc2VudCB0byBDbG91ZFdhdGNoIExvZ3Mgb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC4gV2hlbiBgYGxvZ2dpbmc9T1ZFUlJJREVgYCBpcyBzcGVjaWZpZWQsIGEgYGBsb2dDb25maWd1cmF0aW9uYGAgbXVzdCBiZSBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlQ29tbWFuZExvZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIGVuY3J5cHRpb24gb24gdGhlIFMzIGxvZ3MuIElmIG5vdCBzcGVjaWZpZWQsIGVuY3J5cHRpb24gaXMgbm90IHVzZWQuXG4gKi9cblMzRW5jcnlwdGlvbkVuYWJsZWQ/OiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgZW5jcnlwdGlvbiBvbiB0aGUgQ2xvdWRXYXRjaCBsb2dzLiBJZiBub3Qgc3BlY2lmaWVkLCBlbmNyeXB0aW9uIHdpbGwgYmUgb2ZmLlxuICovXG5DbG91ZFdhdGNoRW5jcnlwdGlvbkVuYWJsZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBDbG91ZFdhdGNoIGxvZyBncm91cCB0byBzZW5kIGxvZ3MgdG8uXG4gKiAgIFRoZSBDbG91ZFdhdGNoIGxvZyBncm91cCBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC5cbiAqL1xuQ2xvdWRXYXRjaExvZ0dyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBBbiBvcHRpb25hbCBmb2xkZXIgaW4gdGhlIFMzIGJ1Y2tldCB0byBwbGFjZSBsb2dzIGluLlxuICovXG5TM0tleVByZWZpeD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgUzMgYnVja2V0IHRvIHNlbmQgbG9ncyB0by5cbiAqICAgVGhlIFMzIGJ1Y2tldCBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC5cbiAqL1xuUzNCdWNrZXROYW1lPzogc3RyaW5nXG59XG4vKipcbiAqIFVzZSB0aGlzIHBhcmFtZXRlciB0byBzZXQgYSBkZWZhdWx0IFNlcnZpY2UgQ29ubmVjdCBuYW1lc3BhY2UuIEFmdGVyIHlvdSBzZXQgYSBkZWZhdWx0IFNlcnZpY2UgQ29ubmVjdCBuYW1lc3BhY2UsIGFueSBuZXcgc2VydmljZXMgd2l0aCBTZXJ2aWNlIENvbm5lY3QgdHVybmVkIG9uIHRoYXQgYXJlIGNyZWF0ZWQgaW4gdGhlIGNsdXN0ZXIgYXJlIGFkZGVkIGFzIGNsaWVudCBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUaGlzIHNldHRpbmcgb25seSBhcHBsaWVzIHRvIG5ldyBzZXJ2aWNlcyB0aGF0IHNldCB0aGUgYGBlbmFibGVkYGAgcGFyYW1ldGVyIHRvIGBgdHJ1ZWBgIGluIHRoZSBgYFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbmBgLiBZb3UgY2FuIHNldCB0aGUgbmFtZXNwYWNlIG9mIGVhY2ggc2VydmljZSBpbmRpdmlkdWFsbHkgaW4gdGhlIGBgU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uYGAgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IHBhcmFtZXRlci5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3REZWZhdWx0cyB7XG4vKipcbiAqIFRoZSBuYW1lc3BhY2UgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBDTUFQbG9uZyBuYW1lc3BhY2UgdGhhdCdzIHVzZWQgd2hlbiB5b3UgY3JlYXRlIGEgc2VydmljZSBhbmQgZG9uJ3Qgc3BlY2lmeSBhIFNlcnZpY2UgQ29ubmVjdCBjb25maWd1cmF0aW9uLiBUaGUgbmFtZXNwYWNlIG5hbWUgY2FuIGluY2x1ZGUgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBpcyBjYXNlLXNlbnNpdGl2ZS4gVGhlIG5hbWUgY2FuJ3QgaW5jbHVkZSBncmVhdGVyIHRoYW4gKD4pLCBsZXNzIHRoYW4gKDwpLCBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIChcIiksIG9yIHNsYXNoICgvKS5cbiAqICBJZiB5b3UgZW50ZXIgYW4gZXhpc3RpbmcgbmFtZXNwYWNlIG5hbWUgb3IgQVJOLCB0aGVuIHRoYXQgbmFtZXNwYWNlIHdpbGwgYmUgdXNlZC4gQW55IG5hbWVzcGFjZSB0eXBlIGlzIHN1cHBvcnRlZC4gVGhlIG5hbWVzcGFjZSBtdXN0IGJlIGluIHRoaXMgYWNjb3VudCBhbmQgdGhpcyBBV1MgUmVnaW9uLlxuICogIElmIHlvdSBlbnRlciBhIG5ldyBuYW1lLCBhIENNQVBsb25nIG5hbWVzcGFjZSB3aWxsIGJlIGNyZWF0ZWQuIEFtYXpvbiBFQ1MgY3JlYXRlcyBhIENNQVAgbmFtZXNwYWNlIHdpdGggdGhlIFwiQVBJIGNhbGxzXCIgbWV0aG9kIG9mIGluc3RhbmNlIGRpc2NvdmVyeSBvbmx5LiBUaGlzIGluc3RhbmNlIGRpc2NvdmVyeSBtZXRob2QgaXMgdGhlIFwiSFRUUFwiIG5hbWVzcGFjZSB0eXBlIGluIHRoZSBDTElsb25nLiBPdGhlciB0eXBlcyBvZiBpbnN0YW5jZSBkaXNjb3ZlcnkgYXJlbid0IHVzZWQgYnkgU2VydmljZSBDb25uZWN0LlxuICogIElmIHlvdSB1cGRhdGUgdGhlIGNsdXN0ZXIgd2l0aCBhbiBlbXB0eSBzdHJpbmcgYGBcIlwiYGAgZm9yIHRoZSBuYW1lc3BhY2UgbmFtZSwgdGhlIGNsdXN0ZXIgY29uZmlndXJhdGlvbiBmb3IgU2VydmljZSBDb25uZWN0IGlzIHJlbW92ZWQuIE5vdGUgdGhhdCB0aGUgbmFtZXNwYWNlIHdpbGwgcmVtYWluIGluIENNQVAgYW5kIG11c3QgYmUgZGVsZXRlZCBzZXBhcmF0ZWx5LlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENNQVBsb25nLCBzZWUgW1dvcmtpbmcgd2l0aCBTZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvZGcvd29ya2luZy13aXRoLXNlcnZpY2VzLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTmFtZXNwYWNlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byBhIHJlc291cmNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZS4gWW91IGRlZmluZSB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIG9wdGlvbmFsIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGB2YWx1ZWBgIGFjdHMgYXMgYSBkZXNjcmlwdG9yIHdpdGhpbiBhIHRhZyBjYXRlZ29yeSAoa2V5KS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogT25lIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGBrZXlgYCBpcyBhIGdlbmVyYWwgbGFiZWwgdGhhdCBhY3RzIGxpa2UgYSBjYXRlZ29yeSBmb3IgbW9yZSBzcGVjaWZpYyB0YWcgdmFsdWVzLlxuICovXG5LZXk/OiBzdHJpbmdcbn1cbiJdfQ==
|
|
@@ -17,7 +17,7 @@ export type Cluster = string;
|
|
|
17
17
|
*/
|
|
18
18
|
export interface _AWS_ECS_CLUSTERCAPACITYPROVIDERASSOCIATIONS {
|
|
19
19
|
DefaultCapacityProviderStrategy: DefaultCapacityProviderStrategy;
|
|
20
|
-
CapacityProviders
|
|
20
|
+
CapacityProviders?: CapacityProviders;
|
|
21
21
|
Cluster: Cluster;
|
|
22
22
|
}
|
|
23
23
|
export interface CapacityProviderStrategy {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1jbHVzdGVyY2FwYWNpdHlwcm92aWRlcmFzc29jaWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1lY3MtY2x1c3RlcmNhcGFjaXR5cHJvdmlkZXJhc3NvY2lhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIENhcGFjaXR5UHJvdmlkZXIgPSAoKFwiRkFSR0FURVwiIHwgXCJGQVJHQVRFX1NQT1RcIikgfCBzdHJpbmcpXG5leHBvcnQgdHlwZSBDYXBhY2l0eVByb3ZpZGVyMSA9IHN0cmluZ1xuLyoqXG4gKiBMaXN0IG9mIGNhcGFjaXR5IHByb3ZpZGVycyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY2x1c3RlclxuICovXG5leHBvcnQgdHlwZSBEZWZhdWx0Q2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5ID0gQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5W11cbi8qKlxuICogTGlzdCBvZiBjYXBhY2l0eSBwcm92aWRlcnMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNsdXN0ZXJcbiAqL1xuZXhwb3J0IHR5cGUgQ2FwYWNpdHlQcm92aWRlcnMgPSAoQ2FwYWNpdHlQcm92aWRlciAmIENhcGFjaXR5UHJvdmlkZXIxKVtdXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjbHVzdGVyXG4gKi9cbmV4cG9ydCB0eXBlIENsdXN0ZXIgPSBzdHJpbmdcblxuLyoqXG4gKiBBc3NvY2lhdGUgYSBzZXQgb2YgRUNTIENhcGFjaXR5IFByb3ZpZGVycyB3aXRoIGEgc3BlY2lmaWVkIEVDUyBDbHVzdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQ1NfQ0xVU1RFUkNBUEFDSVRZUFJPVklERVJBU1NPQ0lBVElPTlMge1xuRGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneTogRGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneVxuQ2FwYWNpdHlQcm92aWRlcnM/OiBDYXBhY2l0eVByb3ZpZGVyc1xuQ2x1c3RlcjogQ2x1c3RlclxufVxuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3kge1xuLyoqXG4gKiBJZiB1c2luZyBlYzIgYXV0by1zY2FsaW5nLCB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRlZCBjYXBhY2l0eSBwcm92aWRlci4gT3RoZXJ3aXNlIEZBUkdBVEUsIEZBUkdBVEVfU1BPVC5cbiAqL1xuQ2FwYWNpdHlQcm92aWRlcjogKENhcGFjaXR5UHJvdmlkZXIgJiBDYXBhY2l0eVByb3ZpZGVyMSlcbkJhc2U/OiBudW1iZXJcbldlaWdodD86IG51bWJlclxufVxuIl19
|
|
@@ -722,6 +722,9 @@ export interface DeploymentController {
|
|
|
722
722
|
* Optional deployment parameters that control how many tasks run during the deployment and the ordering of stopping and starting tasks.
|
|
723
723
|
*/
|
|
724
724
|
export interface DeploymentConfiguration {
|
|
725
|
+
CanaryConfiguration?: {
|
|
726
|
+
[k: string]: unknown;
|
|
727
|
+
};
|
|
725
728
|
/**
|
|
726
729
|
* The duration when both blue and green service revisions are running simultaneously after the production traffic has shifted.
|
|
727
730
|
* The following rules apply when you don't specify a value:
|
|
@@ -740,7 +743,7 @@ export interface DeploymentConfiguration {
|
|
|
740
743
|
* + ``ROLLING`` - When you create a service which uses the rolling update (``ROLLING``) deployment strategy, the Amazon ECS service scheduler replaces the currently running tasks with new tasks. The number of tasks that Amazon ECS adds or removes from the service during a rolling update is controlled by the service deployment configuration.
|
|
741
744
|
* + ``BLUE_GREEN`` - A blue/green deployment strategy (``BLUE_GREEN``) is a release methodology that reduces downtime and risk by running two identical production environments called blue and green. With Amazon ECS blue/green deployments, you can validate new service revisions before directing production traffic to them. This approach provides a safer way to deploy changes with the ability to quickly roll back if needed.
|
|
742
745
|
*/
|
|
743
|
-
Strategy?: ("ROLLING" | "BLUE_GREEN");
|
|
746
|
+
Strategy?: ("ROLLING" | "BLUE_GREEN" | "LINEAR" | "CANARY");
|
|
744
747
|
DeploymentCircuitBreaker?: DeploymentCircuitBreaker;
|
|
745
748
|
/**
|
|
746
749
|
* If a service is using the rolling update (``ECS``) deployment type, the ``maximumPercent`` parameter represents an upper limit on the number of your service's tasks that are allowed in the ``RUNNING`` or ``PENDING`` state during a deployment, as a percentage of the ``desiredCount`` (rounded down to the nearest integer). This parameter enables you to define the deployment batch size. For example, if your service is using the ``REPLICA`` service scheduler and has a ``desiredCount`` of four tasks and a ``maximumPercent`` value of 200%, the scheduler may start four new tasks before stopping the four older tasks (provided that the cluster resources required to do this are available). The default ``maximumPercent`` value for a service using the ``REPLICA`` service scheduler is 200%.
|
|
@@ -769,6 +772,9 @@ export interface DeploymentConfiguration {
|
|
|
769
772
|
* If a service is using either the blue/green (``CODE_DEPLOY``) or ``EXTERNAL`` deployment types and is running tasks that use the Fargate launch type, the minimum healthy percent value is not used, although it is returned when describing your service.
|
|
770
773
|
*/
|
|
771
774
|
MinimumHealthyPercent?: number;
|
|
775
|
+
LinearConfiguration?: {
|
|
776
|
+
[k: string]: unknown;
|
|
777
|
+
};
|
|
772
778
|
}
|
|
773
779
|
/**
|
|
774
780
|
* A deployment lifecycle hook runs custom logic at specific stages of the deployment process. Currently, you can use Lambda functions as hook targets.
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLiBcbiAqICAgIE9uIEp1bmUgMTIsIDIwMjUsIEFtYXpvbiBFQ1MgbGF1bmNoZWQgc3VwcG9ydCBmb3IgdXBkYXRpbmcgY2FwYWNpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBmb3IgRUNTIHNlcnZpY2VzLiBXaXRoIHRoaXMgbGF1bmNoLCBFQ1MgYWxzbyBhbGlnbmVkIHRoZSBDRk4gdXBkYXRlIGJlaGF2aW9yIGZvciBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHBhcmFtZXRlciB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbYWRkcyBzdXBwb3J0IGZvciB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIGZvciBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hYm91dC1hd3Mvd2hhdHMtbmV3LzIwMjUvMDUvYW1hem9uLWVjcy1jYXBhY2l0eS1wcm92aWRlci1jb25maWd1cmF0aW9uLWVjcy8pLiBQcmV2aW91c2x5IEVDUyBpZ25vcmVkIHRoZSBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHByb3BlcnR5IGlmIGl0IHdhcyBzZXQgdG8gYW4gZW1wdHkgbGlzdCBmb3IgZXhhbXBsZSwgYGBbXWBgIGluIENGTiwgYmVjYXVzZSB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIHdhcyBub3Qgc3VwcG9ydGVkLiBOb3csIHdpdGggc3VwcG9ydCBmb3IgY2FwYWNpdHkgcHJvdmlkZXIgdXBkYXRlcywgY3VzdG9tZXJzIGNhbiByZW1vdmUgY2FwYWNpdHkgcHJvdmlkZXJzIGZyb20gYSBzZXJ2aWNlIGJ5IHBhc3NpbmcgYW4gZW1wdHkgbGlzdC4gV2hlbiB5b3Ugc3BlY2lmeSBhbiBlbXB0eSBsaXN0IChgYFtdYGApIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIENGTiB0ZW1wbGF0ZSwgRUNTIHdpbGwgcmVtb3ZlIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlLCBhcyBmb2xsb3dzOlxuICogICArICBGb3Igc2VydmljZXMgY3JlYXRlZCB3aXRoIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgYWZ0ZXIgdGhlIGxhdW5jaDpcbiAqICAgKyAgSWYgdGhlcmUncyBhIGNsdXN0ZXIgZGVmYXVsdCBzdHJhdGVneSBzZXQsIHRoZSBzZXJ2aWNlIHdpbGwgcmV2ZXJ0IHRvIHVzaW5nIHRoYXQgZGVmYXVsdCBzdHJhdGVneS5cbiAqICAgKyAgSWYgbm8gY2x1c3RlciBkZWZhdWx0IHN0cmF0ZWd5IGV4aXN0cywgeW91IHdpbGwgcmVjZWl2ZSB0aGUgZm9sbG93aW5nIGVycm9yOlxuICogIE5vIGxhdW5jaCB0eXBlIHRvIGZhbGwgYmFjayB0byBmb3IgZW1wdHkgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFlvdXIgc2VydmljZSB3YXMgbm90IGNyZWF0ZWQgd2l0aCBhIGxhdW5jaCB0eXBlLlxuICogICBcbiAqICAgKyAgRm9yIHNlcnZpY2VzIGNyZWF0ZWQgd2l0aCBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHByaW9yIHRvIHRoZSBsYXVuY2g6XG4gKiAgICsgIElmIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaGFkIGBgRkFSR0FURV9TUE9UYGAgb3IgYGBGQVJHQVRFYGAgY2FwYWNpdHkgcHJvdmlkZXJzLCB0aGUgbGF1bmNoIHR5cGUgd2lsbCBiZSB1cGRhdGVkIHRvIGBgRkFSR0FURWBgIGFuZCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgd2lsbCBiZSByZW1vdmVkLlxuICogICArICBJZiB0aGUgc3RyYXRlZ3kgaW5jbHVkZWQgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycywgdGhlIHNlcnZpY2Ugd2lsbCByZXZlcnQgdG8gRUMyIGxhdW5jaCB0eXBlLCBhbmQgdGhlIEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgd2lsbCBub3QgYmUgdXNlZC5cbiAqICAgXG4gKiAgIFxuICogIFJlY29tbWVuZGVkIEFjdGlvbnNcbiAqICBJZiB5b3UgYXJlIGN1cnJlbnRseSB1c2luZyBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneTogW11gYCBpbiB5b3VyIENGTiB0ZW1wbGF0ZXMsIHlvdSBzaG91bGQgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICogICArICBJZiB5b3UgZG8gbm90IGludGVuZCB0byB1cGRhdGUgdGhlIENhcGFjaXR5IFByb3ZpZGVyIFN0cmF0ZWd5OlxuICogICArICBSZW1vdmUgdGhlIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJvcGVydHkgZW50aXJlbHkgZnJvbSB5b3VyIENGTiB0ZW1wbGF0ZVxuICogICArICBBbHRlcm5hdGl2ZWx5LCB1c2UgYGAhUmVmIDo6Tm9WYWx1ZWBgIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIHRlbXBsYXRlXG4gKiAgIFxuICogICArICBJZiB5b3UgaW50ZW5kIHRvIG1haW50YWluIG9yIHVwZGF0ZSB0aGUgQ2FwYWNpdHkgUHJvdmlkZXIgU3RyYXRlZ3ksIHNwZWNpZnkgdGhlIGFjdHVhbCBDYXBhY2l0eSBQcm92aWRlciBTdHJhdGVneSBmb3IgdGhlIHNlcnZpY2UgaW4geW91ciBDRk4gdGVtcGxhdGUuXG4gKiAgIFxuICogIElmIHlvdXIgQ0ZOIHRlbXBsYXRlIGhhZCBhbiBlbXB0eSBsaXN0IChbXSkgZm9yIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJpb3IgdG8gdGhlIGFmb3JlbWVudGlvbmVkIGxhdW5jaCBvbiBKdW5lIDEyLCBhbmQgeW91IGFyZSB1c2luZyB0aGUgc2FtZSB0ZW1wbGF0ZSB3aXRoIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5OiBbXWBgLCB5b3UgbWlnaHQgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gKiAgIEludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogV2hlbiBzd2l0Y2hpbmcgZnJvbSBsYXVuY2ggdHlwZSB0byBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhbiBleGlzdGluZyBzZXJ2aWNlLCBvciBtYWtpbmcgYSBjaGFuZ2UgdG8gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhIHNlcnZpY2UgdGhhdCBpcyBhbHJlYWR5IHVzaW5nIG9uZSwgeW91IG11c3QgZm9yY2UgYSBuZXcgZGVwbG95bWVudC4gKFNlcnZpY2U6IEVjcywgU3RhdHVzIENvZGU6IDQwMCwgUmVxdWVzdCBJRDogeHh4KSAoU0RLIEF0dGVtcHQgQ291bnQ6IDEpXCIgKFJlcXVlc3RUb2tlbjogeHh4IEhhbmRsZXJFcnJvckNvZGU6IEludmFsaWRSZXF1ZXN0KSBcbiAqICBOb3RlIHRoYXQgQ0ZOIGF1dG9tYXRpY2FsbHkgaW5pdGlhdGVzIGEgbmV3IGRlcGxveW1lbnQgd2hlbiBpdCBkZXRlY3RzIGEgcGFyYW1ldGVyIGNoYW5nZSwgYnV0IGN1c3RvbWVycyBjYW5ub3QgY2hvb3NlIHRvIGZvcmNlIGEgZGVwbG95bWVudCB0aHJvdWdoIENGTi4gVGhpcyBpcyBhbiBpbnZhbGlkIGlucHV0IHNjZW5hcmlvIHRoYXQgcmVxdWlyZXMgb25lIG9mIHRoZSByZW1lZGlhdGlvbiBhY3Rpb25zIGxpc3RlZCBhYm92ZS5cbiAqICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhY3RpdmUgcHJvZHVjdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgY29udGFjdCBBV1MgU3VwcG9ydCBvciB5b3VyIFRlY2huaWNhbCBBY2NvdW50IE1hbmFnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQ1NfU0VSVklDRSB7XG4vKipcbiAqIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIHRoYXQgeW91ciB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgcnVubmluZyBvbi4gQSBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHNwZWNpZmllZCBvbmx5IGZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS4gSWYgb25lIGlzbid0IHNwZWNpZmllZCwgdGhlIGBgTEFURVNUYGAgcGxhdGZvcm0gdmVyc2lvbiBpcyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtwbGF0Zm9ybSB2ZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcGxhdGZvcm1fdmVyc2lvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QbGF0Zm9ybVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byB0aGUgdGFzay4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3QgcHJvcGFnYXRlZC4gVGFncyBjYW4gb25seSBiZSBwcm9wYWdhdGVkIHRvIHRoZSB0YXNrIGR1cmluZyB0YXNrIGNyZWF0aW9uLiBUbyBhZGQgdGFncyB0byBhIHRhc2sgYWZ0ZXIgdGFzayBjcmVhdGlvbiwgdXNlIHRoZSBbVGFnUmVzb3VyY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVGFnUmVzb3VyY2UuaHRtbCkgQVBJIGFjdGlvbi5cbiAqICBZb3UgbXVzdCBzZXQgdGhpcyB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGBOT05FYGAgd2hlbiB5b3UgdXNlIENvc3QgRXhwbG9yZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgdXNhZ2UgcmVwb3J0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNhZ2UtcmVwb3J0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIGRlZmF1bHQgaXMgYGBOT05FYGAuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuU2VydmljZUFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGxhY2VtZW50IHN0cmF0ZWd5IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgNSBzdHJhdGVneSBydWxlcyBmb3IgZWFjaCBzZXJ2aWNlLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudFN0cmF0ZWd5YGAgYXJyYXkuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqICAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVJlZ2lzdHJ5YGAgYXJyYXkuXG4gKi9cblNlcnZpY2VSZWdpc3RyaWVzPzogU2VydmljZVJlZ2lzdHJ5W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYCBhcnJheS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGNvbnRhaW4gYSBtYXhpbXVtIG9mIDIwIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtYGAgYXJyYXkuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneT86IENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW1bXVxuLyoqXG4gKiBUaGUgbGF1bmNoIHR5cGUgb24gd2hpY2ggdG8gcnVuIHlvdXIgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBMYXVuY2ggVHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2xhdW5jaF90eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkxhdW5jaFR5cGU/OiAoXCJFQzJcIiB8IFwiRkFSR0FURVwiIHwgXCJFWFRFUk5BTFwiKVxuTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQXZhaWxhYmlsaXR5IFpvbmUgcmViYWxhbmNpbmcgZm9yIHRoZSBzZXJ2aWNlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhbGFuY2luZyBhbiBBbWF6b24gRUNTIHNlcnZpY2UgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1yZWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgYGBBdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmdgYCBkaWZmZXJzIGJldHdlZW4gY3JlYXRlIGFuZCB1cGRhdGUgcmVxdWVzdHM6XG4gKiAgICsgIEZvciBjcmVhdGUgc2VydmljZSByZXF1ZXN0cywgd2hlbiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yIGBgQXZhaWxhYmlsaXR5Wm9uZVJlYmFsYW5jaW5nYGAsIEFtYXpvbiBFQ1MgZGVmYXVsdHMgdGhlIHZhbHVlIHRvIGBgRU5BQkxFRGBgLlxuICogICArICBGb3IgdXBkYXRlIHNlcnZpY2UgcmVxdWVzdHMsIHdoZW4gbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvciBgYEF2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZ2BgLCBBbWF6b24gRUNTIGRlZmF1bHRzIHRvIHRoZSBleGlzdGluZyBzZXJ2aWNl4oCZcyBgYEF2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZ2BgIHZhbHVlLiBJZiB0aGUgc2VydmljZSBuZXZlciBoYWQgYW4gYGBBdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmdgYCB2YWx1ZSBzZXQsIEFtYXpvbiBFQ1MgdHJlYXRzIHRoaXMgYXMgYGBESVNBQkxFRGBgLlxuICovXG5BdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmc/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgVGhlcmUgYXJlIHR3byBzZXJ2aWNlIHNjaGVkdWxlciBzdHJhdGVnaWVzIGF2YWlsYWJsZTpcbiAqICAgKyAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgIGBgREFFTU9OYGAtVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRlcGxveXMgZXhhY3RseSBvbmUgdGFzayBvbiBlYWNoIGFjdGl2ZSBjb250YWluZXIgaW5zdGFuY2UgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBjbHVzdGVyLiBUaGUgc2VydmljZSBzY2hlZHVsZXIgYWxzbyBldmFsdWF0ZXMgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGZvciBydW5uaW5nIHRhc2tzIGFuZCB3aWxsIHN0b3AgdGFza3MgdGhhdCBkb24ndCBtZWV0IHRoZSBwbGFjZW1lbnQgY29uc3RyYWludHMuIFdoZW4geW91J3JlIHVzaW5nIHRoaXMgc3RyYXRlZ3ksIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcywgYSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSwgb3IgdXNlIFNlcnZpY2UgQXV0byBTY2FsaW5nIHBvbGljaWVzLlxuICogICBUYXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSBvciB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgZG9uJ3Qgc3VwcG9ydCB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LlxuICovXG5TY2hlZHVsaW5nU3RyYXRlZ3k/OiAoXCJEQUVNT05cIiB8IFwiUkVQTElDQVwiKVxuTmV0d29ya0NvbmZpZ3VyYXRpb24/OiBOZXR3b3JrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHNlcnZpY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuIFdoZW4gYSBzZXJ2aWNlIGlzIGRlbGV0ZWQsIHRoZSB0YWdzIGFyZSBkZWxldGVkIGFzIHdlbGwuXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuVGFncz86IFRhZ1tdXG5Gb3JjZU5ld0RlcGxveW1lbnQ/OiBGb3JjZU5ld0RlcGxveW1lbnRcbi8qKlxuICogVGhlIHBlcmlvZCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBBbWF6b24gQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIHVuaGVhbHRoeSBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBWUEMgTGF0dGljZSwgYW5kIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzIGFmdGVyIGEgdGFzayBoYXMgZmlyc3Qgc3RhcnRlZC4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCB2YWx1ZSwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgMCBpcyB1c2VkLiBJZiB5b3UgZG8gbm90IHVzZSBhbnkgb2YgdGhlIGhlYWx0aCBjaGVja3MsIHRoZW4gYGBoZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kc2BgIGlzIHVudXNlZC5cbiAqICBJZiB5b3VyIHNlcnZpY2UgaGFzIG1vcmUgcnVubmluZyB0YXNrcyB0aGFuIGRlc2lyZWQsIHVuaGVhbHRoeSB0YXNrcyBpbiB0aGUgZ3JhY2UgcGVyaW9kIG1pZ2h0IGJlIHN0b3BwZWQgdG8gcmVhY2ggdGhlIGRlc2lyZWQgY291bnQuXG4gKi9cbkhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHR1cm4gb24gQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MgZm9yIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgeW91ciBBbWF6b24gRUNTIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLXVzaW5nLXRhZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFdoZW4geW91IHVzZSBBbWF6b24gRUNTIG1hbmFnZWQgdGFncywgeW91IG11c3Qgc2V0IHRoZSBgYHByb3BhZ2F0ZVRhZ3NgYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqL1xuRW5hYmxlRUNTTWFuYWdlZFRhZ3M/OiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciB0aGUgc2VydmljZS4gSWYgYGB0cnVlYGAsIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIGFsbCBjb250YWluZXJzIGluIHRhc2tzIGFzIHBhcnQgb2YgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZUV4ZWN1dGVDb21tYW5kPzogYm9vbGVhblxuLyoqXG4gKiBBbiBhcnJheSBvZiBwbGFjZW1lbnQgY29uc3RyYWludCBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDEwIGNvbnN0cmFpbnRzIGZvciBlYWNoIHRhc2suIFRoaXMgbGltaXQgaW5jbHVkZXMgY29uc3RyYWludHMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhbmQgdGhvc2Ugc3BlY2lmaWVkIGF0IHJ1bnRpbWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgUGxhY2VtZW50Q29uc3RyYWludGBgIGFycmF5LlxuICovXG5QbGFjZW1lbnRDb25zdHJhaW50cz86IFBsYWNlbWVudENvbnN0cmFpbnRbXVxuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBjbHVzdGVyIHRoYXQgeW91IHJ1biB5b3VyIHNlcnZpY2Ugb24uIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIGNsdXN0ZXIsIHRoZSBkZWZhdWx0IGNsdXN0ZXIgaXMgYXNzdW1lZC5cbiAqL1xuQ2x1c3Rlcj86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgbG9hZCBiYWxhbmNlciBvYmplY3RzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBSb2xlYGAgcHJvcGVydHksIGBgTG9hZEJhbGFuY2Vyc2BgIG11c3QgYmUgc3BlY2lmaWVkIGFzIHdlbGwuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mIGxvYWQgYmFsYW5jZXJzIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHBlciBzZXJ2aWNlLCBzZWUgW1NlcnZpY2UgTG9hZCBCYWxhbmNpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtbG9hZC1iYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYExvYWRCYWxhbmNlcmBgIGFycmF5LlxuICovXG5Mb2FkQmFsYW5jZXJzPzogTG9hZEJhbGFuY2VyW11cblNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbj86IFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGluc3RhbnRpYXRpb25zIG9mIHRoZSBzcGVjaWZpZWQgdGFzayBkZWZpbml0aW9uIHRvIHBsYWNlIGFuZCBrZWVwIHJ1bm5pbmcgaW4geW91ciBzZXJ2aWNlLlxuICogIEZvciBuZXcgc2VydmljZXMsIGlmIGEgZGVzaXJlZCBjb3VudCBpcyBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgdmFsdWUgb2YgYGAxYGAgaXMgdXNlZC4gV2hlbiB1c2luZyB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LCB0aGUgZGVzaXJlZCBjb3VudCBpcyBub3QgcmVxdWlyZWQuXG4gKiAgRm9yIGV4aXN0aW5nIHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgb21pdHRlZCBmcm9tIHRoZSBvcGVyYXRpb24uXG4gKi9cbkRlc2lyZWRDb3VudD86IG51bWJlclxuLyoqXG4gKiBUaGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UgYmVpbmcgY3JlYXRlZC5cbiAqL1xuVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25zPzogVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25bXVxuRGVwbG95bWVudENvbnRyb2xsZXI/OiBEZXBsb3ltZW50Q29udHJvbGxlclxuLyoqXG4gKiBUaGUgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gRUNTIHRvIG1ha2UgY2FsbHMgdG8geW91ciBsb2FkIGJhbGFuY2VyIG9uIHlvdXIgYmVoYWxmLiBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHBlcm1pdHRlZCBpZiB5b3UgYXJlIHVzaW5nIGEgbG9hZCBiYWxhbmNlciB3aXRoIHlvdXIgc2VydmljZSBhbmQgeW91ciB0YXNrIGRlZmluaXRpb24gZG9lc24ndCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGByb2xlYGAgcGFyYW1ldGVyLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSBsb2FkIGJhbGFuY2VyIG9iamVjdCB3aXRoIHRoZSBgYGxvYWRCYWxhbmNlcnNgYCBwYXJhbWV0ZXIuXG4gKiAgIElmIHlvdXIgYWNjb3VudCBoYXMgYWxyZWFkeSBjcmVhdGVkIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UtbGlua2VkIHJvbGUsIHRoYXQgcm9sZSBpcyB1c2VkIGZvciB5b3VyIHNlcnZpY2UgdW5sZXNzIHlvdSBzcGVjaWZ5IGEgcm9sZSBoZXJlLiBUaGUgc2VydmljZS1saW5rZWQgcm9sZSBpcyByZXF1aXJlZCBpZiB5b3VyIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBvciBpZiB0aGUgc2VydmljZSBpcyBjb25maWd1cmVkIHRvIHVzZSBzZXJ2aWNlIGRpc2NvdmVyeSwgYW4gZXh0ZXJuYWwgZGVwbG95bWVudCBjb250cm9sbGVyLCBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLCBvciBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvcnMgaW4gd2hpY2ggY2FzZSB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHJvbGUgaGVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgc2VydmljZS1saW5rZWQgcm9sZXMgZm9yIEFtYXpvbiBFQ1NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nLXNlcnZpY2UtbGlua2VkLXJvbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzcGVjaWZpZWQgcm9sZSBoYXMgYSBwYXRoIG90aGVyIHRoYW4gYGAvYGAsIHRoZW4geW91IG11c3QgZWl0aGVyIHNwZWNpZnkgdGhlIGZ1bGwgcm9sZSBBUk4gKHRoaXMgaXMgcmVjb21tZW5kZWQpIG9yIHByZWZpeCB0aGUgcm9sZSBuYW1lIHdpdGggdGhlIHBhdGguIEZvciBleGFtcGxlLCBpZiBhIHJvbGUgd2l0aCB0aGUgbmFtZSBgYGJhcmBgIGhhcyBhIHBhdGggb2YgYGAvZm9vL2BgIHRoZW4geW91IHdvdWxkIHNwZWNpZnkgYGAvZm9vL2JhcmBgIGFzIHRoZSByb2xlIG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZyaWVuZGx5IG5hbWVzIGFuZCBwYXRoc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pZGVudGlmaWVycy5odG1sI2lkZW50aWZpZXJzLWZyaWVuZGx5LW5hbWVzKSBpbiB0aGUgKklBTSBVc2VyIEd1aWRlKi5cbiAqL1xuUm9sZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBmYW1pbHlgYCBhbmQgYGByZXZpc2lvbmBgIChgYGZhbWlseTpyZXZpc2lvbmBgKSBvciBmdWxsIEFSTiBvZiB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHJ1biBpbiB5b3VyIHNlcnZpY2UuIElmIGEgYGByZXZpc2lvbmBgIGlzbid0IHNwZWNpZmllZCwgdGhlIGxhdGVzdCBgYEFDVElWRWBgIHJldmlzaW9uIGlzIHVzZWQuXG4gKiAgQSB0YXNrIGRlZmluaXRpb24gbXVzdCBiZSBzcGVjaWZpZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyBlaXRoZXIgdGhlIGBgRUNTYGAgb3IgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVwbG95bWVudCB0eXBlcywgc2VlIFtBbWF6b24gRUNTIGRlcGxveW1lbnQgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZXMuaHRtbCkuXG4gKi9cblRhc2tEZWZpbml0aW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHlvdXIgc2VydmljZS4gVXAgdG8gMjU1IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zIGFyZSBhbGxvd2VkLiBTZXJ2aWNlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGNsdXN0ZXIsIGJ1dCB5b3UgY2FuIGhhdmUgc2ltaWxhcmx5IG5hbWVkIHNlcnZpY2VzIGluIG11bHRpcGxlIGNsdXN0ZXJzIHdpdGhpbiBhIFJlZ2lvbiBvciBhY3Jvc3MgbXVsdGlwbGUgUmVnaW9ucy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgdGhlIGBgU2VydmljZU5hbWVgYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZU5hbWVgYCBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgY2x1c3Rlci5cbiAqL1xuU2VydmljZU5hbWU/OiBzdHJpbmdcbkRlcGxveW1lbnRDb25maWd1cmF0aW9uPzogRGVwbG95bWVudENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5IGZvciBhIHRhc2sgb3Igc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtc3RyYXRlZ2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50U3RyYXRlZ3kge1xuLyoqXG4gKiBUaGUgZmllbGQgdG8gYXBwbHkgdGhlIHBsYWNlbWVudCBzdHJhdGVneSBhZ2FpbnN0LiBGb3IgdGhlIGBgc3ByZWFkYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB2YWxpZCB2YWx1ZXMgYXJlIGBgaW5zdGFuY2VJZGBgIChvciBgYGhvc3RgYCwgd2hpY2ggaGFzIHRoZSBzYW1lIGVmZmVjdCksIG9yIGFueSBwbGF0Zm9ybSBvciBjdXN0b20gYXR0cmlidXRlIHRoYXQncyBhcHBsaWVkIHRvIGEgY29udGFpbmVyIGluc3RhbmNlLCBzdWNoIGFzIGBgYXR0cmlidXRlOmVjcy5hdmFpbGFiaWxpdHktem9uZWBgLiBGb3IgdGhlIGBgYmlucGFja2BgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGNwdWBgIGFuZCBgYG1lbW9yeWBgLiBGb3IgdGhlIGBgcmFuZG9tYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB0aGlzIGZpZWxkIGlzIG5vdCB1c2VkLlxuICovXG5GaWVsZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBwbGFjZW1lbnQgc3RyYXRlZ3kuIFRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSByYW5kb21seSBwbGFjZXMgdGFza3Mgb24gYXZhaWxhYmxlIGNhbmRpZGF0ZXMuIFRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSBzcHJlYWRzIHBsYWNlbWVudCBhY3Jvc3MgYXZhaWxhYmxlIGNhbmRpZGF0ZXMgZXZlbmx5IGJhc2VkIG9uIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBUaGUgYGBiaW5wYWNrYGAgc3RyYXRlZ3kgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzIHRoYXQgaGF2ZSB0aGUgbGVhc3QgYXZhaWxhYmxlIGFtb3VudCBvZiB0aGUgcmVzb3VyY2UgdGhhdCdzIHNwZWNpZmllZCB3aXRoIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSwgaWYgeW91IGJpbnBhY2sgb24gbWVtb3J5LCBhIHRhc2sgaXMgcGxhY2VkIG9uIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgcmVtYWluaW5nIG1lbW9yeSBidXQgc3RpbGwgZW5vdWdoIHRvIHJ1biB0aGUgdGFzay5cbiAqL1xuVHlwZTogKFwiYmlucGFja1wiIHwgXCJyYW5kb21cIiB8IFwic3ByZWFkXCIpXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIGZvciB0aGUgc2VydmljZSByZWdpc3RyeS5cbiAqICBFYWNoIHNlcnZpY2UgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBvbmUgc2VydmljZSByZWdpc3RyeS4gTXVsdGlwbGUgc2VydmljZSByZWdpc3RyaWVzIGZvciBlYWNoIHNlcnZpY2UgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKiAgV2hlbiB5b3UgYWRkLCB1cGRhdGUsIG9yIHJlbW92ZSB0aGUgc2VydmljZSByZWdpc3RyaWVzIGNvbmZpZ3VyYXRpb24sIEFtYXpvbiBFQ1Mgc3RhcnRzIGEgbmV3IGRlcGxveW1lbnQuIE5ldyB0YXNrcyBhcmUgcmVnaXN0ZXJlZCBhbmQgZGVyZWdpc3RlcmVkIHRvIHRoZSB1cGRhdGVkIHNlcnZpY2UgcmVnaXN0cnkgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVnaXN0cnkge1xuLyoqXG4gKiBUaGUgY29udGFpbmVyIG5hbWUgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gb3IgYSBgYHBvcnRgYCB2YWx1ZS4gSG93ZXZlciwgeW91IGNhbid0IHNwZWNpZnkgYm90aC5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB1c2VkIGlmIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZSBzcGVjaWZpZWQgYW4gU1JWIHJlY29yZC4gVGhpcyBmaWVsZCBtaWdodCBiZSB1c2VkIGlmIGJvdGggdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBTUlYgcmVjb3JkcyBhcmUgdXNlZC5cbiAqL1xuUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIEl0J3MgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIENNQVAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZVNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlU2VydmljZS5odG1sKS5cbiAqL1xuUmVnaXN0cnlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb24ge1xuTWFuYWdlZEVCU1ZvbHVtZT86IFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdm9sdW1lLiBUaGlzIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHZvbHVtZSBuYW1lIGZyb20gdGhlIGBgVm9sdW1lYGAgb2JqZWN0IGluIHRoZSB0YXNrIGRlZmluaXRpb24uXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFtYXpvbiBFQlMgdm9sdW1lIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGFuZCBtYW5hZ2VzIG9uIHlvdXIgYmVoYWxmLiBUaGVzZSBzZXR0aW5ncyBhcmUgdXNlZCB0byBjcmVhdGUgZWFjaCBBbWF6b24gRUJTIHZvbHVtZSwgd2l0aCBvbmUgdm9sdW1lIGNyZWF0ZWQgZm9yIGVhY2ggdGFzayBpbiB0aGUgc2VydmljZS4gVGhlIEFtYXpvbiBFQlMgdm9sdW1lcyBhcmUgdmlzaWJsZSBpbiB5b3VyIGFjY291bnQgaW4gdGhlIEFtYXpvbiBFQzIgY29uc29sZSBvbmNlIHRoZXkgYXJlIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU1hbmFnZWRFQlNWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNuYXBzaG90IHRoYXQgQW1hem9uIEVDUyB1c2VzIHRvIGNyZWF0ZSB2b2x1bWVzIGZvciBhdHRhY2htZW50IHRvIHRhc2tzIG1haW50YWluZWQgYnkgdGhlIHNlcnZpY2UuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGBgc25hcHNob3RJZGBgIG9yIGBgc2l6ZUluR2lCYGAgaW4geW91ciB2b2x1bWUgY29uZmlndXJhdGlvbi4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTbmFwc2hvdElkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5TbmFwc2hvdElkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2b2x1bWUgdHlwZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBWb2x1bWVUeXBlYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJTIHZvbHVtZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGVzLlxuICogICArICBHZW5lcmFsIFB1cnBvc2UgU1NEOiBgYGdwMmBgfGBgZ3AzYGBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBTU0Q6IGBgaW8xYGB8YGBpbzJgYFxuICogICArICBUaHJvdWdocHV0IE9wdGltaXplZCBIREQ6IGBgc3QxYGBcbiAqICAgKyAgQ29sZCBIREQ6IGBgc2MxYGBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYFxuICogICBUaGUgbWFnbmV0aWMgdm9sdW1lIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBvbiBGYXJnYXRlLlxuICovXG5Wb2x1bWVUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBpZGVudGlmaWVyIG9mIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgdG8gdXNlIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24uIFdoZW4gYSBrZXkgaXMgc3BlY2lmaWVkIHVzaW5nIHRoaXMgcGFyYW1ldGVyLCBpdCBvdmVycmlkZXMgQW1hem9uIEVCUyBkZWZhdWx0IGVuY3J5cHRpb24gb3IgYW55IEtNUyBrZXkgdGhhdCB5b3Ugc3BlY2lmaWVkIGZvciBjbHVzdGVyLWxldmVsIG1hbmFnZWQgc3RvcmFnZSBlbmNyeXB0aW9uLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEttc0tleUlkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBlbmNyeXB0aW5nIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byB0YXNrcywgc2VlIFtFbmNyeXB0IGRhdGEgc3RvcmVkIGluIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byBBbWF6b24gRUNTIHRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lYnMta21zLWVuY3J5cHRpb24uaHRtbCkuXG4gKiAgIEFXUyBhdXRoZW50aWNhdGVzIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgYXN5bmNocm9ub3VzbHkuIFRoZXJlZm9yZSwgaWYgeW91IHNwZWNpZnkgYW4gSUQsIGFsaWFzLCBvciBBUk4gdGhhdCBpcyBpbnZhbGlkLCB0aGUgYWN0aW9uIGNhbiBhcHBlYXIgdG8gY29tcGxldGUsIGJ1dCBldmVudHVhbGx5IGZhaWxzLlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgdm9sdW1lLiBBbWF6b24gRUNTIGFwcGxpZXMgc2VydmljZS1tYW5hZ2VkIHRhZ3MgYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUYWdTcGVjaWZpY2F0aW9ucy5OYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5UYWdTcGVjaWZpY2F0aW9ucz86IEVCU1RhZ1NwZWNpZmljYXRpb25bXVxuLyoqXG4gKiBUaGUgZmlsZXN5c3RlbSB0eXBlIGZvciB0aGUgdm9sdW1lLiBGb3Igdm9sdW1lcyBjcmVhdGVkIGZyb20gYSBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBmaWxlc3lzdGVtIHR5cGUgdGhhdCB0aGUgdm9sdW1lIHdhcyB1c2luZyB3aGVuIHRoZSBzbmFwc2hvdCB3YXMgY3JlYXRlZC4gSWYgdGhlcmUgaXMgYSBmaWxlc3lzdGVtIHR5cGUgbWlzbWF0Y2gsIHRoZSB0YXNrcyB3aWxsIGZhaWwgdG8gc3RhcnQuXG4gKiAgVGhlIGF2YWlsYWJsZSBMaW51eCBmaWxlc3lzdGVtIHR5cGVzIGFyZeKAqCBgYGV4dDNgYCwgYGBleHQ0YGAsIGFuZCBgYHhmc2BgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBgYHhmc2BgIGZpbGVzeXN0ZW0gdHlwZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiAgVGhlIGF2YWlsYWJsZSBXaW5kb3dzIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIGBgTlRGU2BgLlxuICovXG5GaWxlc3lzdGVtVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIElmIHlvdSB0dXJuIG9uIFJlZ2lvbi1sZXZlbCBBbWF6b24gRUJTIGVuY3J5cHRpb24gYnkgZGVmYXVsdCBidXQgc2V0IHRoaXMgdmFsdWUgYXMgYGBmYWxzZWBgLCB0aGUgc2V0dGluZyBpcyBvdmVycmlkZGVuIGFuZCB0aGUgdm9sdW1lIGlzIGVuY3J5cHRlZCB3aXRoIHRoZSBLTVMga2V5IHNwZWNpZmllZCBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgRW5jcnlwdGVkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5FbmNyeXB0ZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0aHJvdWdocHV0IHRvIHByb3Zpc2lvbiBmb3IgYSB2b2x1bWUsIGluIE1pQi9zLCB3aXRoIGEgbWF4aW11bSBvZiAxLDAwMCBNaUIvcy4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUaHJvdWdocHV0YGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgZ3AzYGAgdm9sdW1lIHR5cGUuXG4gKi9cblRocm91Z2hwdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHJhdGUsIGluIE1pQi9zLCBhdCB3aGljaCBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNuYXBzaG90IG9mIGFuIGV4aXN0aW5nIEVCUyB2b2x1bWUgdG8gY3JlYXRlIG5ldyB2b2x1bWVzIGZvciBhdHRhY2htZW50IHRvIHRoZSB0YXNrcyBtYWludGFpbmVkIGJ5IHRoZSBzZXJ2aWNlLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBzcGVjaWZpZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBhIGBgc25hcHNob3RJZGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJbml0aWFsaXplIEFtYXpvbiBFQlMgdm9sdW1lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2luaXRhbGl6ZS12b2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUJTIFVzZXIgR3VpZGUqLlxuICovXG5Wb2x1bWVJbml0aWFsaXphdGlvblJhdGU/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kIChJT1BTKS4gRm9yIGBgZ3AzYGAsIGBgaW8xYGAsIGFuZCBgYGlvMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIElPUFMgdGhhdCBhcmUgcHJvdmlzaW9uZWQgZm9yIHRoZSB2b2x1bWUuIEZvciBgYGdwMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgYmFzZWxpbmUgcGVyZm9ybWFuY2Ugb2YgdGhlIHZvbHVtZSBhbmQgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHZvbHVtZSBhY2N1bXVsYXRlcyBJL08gY3JlZGl0cyBmb3IgYnVyc3RpbmcuXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgIGBgZ3AzYGA6IDMsMDAwIC0gMTYsMDAwIElPUFNcbiAqICAgKyAgYGBpbzFgYDogMTAwIC0gNjQsMDAwIElPUFNcbiAqICAgKyAgYGBpbzJgYDogMTAwIC0gMjU2LDAwMCBJT1BTXG4gKiAgIFxuICogIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciBgYGlvMWBgIGFuZCBgYGlvMmBgIHZvbHVtZSB0eXBlcy4gVGhlIGRlZmF1bHQgZm9yIGBgZ3AzYGAgdm9sdW1lcyBpcyBgYDMsMDAwIElPUFNgYC4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGBzdDFgYCwgYGBzYzFgYCwgb3IgYGBzdGFuZGFyZGBgIHZvbHVtZSB0eXBlcy5cbiAqICBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSBpbiBHaUIuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgdm9sdW1lIHNpemUgb3IgYSBzbmFwc2hvdCBJRC4gSWYgeW91IHNwZWNpZnkgYSBzbmFwc2hvdCBJRCwgdGhlIHNuYXBzaG90IHNpemUgaXMgdXNlZCBmb3IgdGhlIHZvbHVtZSBzaXplIGJ5IGRlZmF1bHQuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdm9sdW1lIHNpemUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzbmFwc2hvdCBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNpemVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgc2l6ZSB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEtMTYsMzg0XG4gKiAgICsgIGBgaW8xYGAgYW5kIGBgaW8yYGA6IDQtMTYsMzg0XG4gKiAgICsgIGBgc3QxYGAgYW5kIGBgc2MxYGA6IDEyNS0xNiwzODRcbiAqICAgKyAgYGBzdGFuZGFyZGBgOiAxLTEsMDI0XG4gKi9cblNpemVJbkdpQj86IG51bWJlclxuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHZvbHVtZS4gVGhpcyBpcyB0aGUgQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgQVdTIGluZnJhc3RydWN0dXJlLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIEFtYXpvbiBFQ1MtbWFuYWdlZCBgYEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXNgYCBJQU0gcG9saWN5IHdpdGggdGhpcyByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9pbmZyYXN0cnVjdHVyZV9JQU1fcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQ1MgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSB0YWcgc3BlY2lmaWNhdGlvbnMgb2YgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUJTVGFnU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIOKAqHRoZSBBbWF6b24gRUJTIHZvbHVtZS4gVGFncyBjYW4gb25seSBwcm9wYWdhdGUgdG8gYSBgYFNFUlZJQ0VgYCBzcGVjaWZpZWQgaW4g4oCoYGBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbmBgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCDigKhwcm9wYWdhdGVkLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcbi8qKlxuICogVGhlIHR5cGUgb2Ygdm9sdW1lIHJlc291cmNlLlxuICovXG5SZXNvdXJjZVR5cGU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyBhcHBsaWVkIHRvIHRoaXMgQW1hem9uIEVCUyB2b2x1bWUuIGBgQW1hem9uRUNTQ3JlYXRlZGBgIGFuZCBgYEFtYXpvbkVDU01hbmFnZWRgYCBhcmUgcmVzZXJ2ZWQgdGFncyB0aGF0IGNhbid0IGJlIHVzZWQuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gYSByZXNvdXJjZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgdGhlbS5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICogICBcbiAqICBJbiBvcmRlciB0byB0YWcgYSBzZXJ2aWNlIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcgQVJOIGZvcm1hdCwgeW91IG5lZWQgdG8gbWlncmF0ZSB0aGUgc2VydmljZSB0byB0aGUgbG9uZyBBUk4uIFlvdSBtdXN0IHVzZSB0aGUgQVBJLCBDTEkgb3IgY29uc29sZSB0byBtaWdyYXRlIHRoZSBzZXJ2aWNlIEFSTi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWlncmF0ZSBhbiBzaG9ydCBzZXJ2aWNlIEFSTiB0byBhIGxvbmcgQVJOXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWFybi1taWdyYXRpb24uaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICogICBgYGFybjphd3M6ZWNzOnJlZ2lvbjphd3NfYWNjb3VudF9pZDpzZXJ2aWNlL3NlcnZpY2UtbmFtZWBgIFxuICogIEFmdGVyIHRoZSBtaWdyYXRpb24gaXMgY29tcGxldGUsIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6XG4gKiAgICsgICBUaGUgc2VydmljZSBBUk4gaXM6IGBgYXJuOmF3czplY3M6cmVnaW9uOmF3c19hY2NvdW50X2lkOnNlcnZpY2UvY2x1c3Rlci1uYW1lL3NlcnZpY2UtbmFtZWBgXG4gKiAgICsgIFlvdSBjYW4gdXNlIENGTiB0byB0YWcgdGhlIHNlcnZpY2UgYXMgeW91IHdvdWxkIGEgc2VydmljZSB3aXRoIGEgbG9uZyBBUk4gZm9ybWF0LlxuICogICArICBXaGVuIHRoZSBgYFBoeXNpY2FsUmVzb3VyY2VJZGBgIGluIHRoZSBDRk4gc3RhY2sgcmVwcmVzZW50cyBhIHNlcnZpY2UsIHRoZSB2YWx1ZSBkb2VzIG5vdCBjaGFuZ2UgYW5kIHdpbGwgYmUgdGhlIHNob3J0IHNlcnZpY2UgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBvcHRpb25hbCBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBgdmFsdWVgYCBhY3RzIGFzIGEgZGVzY3JpcHRvciB3aXRoaW4gYSB0YWcgY2F0ZWdvcnkgKGtleSkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIE9uZSBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBga2V5YGAgaXMgYSBnZW5lcmFsIGxhYmVsIHRoYXQgYWN0cyBsaWtlIGEgY2F0ZWdvcnkgZm9yIG1vcmUgc3BlY2lmaWMgdGFnIHZhbHVlcy5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGJlIHNldCB3aGVuIHVzaW5nIHRoZSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBBUElzIG9yIGFzIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGZvciBhIGNsdXN0ZXIgd2l0aCB0aGUgYGBDcmVhdGVDbHVzdGVyYGAgQVBJLlxuICogIE9ubHkgY2FwYWNpdHkgcHJvdmlkZXJzIHRoYXQgYXJlIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBhbmQgaGF2ZSBhbiBgYEFDVElWRWBgIG9yIGBgVVBEQVRJTkdgYCBzdGF0dXMgY2FuIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gVGhlIGBgUHV0Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJzYGAgQVBJIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgY2FwYWNpdHkgcHJvdmlkZXIgd2l0aCBhIGNsdXN0ZXIuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC4gTmV3IEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYGBDcmVhdGVDYXBhY2l0eVByb3ZpZGVyYGAgQVBJIG9wZXJhdGlvbi5cbiAqICBUbyB1c2UgYW4gRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW0ge1xuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXIuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlICpiYXNlKiB2YWx1ZSBkZXNpZ25hdGVzIGhvdyBtYW55IHRhc2tzLCBhdCBhIG1pbmltdW0sIHRvIHJ1biBvbiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyIGZvciBlYWNoIHNlcnZpY2UuIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGhhdmUgYSAqYmFzZSogZGVmaW5lZC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICogIEJhc2UgdmFsdWUgY2hhcmFjdGVyaXN0aWNzOlxuICogICArICBPbmx5IG9uZSBjYXBhY2l0eSBwcm92aWRlciBpbiBhIHN0cmF0ZWd5IGNhbiBoYXZlIGEgYmFzZSBkZWZpbmVkXG4gKiAgICsgIERlZmF1bHQgdmFsdWUgaXMgYGAwYGAgaWYgbm90IHNwZWNpZmllZFxuICogICArICBWYWxpZCByYW5nZTogMCB0byAxMDAsMDAwXG4gKiAgICsgIEJhc2UgcmVxdWlyZW1lbnRzIGFyZSBzYXRpc2ZpZWQgZmlyc3QgYmVmb3JlIHdlaWdodCBkaXN0cmlidXRpb25cbiAqL1xuQmFzZT86IG51bWJlclxuLyoqXG4gKiBUaGUgKndlaWdodCogdmFsdWUgZGVzaWduYXRlcyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzIGxhdW5jaGVkIHRoYXQgc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBUaGUgYGB3ZWlnaHRgYCB2YWx1ZSBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYWZ0ZXIgdGhlIGBgYmFzZWBgIHZhbHVlLCBpZiBkZWZpbmVkLCBpcyBzYXRpc2ZpZWQuXG4gKiAgSWYgbm8gYGB3ZWlnaHRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIFdoZW4gbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3ksIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSBhIHdlaWdodCB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYW55IGNhcGFjaXR5IHByb3ZpZGVycyB3aXRoIGEgd2VpZ2h0IG9mIGBgMGBgIGNhbid0IGJlIHVzZWQgdG8gcGxhY2UgdGFza3MuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBpbiBhIHN0cmF0ZWd5IHRoYXQgYWxsIGhhdmUgYSB3ZWlnaHQgb2YgYGAwYGAsIGFueSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBhY3Rpb25zIHVzaW5nIHRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB3aWxsIGZhaWwuXG4gKiAgV2VpZ2h0IHZhbHVlIGNoYXJhY3RlcmlzdGljczpcbiAqICAgKyAgV2VpZ2h0IGlzIGNvbnNpZGVyZWQgYWZ0ZXIgdGhlIGJhc2UgdmFsdWUgaXMgc2F0aXNmaWVkXG4gKiAgICsgIERlZmF1bHQgdmFsdWUgaXMgYGAwYGAgaWYgbm90IHNwZWNpZmllZFxuICogICArICBWYWxpZCByYW5nZTogMCB0byAxLDAwMFxuICogICArICBBdCBsZWFzdCBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgbXVzdCBoYXZlIGEgd2VpZ2h0IGdyZWF0ZXIgdGhhbiB6ZXJvXG4gKiAgICsgIENhcGFjaXR5IHByb3ZpZGVycyB3aXRoIHdlaWdodCBvZiBgYDBgYCBjYW5ub3QgcGxhY2UgdGFza3NcbiAqICAgXG4gKiAgVGFzayBkaXN0cmlidXRpb24gbG9naWM6XG4gKiAgIDEuICBCYXNlIHNhdGlzZmFjdGlvbjogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHRhc2tzIHNwZWNpZmllZCBieSB0aGUgYmFzZSB2YWx1ZSBhcmUgcGxhY2VkIG9uIHRoYXQgY2FwYWNpdHkgcHJvdmlkZXJcbiAqICAgMS4gIFdlaWdodCBkaXN0cmlidXRpb246IEFmdGVyIGJhc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGFkZGl0aW9uYWwgdGFza3MgYXJlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB3ZWlnaHQgcmF0aW9zXG4gKiAgIFxuICogIEV4YW1wbGVzOlxuICogIEVxdWFsIERpc3RyaWJ1dGlvbjogVHdvIGNhcGFjaXR5IHByb3ZpZGVycyBib3RoIHdpdGggd2VpZ2h0IGBgMWBgIHdpbGwgc3BsaXQgdGFza3MgZXZlbmx5IGFmdGVyIGJhc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQuXG4gKiAgV2VpZ2h0ZWQgRGlzdHJpYnV0aW9uOiBJZiBjYXBhY2l0eVByb3ZpZGVyQSBoYXMgd2VpZ2h0IGBgMWBgIGFuZCBjYXBhY2l0eVByb3ZpZGVyQiBoYXMgd2VpZ2h0IGBgNGBgLCB0aGVuIGZvciBldmVyeSAxIHRhc2sgb24gQSwgNCB0YXNrcyB3aWxsIHJ1biBvbiBCLlxuICovXG5XZWlnaHQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciB0YXNrIGRlZmluaXRpb25zIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSB0byByZWNlaXZlIHRoZWlyIG93biBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBhbmQgaXQgaXMgbm90IHN1cHBvcnRlZCBmb3Igb3RoZXIgbmV0d29yayBtb2Rlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBOZXR3b3JraW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLW5ldHdvcmtpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtDb25maWd1cmF0aW9uIHtcbkF3c3ZwY0NvbmZpZ3VyYXRpb24/OiBBd3NWcGNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzVnBjQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHNlY3VyaXR5IGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzZWN1cml0eSBncm91cCwgdGhlIGRlZmF1bHQgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBWUEMgaXMgdXNlZC4gVGhlcmUncyBhIGxpbWl0IG9mIDUgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgY2FuIGJlIHNwZWNpZmllZC5cbiAqICAgQWxsIHNwZWNpZmllZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuU2VjdXJpdHlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBUaGVyZSdzIGEgbGltaXQgb2YgMTYgc3VibmV0cyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TdWJuZXRzPzogc3RyaW5nW11cbi8qKlxuICogV2hldGhlciB0aGUgdGFzaydzIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcmVjZWl2ZXMgYSBwdWJsaWMgSVAgYWRkcmVzcy4gXG4gKiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyB3aGVuIHlvdSBzZXQgdGhpcyB2YWx1ZTpcbiAqICAgKyAgV2hlbiB5b3UgdXNlIGBgY3JlYXRlLXNlcnZpY2VgYCBvciBgYHVwZGF0ZS1zZXJ2aWNlYGAsIHRoZSBkZWZhdWx0IGlzIGBgRElTQUJMRURgYC4gXG4gKiAgICsgIFdoZW4gdGhlIHNlcnZpY2UgYGBkZXBsb3ltZW50Q29udHJvbGxlcmBgIGlzIGBgRUNTYGAsIHRoZSB2YWx1ZSBtdXN0IGJlIGBgRElTQUJMRURgYC5cbiAqL1xuQXNzaWduUHVibGljSXA/OiAoXCJESVNBQkxFRFwiIHwgXCJFTkFCTEVEXCIpXG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBmb3JjZSBhIG5ldyBkZXBsb3ltZW50IG9mIHRoZSBzZXJ2aWNlLiBCeSBkZWZhdWx0LCBkZXBsb3ltZW50cyBhcmVuJ3QgZm9yY2VkLiBZb3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzdGFydCBhIG5ldyBkZXBsb3ltZW50IHdpdGggbm8gc2VydmljZSBkZWZpbml0aW9uIGNoYW5nZXMuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVwZGF0ZSBhIHNlcnZpY2UncyB0YXNrcyB0byB1c2UgYSBuZXdlciBEb2NrZXIgaW1hZ2Ugd2l0aCB0aGUgc2FtZSBpbWFnZS90YWcgY29tYmluYXRpb24gKGBgbXlfaW1hZ2U6bGF0ZXN0YGApIG9yIHRvIHJvbGwgRmFyZ2F0ZSB0YXNrcyBvbnRvIGEgbmV3ZXIgcGxhdGZvcm0gdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JjZU5ld0RlcGxveW1lbnQge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZm9yY2UgYSBuZXcgZGVwbG95bWVudCBvZiB0aGUgc2VydmljZS4gQnkgZGVmYXVsdCwgZGVwbG95bWVudHMgYXJlbid0IGZvcmNlZC4gWW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3RhcnQgYSBuZXcgZGVwbG95bWVudCB3aXRoIG5vIHNlcnZpY2UgZGVmaW5pdGlvbiBjaGFuZ2VzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiB1cGRhdGUgYSBzZXJ2aWNlJ3MgdGFza3MgdG8gdXNlIGEgbmV3ZXIgRG9ja2VyIGltYWdlIHdpdGggdGhlIHNhbWUgaW1hZ2UvdGFnIGNvbWJpbmF0aW9uIChgYG15X2ltYWdlOmxhdGVzdGBgKSBvciB0byByb2xsIEZhcmdhdGUgdGFza3Mgb250byBhIG5ld2VyIHBsYXRmb3JtIHZlcnNpb24uXG4gKi9cbkVuYWJsZUZvcmNlTmV3RGVwbG95bWVudDogYm9vbGVhblxuLyoqXG4gKiBXaGVuIHlvdSBjaGFuZ2UgdGhlYGBGb3JjZU5ld0RlcGxveW1lbnROb25jZWBgIHZhbHVlIGluIHlvdXIgdGVtcGxhdGUsIGl0IHNpZ25hbHMgRUNTIHRvIHN0YXJ0IGEgbmV3IGRlcGxveW1lbnQgZXZlbiB0aG91Z2ggbm8gb3RoZXIgc2VydmljZSBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC4gVGhlIHZhbHVlIG11c3QgYmUgYSB1bmlxdWUsIHRpbWUtIHZhcnlpbmcgdmFsdWUgbGlrZSBhIHRpbWVzdGFtcCwgcmFuZG9tIHN0cmluZywgb3Igc2VxdWVuY2UgbnVtYmVyLiBVc2UgdGhpcyBwcm9wZXJ0eSB3aGVuIHlvdSB3YW50IHRvIGVuc3VyZSB5b3VyIHRhc2tzIHBpY2sgdXAgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgRG9ja2VyIGltYWdlIHRoYXQgdXNlcyB0aGUgc2FtZSB0YWcgYnV0IGhhcyBiZWVuIHVwZGF0ZWQgaW4gdGhlIHJlZ2lzdHJ5LlxuICovXG5Gb3JjZU5ld0RlcGxveW1lbnROb25jZT86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29uc3RyYWludCBvbiB0YXNrIHBsYWNlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgY29uc3RyYWludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LWNvbnN0cmFpbnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91J3JlIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudENvbnN0cmFpbnQge1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBjb25zdHJhaW50LiBVc2UgYGBkaXN0aW5jdEluc3RhbmNlYGAgdG8gZW5zdXJlIHRoYXQgZWFjaCB0YXNrIGluIGEgcGFydGljdWxhciBncm91cCBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGNvbnRhaW5lciBpbnN0YW5jZS4gVXNlIGBgbWVtYmVyT2ZgYCB0byByZXN0cmljdCB0aGUgc2VsZWN0aW9uIHRvIGEgZ3JvdXAgb2YgdmFsaWQgY2FuZGlkYXRlcy5cbiAqL1xuVHlwZTogKFwiZGlzdGluY3RJbnN0YW5jZVwiIHwgXCJtZW1iZXJPZlwiKVxuLyoqXG4gKiBBIGNsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2UgZXhwcmVzc2lvbiB0byBhcHBseSB0byB0aGUgY29uc3RyYWludC4gVGhlIGV4cHJlc3Npb24gY2FuIGhhdmUgYSBtYXhpbXVtIGxlbmd0aCBvZiAyMDAwIGNoYXJhY3RlcnMuIFlvdSBjYW4ndCBzcGVjaWZ5IGFuIGV4cHJlc3Npb24gaWYgdGhlIGNvbnN0cmFpbnQgdHlwZSBpcyBgYGRpc3RpbmN0SW5zdGFuY2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2x1c3RlciBxdWVyeSBsYW5ndWFnZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY2x1c3Rlci1xdWVyeS1sYW5ndWFnZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkV4cHJlc3Npb24/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGBgTG9hZEJhbGFuY2VyYGAgcHJvcGVydHkgc3BlY2lmaWVzIGRldGFpbHMgb24gYSBsb2FkIGJhbGFuY2VyIHRoYXQgaXMgdXNlZCB3aXRoIGEgc2VydmljZS5cbiAqICBJZiB0aGUgc2VydmljZSBpcyB1c2luZyB0aGUgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgdGhlIHNlcnZpY2UgaXMgcmVxdWlyZWQgdG8gdXNlIGVpdGhlciBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gV2hlbiB5b3UgYXJlIGNyZWF0aW5nIGFuIEFDRGxvbmcgZGVwbG95bWVudCBncm91cCwgeW91IHNwZWNpZnkgdHdvIHRhcmdldCBncm91cHMgKHJlZmVycmVkIHRvIGFzIGEgYGB0YXJnZXRHcm91cFBhaXJgYCkuIEVhY2ggdGFyZ2V0IGdyb3VwIGJpbmRzIHRvIGEgc2VwYXJhdGUgdGFzayBzZXQgaW4gdGhlIGRlcGxveW1lbnQuIFRoZSBsb2FkIGJhbGFuY2VyIGNhbiBhbHNvIGhhdmUgdXAgdG8gdHdvIGxpc3RlbmVycywgYSByZXF1aXJlZCBsaXN0ZW5lciBmb3IgcHJvZHVjdGlvbiB0cmFmZmljIGFuZCBhbiBvcHRpb25hbCBsaXN0ZW5lciB0aGF0IGFsbG93cyB5b3UgdG8gdGVzdCBuZXcgcmV2aXNpb25zIG9mIHRoZSBzZXJ2aWNlIGJlZm9yZSByb3V0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC5cbiAqICBTZXJ2aWNlcyB3aXRoIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSAoZm9yIGV4YW1wbGUsIHRob3NlIHdpdGggdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUpIG9ubHkgc3VwcG9ydCBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycyBhbmQgTmV0d29yayBMb2FkIEJhbGFuY2Vycy4gQ2xhc3NpYyBMb2FkIEJhbGFuY2VycyBhcmUgbm90IHN1cHBvcnRlZC4gQWxzbywgd2hlbiB5b3UgY3JlYXRlIGFueSB0YXJnZXQgZ3JvdXBzIGZvciB0aGVzZSBzZXJ2aWNlcywgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIFRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlciB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRhcmdldCBncm91cCBvciBncm91cHMgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBBIHRhcmdldCBncm91cCBBUk4gaXMgb25seSBzcGVjaWZpZWQgd2hlbiB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYEVDU2BgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91IGNhbiBzcGVjaWZ5IG9uZSBvciBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZWdpc3RlcmluZyBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzIHdpdGggYSBzZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9yZWdpc3Rlci1tdWx0aXBsZS10YXJnZXRncm91cHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91J3JlIHJlcXVpcmVkIHRvIGRlZmluZSB0d28gdGFyZ2V0IGdyb3VwcyBmb3IgdGhlIGxvYWQgYmFsYW5jZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JsdWUvZ3JlZW4gZGVwbG95bWVudCB3aXRoIENvZGVEZXBsb3ldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1ibHVlZ3JlZW4uaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3VyIHNlcnZpY2UncyB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBEbyB0aGlzIHdoZW4gY3JlYXRpbmcgeW91ciB0YXJnZXQgZ3JvdXBzIGJlY2F1c2UgdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuIFRoaXMgbmV0d29yayBtb2RlIGlzIHJlcXVpcmVkIGZvciB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS5cbiAqL1xuVGFyZ2V0R3JvdXBBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxvYWQgYmFsYW5jZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBJZiB5b3UgYXJlIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgYSBOZXR3b3JrIExvYWQgQmFsYW5jZXIgdGhlIGxvYWQgYmFsYW5jZXIgbmFtZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9taXR0ZWQuXG4gKi9cbkxvYWRCYWxhbmNlck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciAoYXMgaXQgYXBwZWFycyBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uKSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAqICBZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb250YWluZXIgbmFtZSB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0YXJnZXQgZ3JvdXAgZm9yIGFuIEFtYXpvbiBFQ1MgbG9hZCBiYWxhbmNlci5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBvbiB0aGUgY29udGFpbmVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLiBUaGlzIHBvcnQgbXVzdCBjb3JyZXNwb25kIHRvIGEgYGBjb250YWluZXJQb3J0YGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHVzaW5nLiBGb3IgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGV5J3JlIGxhdW5jaGVkIG9uIG11c3QgYWxsb3cgaW5ncmVzcyB0cmFmZmljIG9uIHRoZSBgYGhvc3RQb3J0YGAgb2YgdGhlIHBvcnQgbWFwcGluZy5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxuQWR2YW5jZWRDb25maWd1cmF0aW9uPzogQWR2YW5jZWRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBhZHZhbmNlZCBzZXR0aW5ncyBmb3IgdGhlIGxvYWQgYmFsYW5jZXIgdXNlZCBpbiBibHVlL2dyZWVuIGRlcGxveW1lbnRzLiBTcGVjaWZ5IHRoZSBhbHRlcm5hdGUgdGFyZ2V0IGdyb3VwLCBsaXN0ZW5lciBydWxlcywgYW5kIElBTSByb2xlIHJlcXVpcmVkIGZvciB0cmFmZmljIHNoaWZ0aW5nIGR1cmluZyBibHVlL2dyZWVuIGRlcGxveW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSB0aGF0IGlkZW50aWZpZXMgKSB0aGF0IGlkZW50aWZpZXMgdGhlIHRlc3QgbGlzdGVuZXIgcnVsZSAoaW4gdGhlIGNhc2Ugb2YgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcikgb3IgbGlzdGVuZXIgKGluIHRoZSBjYXNlIGZvciBhbiBOZXR3b3JrIExvYWQgQmFsYW5jZXIpIGZvciByb3V0aW5nIHRlc3QgdHJhZmZpYy5cbiAqL1xuVGVzdExpc3RlbmVyUnVsZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGFsdGVybmF0ZSB0YXJnZXQgZ3JvdXAgZm9yIEFtYXpvbiBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cy5cbiAqL1xuQWx0ZXJuYXRlVGFyZ2V0R3JvdXBBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgdGhhdCB0aGF0IGlkZW50aWZpZXMgdGhlIHByb2R1Y3Rpb24gbGlzdGVuZXIgcnVsZSAoaW4gdGhlIGNhc2Ugb2YgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcikgb3IgbGlzdGVuZXIgKGluIHRoZSBjYXNlIGZvciBhbiBOZXR3b3JrIExvYWQgQmFsYW5jZXIpIGZvciByb3V0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYy5cbiAqL1xuUHJvZHVjdGlvbkxpc3RlbmVyUnVsZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIEFtYXpvbiBFQ1MgcGVybWlzc2lvbiB0byBjYWxsIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIEFQSXMgZm9yIHlvdS5cbiAqL1xuUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlIHRvIGRpc2NvdmVyIGFuZCBjb25uZWN0IHRvIHNlcnZpY2VzLCBhbmQgYmUgZGlzY292ZXJlZCBieSwgYW5kIGNvbm5lY3RlZCBmcm9tLCBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gYSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBsaXN0IG9mIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdHMuIFRoZXNlIGFyZSBuYW1lcyBhbmQgYWxpYXNlcyAoYWxzbyBrbm93biBhcyBlbmRwb2ludHMpIHRoYXQgYXJlIHVzZWQgYnkgb3RoZXIgQW1hem9uIEVDUyBzZXJ2aWNlcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gXG4gKiAgVGhpcyBmaWVsZCBpcyBub3QgcmVxdWlyZWQgZm9yIGEgXCJjbGllbnRcIiBBbWF6b24gRUNTIHNlcnZpY2UgdGhhdCdzIGEgbWVtYmVyIG9mIGEgbmFtZXNwYWNlIG9ubHkgdG8gY29ubmVjdCB0byBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gdGhlIG5hbWVzcGFjZS4gQW4gZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIGEgZnJvbnRlbmQgYXBwbGljYXRpb24gdGhhdCBhY2NlcHRzIGluY29taW5nIHJlcXVlc3RzIGZyb20gZWl0aGVyIGEgbG9hZCBiYWxhbmNlciB0aGF0J3MgYXR0YWNoZWQgdG8gdGhlIHNlcnZpY2Ugb3IgYnkgb3RoZXIgbWVhbnMuXG4gKiAgQW4gb2JqZWN0IHNlbGVjdHMgYSBwb3J0IGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiwgYXNzaWducyBhIG5hbWUgZm9yIHRoZSBDTUFQbG9uZyBzZXJ2aWNlLCBhbmQgYSBsaXN0IG9mIGFsaWFzZXMgKGVuZHBvaW50cykgYW5kIHBvcnRzIGZvciBjbGllbnQgYXBwbGljYXRpb25zIHRvIHJlZmVyIHRvIHRoaXMgc2VydmljZS5cbiAqL1xuU2VydmljZXM/OiBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VbXVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB1c2UgU2VydmljZSBDb25uZWN0IHdpdGggdGhpcyBzZXJ2aWNlLlxuICovXG5FbmFibGVkOiBib29sZWFuXG5Mb2dDb25maWd1cmF0aW9uPzogTG9nQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZXNwYWNlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQ01BUGxvbmcgbmFtZXNwYWNlIGZvciB1c2Ugd2l0aCBTZXJ2aWNlIENvbm5lY3QuIFRoZSBuYW1lc3BhY2UgbXVzdCBiZSBpbiB0aGUgc2FtZSBBV1MgUmVnaW9uIGFzIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UgYW5kIGNsdXN0ZXIuIFRoZSB0eXBlIG9mIG5hbWVzcGFjZSBkb2Vzbid0IGFmZmVjdCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENNQVBsb25nLCBzZWUgW1dvcmtpbmcgd2l0aCBTZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvZGcvd29ya2luZy13aXRoLXNlcnZpY2VzLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTmFtZXNwYWNlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3QgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0U2VydmljZSB7XG5UaW1lb3V0PzogVGltZW91dENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5IHRvIGxpc3RlbiBvbi5cbiAqICBVc2UgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgdG8gYnlwYXNzIHRoZSBwcm94eSBmb3IgdHJhZmZpYyBvbiB0aGUgcG9ydCBudW1iZXIgc3BlY2lmaWVkIGluIHRoZSBuYW1lZCBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIGFwcGxpY2F0aW9uLCBhbmQgdGhlbiB1c2UgaXQgaW4geW91ciBWUEMgc2VjdXJpdHkgZ3JvdXBzIHRvIGFsbG93IHRyYWZmaWMgaW50byB0aGUgcHJveHkgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICogIEluIGBgYXdzdnBjYGAgbW9kZSBhbmQgRmFyZ2F0ZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGNvbnRhaW5lciBwb3J0IG51bWJlci4gVGhlIGNvbnRhaW5lciBwb3J0IG51bWJlciBpcyBpbiB0aGUgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIEluIGJyaWRnZSBtb2RlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZXBoZW1lcmFsIHBvcnQgb2YgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS5cbiAqL1xuSW5ncmVzc1BvcnRPdmVycmlkZT86IG51bWJlclxuLyoqXG4gKiBUaGUgbGlzdCBvZiBjbGllbnQgYWxpYXNlcyBmb3IgdGhpcyBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZS4gWW91IHVzZSB0aGVzZSB0byBhc3NpZ24gbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnQgYXBwbGljYXRpb25zLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2xpZW50IGFsaWFzZXMgdGhhdCB5b3UgY2FuIGhhdmUgaW4gdGhpcyBsaXN0IGlzIDEuXG4gKiAgRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIEFtYXpvbiBFQ1MgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIEZvciBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAsIHlvdSBtdXN0IHByb3ZpZGUgYXQgbGVhc3Qgb25lIGBgY2xpZW50QWxpYXNgYCB3aXRoIG9uZSBgYHBvcnRgYC5cbiAqL1xuQ2xpZW50QWxpYXNlcz86IFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXNbXVxuVGxzPzogU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpcyB0aGUgbmFtZSBvZiB0aGUgbmV3IENNQVAgc2VydmljZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuIFRoaXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBDTUFQIG5hbWVzcGFjZS4gVGhlIG5hbWUgY2FuIGNvbnRhaW4gdXAgdG8gNjQgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgYW5kIGh5cGhlbnMgKC0pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICovXG5EaXNjb3ZlcnlOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBgYHBvcnROYW1lYGAgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGBgcG9ydE1hcHBpbmdzYGAgZnJvbSBhbGwgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBjb25maWd1cmVkIHRpbWVvdXRzIGZvciBTZXJ2aWNlIENvbm5lY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZW91dENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgd2FpdGluZyBmb3IgdGhlIHVwc3RyZWFtIHRvIHJlc3BvbmQgd2l0aCBhIGNvbXBsZXRlIHJlc3BvbnNlIHBlciByZXF1ZXN0LiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYHBlclJlcXVlc3RUaW1lb3V0YGAuIGBgcGVyUmVxdWVzdFRpbWVvdXRgYCBjYW4gb25seSBiZSBzZXQgaWYgU2VydmljZSBDb25uZWN0IGBgYXBwUHJvdG9jb2xgYCBpc24ndCBgYFRDUGBgLiBPbmx5IGBgaWRsZVRpbWVvdXRgYCBpcyBhbGxvd2VkIGZvciBgYFRDUGBgYGBhcHBQcm90b2NvbGBgLlxuICovXG5QZXJSZXF1ZXN0VGltZW91dFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgYSBjb25uZWN0aW9uIHdpbGwgc3RheSBhY3RpdmUgd2hpbGUgaWRsZS4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBpZGxlVGltZW91dGBgLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBIVFRQYGAvYGBIVFRQMmBgL2BgR1JQQ2BgIGlzIDUgbWludXRlcy5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgVENQYGAgaXMgMSBob3VyLlxuICovXG5JZGxlVGltZW91dFNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDbGllbnRBbGlhcyB7XG4vKipcbiAqIFRoZSBgYGRuc05hbWVgYCBpcyB0aGUgbmFtZSB0aGF0IHlvdSB1c2UgaW4gdGhlIGFwcGxpY2F0aW9ucyBvZiBjbGllbnQgdGFza3MgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFRoZSBuYW1lIG11c3QgYmUgYSB2YWxpZCBETlMgbmFtZSBidXQgZG9lc24ndCBuZWVkIHRvIGJlIGZ1bGx5LXF1YWxpZmllZC4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgdXAgdG8gMTI3IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGh5cGhlbnMgKC0pLCBhbmQgcGVyaW9kcyAoLikuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYGRpc2NvdmVyeU5hbWUubmFtZXNwYWNlYGAgaXMgdXNlZC4gSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIG5hbWUgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGEgZmV3IGNvbW1vbiBuYW1lcyBhcmUgYGBkYXRhYmFzZWBgLCBgYGRiYGAsIG9yIHRoZSBsb3dlcmNhc2UgbmFtZSBvZiBhIGRhdGFiYXNlLCBzdWNoIGFzIGBgbXlzcWxgYCBvciBgYHJlZGlzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRG5zTmFtZT86IHN0cmluZ1xuVGVzdFRyYWZmaWNSdWxlcz86IFNlcnZpY2VDb25uZWN0VGVzdFRyYWZmaWNSdWxlc1xuLyoqXG4gKiBUaGUgbGlzdGVuaW5nIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LiBUaGlzIHBvcnQgaXMgYXZhaWxhYmxlIGluc2lkZSBvZiBhbGwgb2YgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2UuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIHBvcnQgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Qb3J0OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3QgdHJhZmZpYyByb3V0aW5nIHJ1bGVzIHVzZWQgZHVyaW5nIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMgd2l0aCBBbWF6b24gRUNTIFNlcnZpY2UgQ29ubmVjdC4gVGhpcyBhbGxvd3MgeW91IHRvIHJvdXRlIGEgcG9ydGlvbiBvZiB0cmFmZmljIHRvIHRoZSBuZXcgc2VydmljZSByZXZpc2lvbiBvZiB5b3VyIHNlcnZpY2UgZm9yIHRlc3RpbmcgYmVmb3JlIHNoaWZ0aW5nIGFsbCBwcm9kdWN0aW9uIHRyYWZmaWMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzIHtcbkhlYWRlcjogU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzSGVhZGVyXG59XG4vKipcbiAqIFRoZSBIVFRQIGhlYWRlci1iYXNlZCByb3V0aW5nIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lIHdoaWNoIHJlcXVlc3RzIHNob3VsZCBiZSByb3V0ZWQgdG8gdGhlIG5ldyBzZXJ2aWNlIHZlcnNpb24gZHVyaW5nIGJsdWUvZ3JlZW4gZGVwbG95bWVudCB0ZXN0aW5nLiBUaGVzZSBydWxlcyBwcm92aWRlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdGVzdCB0cmFmZmljIHJvdXRpbmcgYmFzZWQgb24gcmVxdWVzdCBoZWFkZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGVzdFRyYWZmaWNSdWxlc0hlYWRlciB7XG5WYWx1ZT86IFNlcnZpY2VDb25uZWN0VGVzdFRyYWZmaWNSdWxlc0hlYWRlclZhbHVlXG5OYW1lOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzSGVhZGVyVmFsdWUge1xuRXhhY3Q6IHN0cmluZ1xufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uIHtcbklzc3VlckNlcnRpZmljYXRlQXV0aG9yaXR5OiBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5XG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkuXG4gKi9cbkttc0tleT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIFNlcnZpY2UgQ29ubmVjdCBUTFMuXG4gKi9cblJvbGVBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHNpZ25lciBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eSB7XG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSBjZXJ0aWZpY2F0ZS5cbiAqL1xuQXdzUGNhQXV0aG9yaXR5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExvZ0NvbmZpZ2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWxvZy1kcml2ZXJgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBCeSBkZWZhdWx0LCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBsb2dnaW5nIGRyaXZlciB0aGF0IHRoZSBEb2NrZXIgZGFlbW9uIHVzZXMuIEhvd2V2ZXIsIHRoZSBjb250YWluZXIgbWlnaHQgdXNlIGEgZGlmZmVyZW50IGxvZ2dpbmcgZHJpdmVyIHRoYW4gdGhlIERvY2tlciBkYWVtb24gYnkgc3BlY2lmeWluZyBhIGxvZyBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gKiAgVW5kZXJzdGFuZCB0aGUgZm9sbG93aW5nIHdoZW4gc3BlY2lmeWluZyBhIGxvZyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNvbnRhaW5lcnMuXG4gKiAgICsgIEFtYXpvbiBFQ1MgY3VycmVudGx5IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHRoZSBsb2dnaW5nIGRyaXZlcnMgYXZhaWxhYmxlIHRvIHRoZSBEb2NrZXIgZGFlbW9uLiBBZGRpdGlvbmFsIGxvZyBkcml2ZXJzIG1heSBiZSBhdmFpbGFibGUgaW4gZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudC5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCxgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogICArICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTggb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBtdXN0IHJlZ2lzdGVyIHRoZSBhdmFpbGFibGUgbG9nZ2luZyBkcml2ZXJzIHdpdGggdGhlIGBgRUNTX0FWQUlMQUJMRV9MT0dHSU5HX0RSSVZFUlNgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgY29udGFpbmVycyBwbGFjZWQgb24gdGhhdCBpbnN0YW5jZSBjYW4gdXNlIHRoZXNlIGxvZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC1jb25maWcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgb24gRkFSR0FURWxvbmcsIGJlY2F1c2UgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIHlvdXIgdGFza3MgYXJlIGhvc3RlZCBvbiwgYW55IGFkZGl0aW9uYWwgc29mdHdhcmUgbmVlZGVkIG11c3QgYmUgaW5zdGFsbGVkIG91dHNpZGUgb2YgdGhlIHRhc2suIEZvciBleGFtcGxlLCB0aGUgRmx1ZW50ZCBvdXRwdXQgYWdncmVnYXRvcnMgb3IgYSByZW1vdGUgaG9zdCBydW5uaW5nIExvZ3N0YXNoIHRvIHNlbmQgR2VsZiBsb2dzIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBsb2cgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlY3JldE9wdGlvbnM/OiBTZWNyZXRbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIGxvZyBkcml2ZXIuXG4gKiAgVGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IGRlcGVuZCBvbiB0aGUgbG9nIGRyaXZlci4gU29tZSBvZiB0aGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB5b3UgdXNlIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyIHRvIHJvdXRlIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggaW5jbHVkZSB0aGUgZm9sbG93aW5nOlxuICogICArIGF3c2xvZ3MtY3JlYXRlLWdyb3VwIFJlcXVpcmVkOiBObyBTcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlIGxvZyBncm91cCB0byBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gZmFsc2UuIFlvdXIgSUFNIHBvbGljeSBtdXN0IGluY2x1ZGUgdGhlIGxvZ3M6Q3JlYXRlTG9nR3JvdXAgcGVybWlzc2lvbiBiZWZvcmUgeW91IGF0dGVtcHQgdG8gdXNlIGF3c2xvZ3MtY3JlYXRlLWdyb3VwLiArIGF3c2xvZ3MtcmVnaW9uIFJlcXVpcmVkOiBZZXMgU3BlY2lmeSB0aGUgUmVnaW9uIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBpcyB0byBzZW5kIHlvdXIgRG9ja2VyIGxvZ3MgdG8uIFlvdSBjYW4gY2hvb3NlIHRvIHNlbmQgYWxsIG9mIHlvdXIgbG9ncyBmcm9tIGNsdXN0ZXJzIGluIGRpZmZlcmVudCBSZWdpb25zIHRvIGEgc2luZ2xlIHJlZ2lvbiBpbiBDbG91ZFdhdGNoIExvZ3MuIFRoaXMgaXMgc28gdGhhdCB0aGV5J3JlIGFsbCB2aXNpYmxlIGluIG9uZSBsb2NhdGlvbi4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNlcGFyYXRlIHRoZW0gYnkgUmVnaW9uIGZvciBtb3JlIGdyYW51bGFyaXR5LiBNYWtlIHN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGxvZyBncm91cCBleGlzdHMgaW4gdGhlIFJlZ2lvbiB0aGF0IHlvdSBzcGVjaWZ5IHdpdGggdGhpcyBvcHRpb24uICsgYXdzbG9ncy1ncm91cCBSZXF1aXJlZDogWWVzIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGEgbG9nIGdyb3VwIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBzZW5kcyBpdHMgbG9nIHN0cmVhbXMgdG8uICsgYXdzbG9ncy1zdHJlYW0tcHJlZml4IFJlcXVpcmVkOiBZZXMsIHdoZW4gdXNpbmcgRmFyZ2F0ZS5PcHRpb25hbCB3aGVuIHVzaW5nIEVDMi4gVXNlIHRoZSBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggb3B0aW9uIHRvIGFzc29jaWF0ZSBhIGxvZyBzdHJlYW0gd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCwgdGhlIGNvbnRhaW5lciBuYW1lLCBhbmQgdGhlIElEIG9mIHRoZSBBbWF6b24gRUNTIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIElmIHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gdGFrZXMgdGhlIGZvcm1hdCBwcmVmaXgtbmFtZS9jb250YWluZXItbmFtZS9lY3MtdGFzay1pZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSBpcyBuYW1lZCBhZnRlciB0aGUgY29udGFpbmVyIElEIHRoYXQncyBhc3NpZ25lZCBieSB0aGUgRG9ja2VyIGRhZW1vbiBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLiBCZWNhdXNlIGl0J3MgZGlmZmljdWx0IHRvIHRyYWNlIGxvZ3MgYmFjayB0byB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtIHdpdGgganVzdCB0aGUgRG9ja2VyIGNvbnRhaW5lciBJRCAod2hpY2ggaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSksIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24uIEZvciBBbWF6b24gRUNTIHNlcnZpY2VzLCB5b3UgY2FuIHVzZSB0aGUgc2VydmljZSBuYW1lIGFzIHRoZSBwcmVmaXguIERvaW5nIHNvLCB5b3UgY2FuIHRyYWNlIGxvZyBzdHJlYW1zIHRvIHRoZSBzZXJ2aWNlIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLCB0aGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtLCBhbmQgdGhlIElEIG9mIHRoZSB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBZb3UgbXVzdCBzcGVjaWZ5IGEgc3RyZWFtLXByZWZpeCBmb3IgeW91ciBsb2dzIHRvIGhhdmUgeW91ciBsb2dzIGFwcGVhciBpbiB0aGUgTG9nIHBhbmUgd2hlbiB1c2luZyB0aGUgQW1hem9uIEVDUyBjb25zb2xlLiArIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gaW4gUHl0aG9uIHN0cmZ0aW1lIGZvcm1hdC4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBPbmUgZXhhbXBsZSBvZiBhIHVzZSBjYXNlIGZvciB1c2luZyB0aGlzIGZvcm1hdCBpcyBmb3IgcGFyc2luZyBvdXRwdXQgc3VjaCBhcyBhIHN0YWNrIGR1bXAsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBiZSBsb2dnZWQgaW4gbXVsdGlwbGUgZW50cmllcy4gVGhlIGNvcnJlY3QgcGF0dGVybiBhbGxvd3MgaXQgdG8gYmUgY2FwdHVyZWQgaW4gYSBzaW5nbGUgZW50cnkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gKyBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gdGhhdCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uLiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybi4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBpcyBhbHNvIGNvbmZpZ3VyZWQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gXG4gKiAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFwcGx5IHRvIGFsbCBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMuXG4gKiAgICsgbW9kZSBSZXF1aXJlZDogTm8gVmFsaWQgdmFsdWVzOiBub24tYmxvY2tpbmcgfCBibG9ja2luZyBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBkZWxpdmVyeSBtb2RlIG9mIGxvZyBtZXNzYWdlcyBmcm9tIHRoZSBjb250YWluZXIgdG8gdGhlIGxvZyBkcml2ZXIgc3BlY2lmaWVkIHVzaW5nIGxvZ0RyaXZlci4gVGhlIGRlbGl2ZXJ5IG1vZGUgeW91IGNob29zZSBhZmZlY3RzIGFwcGxpY2F0aW9uIGF2YWlsYWJpbGl0eSB3aGVuIHRoZSBmbG93IG9mIGxvZ3MgZnJvbSBjb250YWluZXIgaXMgaW50ZXJydXB0ZWQuIElmIHlvdSB1c2UgdGhlIGJsb2NraW5nIG1vZGUgYW5kIHRoZSBmbG93IG9mIGxvZ3MgaXMgaW50ZXJydXB0ZWQsIGNhbGxzIGZyb20gY29udGFpbmVyIGNvZGUgdG8gd3JpdGUgdG8gdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgd2lsbCBibG9jay4gVGhlIGxvZ2dpbmcgdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJsb2NrIGFzIGEgcmVzdWx0LiBUaGlzIG1heSBjYXVzZSB0aGUgYXBwbGljYXRpb24gdG8gYmVjb21lIHVucmVzcG9uc2l2ZSBhbmQgbGVhZCB0byBjb250YWluZXIgaGVhbHRoY2hlY2sgZmFpbHVyZS4gSWYgeW91IHVzZSB0aGUgbm9uLWJsb2NraW5nIG1vZGUsIHRoZSBjb250YWluZXIncyBsb2dzIGFyZSBpbnN0ZWFkIHN0b3JlZCBpbiBhbiBpbi1tZW1vcnkgaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb25maWd1cmVkIHdpdGggdGhlIG1heC1idWZmZXItc2l6ZSBvcHRpb24uIFRoaXMgcHJldmVudHMgdGhlIGFwcGxpY2F0aW9uIGZyb20gYmVjb21pbmcgdW5yZXNwb25zaXZlIHdoZW4gbG9ncyBjYW5ub3QgYmUgc2VudC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoaXMgbW9kZSBpZiB5b3Ugd2FudCB0byBlbnN1cmUgc2VydmljZSBhdmFpbGFiaWxpdHkgYW5kIGFyZSBva2F5IHdpdGggc29tZSBsb2cgbG9zcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQcmV2ZW50aW5nIGxvZyBsb3NzIHdpdGggbm9uLWJsb2NraW5nIG1vZGUgaW4gdGhlIGF3c2xvZ3MgY29udGFpbmVyIGxvZyBkcml2ZXIuIFlvdSBjYW4gc2V0IGEgZGVmYXVsdCBtb2RlIGZvciBhbGwgY29udGFpbmVycyBpbiBhIHNwZWNpZmljIFJlZ2lvbiBieSB1c2luZyB0aGUgZGVmYXVsdExvZ0RyaXZlck1vZGUgYWNjb3VudCBzZXR0aW5nLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgbW9kZSBvcHRpb24gb3IgY29uZmlndXJlIHRoZSBhY2NvdW50IHNldHRpbmcsIEFtYXpvbiBFQ1Mgd2lsbCBkZWZhdWx0IHRvIHRoZSBub24tYmxvY2tpbmcgbW9kZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjY291bnQgc2V0dGluZywgc2VlIERlZmF1bHQgbG9nIGRyaXZlciBtb2RlIGluIHRoZSBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUuIE9uIEp1bmUgMjUsIDIwMjUsIEFtYXpvbiBFQ1MgY2hhbmdlZCB0aGUgZGVmYXVsdCBsb2cgZHJpdmVyIG1vZGUgZnJvbSBibG9ja2luZyB0byBub24tYmxvY2tpbmcgdG8gcHJpb3JpdGl6ZSB0YXNrIGF2YWlsYWJpbGl0eSBvdmVyIGxvZ2dpbmcuIFRvIGNvbnRpbnVlIHVzaW5nIHRoZSBibG9ja2luZyBtb2RlIGFmdGVyIHRoaXMgY2hhbmdlLCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzogU2V0IHRoZSBtb2RlIG9wdGlvbiBpbiB5b3VyIGNvbnRhaW5lciBkZWZpbml0aW9uJ3MgbG9nQ29uZmlndXJhdGlvbiBhcyBibG9ja2luZy4gU2V0IHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcgdG8gYmxvY2tpbmcuICsgbWF4LWJ1ZmZlci1zaXplIFJlcXVpcmVkOiBObyBEZWZhdWx0IHZhbHVlOiAxMG0gV2hlbiBub24tYmxvY2tpbmcgbW9kZSBpcyB1c2VkLCB0aGUgbWF4LWJ1ZmZlci1zaXplIGxvZyBvcHRpb24gY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0J3MgdXNlZCBmb3IgaW50ZXJtZWRpYXRlIG1lc3NhZ2Ugc3RvcmFnZS4gTWFrZSBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgYnVmZmVyIHNpemUgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwLCBmdXJ0aGVyIGxvZ3MgY2Fubm90IGJlIHN0b3JlZC4gTG9ncyB0aGF0IGNhbm5vdCBiZSBzdG9yZWQgYXJlIGxvc3QuIFxuICogIFRvIHJvdXRlIGxvZ3MgdXNpbmcgdGhlIGBgc3BsdW5rYGAgbG9nIHJvdXRlciwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGBgc3BsdW5rLXRva2VuYGAgYW5kIGEgYGBzcGx1bmstdXJsYGAuXG4gKiAgV2hlbiB5b3UgdXNlIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIHJvdXRlciB0byByb3V0ZSBsb2dzIHRvIGFuIEFXUyBTZXJ2aWNlIG9yIEFXUyBQYXJ0bmVyIE5ldHdvcmsgZGVzdGluYXRpb24gZm9yIGxvZyBzdG9yYWdlIGFuZCBhbmFseXRpY3MsIHlvdSBjYW4gc2V0IHRoZSBgYGxvZy1kcml2ZXItYnVmZmVyLWxpbWl0YGAgb3B0aW9uIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgYXJlIGJ1ZmZlcmVkIGluIG1lbW9yeSwgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIGxvZyByb3V0ZXIgY29udGFpbmVyLiBJdCBjYW4gaGVscCB0byByZXNvbHZlIHBvdGVudGlhbCBsb2cgbG9zcyBpc3N1ZSBiZWNhdXNlIGhpZ2ggdGhyb3VnaHB1dCBtaWdodCByZXN1bHQgaW4gbWVtb3J5IHJ1bm5pbmcgb3V0IGZvciB0aGUgYnVmZmVyIGluc2lkZSBvZiBEb2NrZXIuXG4gKiAgT3RoZXIgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB1c2luZyBgYGF3c2ZpcmVsZW5zYGAgdG8gcm91dGUgbG9ncyBkZXBlbmQgb24gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gRGF0YSBGaXJlaG9zZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBuYW1lIGZvciB0aGUgbG9nIHN0cmVhbSB3aXRoIGBgZGVsaXZlcnlfc3RyZWFtYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBTdHJlYW1zLCB5b3UgY2FuIHNwZWNpZnkgYW4gQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgZGF0YSBzdHJlYW0gbmFtZSB3aXRoIGBgc3RyZWFtYGAuXG4gKiAgIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UsIHlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGxpa2UgYGBOYW1lYGAsIGBgSG9zdGBgIChPcGVuU2VhcmNoIFNlcnZpY2UgZW5kcG9pbnQgd2l0aG91dCBwcm90b2NvbCksIGBgUG9ydGBgLCBgYEluZGV4YGAsIGBgVHlwZWBgLCBgYEF3c19hdXRoYGAsIGBgQXdzX3JlZ2lvbmBgLCBgYFN1cHByZXNzX1R5cGVfTmFtZWBgLCBhbmQgYGB0bHNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5kZXIgdGhlIGhvb2Q6IEZpcmVMZW5zIGZvciBBbWF6b24gRUNTIFRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29udGFpbmVycy91bmRlci10aGUtaG9vZC1maXJlbGVucy1mb3ItYW1hem9uLWVjcy10YXNrcy8pLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBTMywgeW91IGNhbiBzcGVjaWZ5IHRoZSBidWNrZXQgdXNpbmcgdGhlIGBgYnVja2V0YGAgb3B0aW9uLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBgYHJlZ2lvbmBgLCBgYHRvdGFsX2ZpbGVfc2l6ZWBgLCBgYHVwbG9hZF90aW1lb3V0YGAsIGFuZCBgYHVzZV9wdXRfb2JqZWN0YGAgYXMgb3B0aW9ucy5cbiAqICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTkgb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICovXG5PcHRpb25zPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgZHJpdmVyIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCwgYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBDbG91ZFdhdGNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19hd3Nsb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gYW4gc2VydmljZSBvciBQYXJ0bmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19maXJlbGVucy5odG1sKS5cbiAqICAgSWYgeW91IGhhdmUgYSBjdXN0b20gZHJpdmVyIHRoYXQgaXNuJ3QgbGlzdGVkLCB5b3UgY2FuIGZvcmsgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHByb2plY3QgdGhhdCdzIFthdmFpbGFibGUgb24gR2l0SHViXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tZWNzLWFnZW50KSBhbmQgY3VzdG9taXplIGl0IHRvIHdvcmsgd2l0aCB0aGF0IGRyaXZlci4gV2UgZW5jb3VyYWdlIHlvdSB0byBzdWJtaXQgcHVsbCByZXF1ZXN0cyBmb3IgY2hhbmdlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgaW5jbHVkZWQuIEhvd2V2ZXIsIHdlIGRvbid0IGN1cnJlbnRseSBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgbW9kaWZpZWQgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuXG4gKi9cbkxvZ0RyaXZlcj86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHlvdXIgY29udGFpbmVyLiBTZWNyZXRzIGNhbiBiZSBleHBvc2VkIHRvIGEgY29udGFpbmVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqICAgKyAgVG8gaW5qZWN0IHNlbnNpdGl2ZSBkYXRhIGludG8geW91ciBjb250YWluZXJzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNlIHRoZSBgYHNlY3JldHNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgICsgIFRvIHJlZmVyZW5jZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGxvZyBjb25maWd1cmF0aW9uIG9mIGEgY29udGFpbmVyLCB1c2UgdGhlIGBgc2VjcmV0T3B0aW9uc2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0IHtcbi8qKlxuICogVGhlIHNlY3JldCB0byBleHBvc2UgdG8gdGhlIGNvbnRhaW5lci4gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGVpdGhlciB0aGUgZnVsbCBBUk4gb2YgdGhlIEFTTWxvbmcgc2VjcmV0IG9yIHRoZSBmdWxsIEFSTiBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWlyZSBJQU1sb25nIHBlcm1pc3Npb25zLCBzZWUgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXNlY3JldHMuaHRtbCNzZWNyZXRzLWlhbSkgKGZvciBTZWNyZXRzIE1hbmFnZXIpIG9yIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1wYXJhbWV0ZXJzLmh0bWwpIChmb3IgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBzdG9yZSkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIgZXhpc3RzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgdGFzayB5b3UncmUgbGF1bmNoaW5nLCB0aGVuIHlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZnVsbCBBUk4gb3IgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGV4aXN0cyBpbiBhIGRpZmZlcmVudCBSZWdpb24sIHRoZW4gdGhlIGZ1bGwgQVJOIG11c3QgYmUgc3BlY2lmaWVkLlxuICovXG5WYWx1ZUZyb206IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0LlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgc2VydmljZSB0aGF0IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhcmdldCBncm91cChzKSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuVGFyZ2V0R3JvdXBBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcG9ydCBtYXBwaW5nIHRvIHJlZ2lzdGVyIGluIHRoZSBWUEMgTGF0dGljZSB0YXJnZXQgZ3JvdXAuIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGBgcG9ydE1hcHBpbmdgYCB5b3UgZGVmaW5lZCBpbiB5b3VyIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1PigKggaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIFZQQyBMYXR0aWNlIGluZnJhc3RydWN0dXJlLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb250cm9sbGVyIHtcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlIHRvIHVzZS5cbiAqICBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHRoZSBtZWNoYW5pc20gdGhhdCBkZXRlcm1pbmVzIGhvdyB0YXNrcyBhcmUgZGVwbG95ZWQgZm9yIHlvdXIgc2VydmljZS4gVGhlIHZhbGlkIG9wdGlvbnMgYXJlOlxuICogICArICBFQ1NcbiAqICBXaGVuIHlvdSBjcmVhdGUgYSBzZXJ2aWNlIHdoaWNoIHVzZXMgdGhlIGBgRUNTYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIGNob29zZSBiZXR3ZWVuIHRoZSBmb2xsb3dpbmcgZGVwbG95bWVudCBzdHJhdGVnaWVzOlxuICogICArICBgYFJPTExJTkdgYDogV2hlbiB5b3UgY3JlYXRlIGEgc2VydmljZSB3aGljaCB1c2VzIHRoZSAqcm9sbGluZyB1cGRhdGUqIChgYFJPTExJTkdgYCkgZGVwbG95bWVudCBzdHJhdGVneSwgdGhlIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciByZXBsYWNlcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFza3Mgd2l0aCBuZXcgdGFza3MuIFRoZSBudW1iZXIgb2YgdGFza3MgdGhhdCBFQ1MgYWRkcyBvciByZW1vdmVzIGZyb20gdGhlIHNlcnZpY2UgZHVyaW5nIGEgcm9sbGluZyB1cGRhdGUgaXMgY29udHJvbGxlZCBieSB0aGUgc2VydmljZSBkZXBsb3ltZW50IGNvbmZpZ3VyYXRpb24uIFxuICogIFJvbGxpbmcgdXBkYXRlIGRlcGxveW1lbnRzIGFyZSBiZXN0IHN1aXRlZCBmb3IgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4gKiAgICsgIEdyYWR1YWwgc2VydmljZSB1cGRhdGVzOiBZb3UgbmVlZCB0byB1cGRhdGUgeW91ciBzZXJ2aWNlIGluY3JlbWVudGFsbHkgd2l0aG91dCB0YWtpbmcgdGhlIGVudGlyZSBzZXJ2aWNlIG9mZmxpbmUgYXQgb25jZS5cbiAqICAgKyAgTGltaXRlZCByZXNvdXJjZSByZXF1aXJlbWVudHM6IFlvdSB3YW50IHRvIGF2b2lkIHRoZSBhZGRpdGlvbmFsIHJlc291cmNlIGNvc3RzIG9mIHJ1bm5pbmcgdHdvIGNvbXBsZXRlIGVudmlyb25tZW50cyBzaW11bHRhbmVvdXNseSAoYXMgcmVxdWlyZWQgYnkgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cykuXG4gKiAgICsgIEFjY2VwdGFibGUgZGVwbG95bWVudCB0aW1lOiBZb3VyIGFwcGxpY2F0aW9uIGNhbiB0b2xlcmF0ZSBhIGxvbmdlciBkZXBsb3ltZW50IHByb2Nlc3MsIGFzIHJvbGxpbmcgdXBkYXRlcyByZXBsYWNlIHRhc2tzIG9uZSBieSBvbmUuXG4gKiAgICsgIE5vIG5lZWQgZm9yIGluc3RhbnQgcm9sbCBiYWNrOiBZb3VyIHNlcnZpY2UgY2FuIHRvbGVyYXRlIGEgcm9sbGJhY2sgcHJvY2VzcyB0aGF0IHRha2VzIG1pbnV0ZXMgcmF0aGVyIHRoYW4gc2Vjb25kcy5cbiAqICAgKyAgU2ltcGxlIGRlcGxveW1lbnQgcHJvY2VzczogWW91IHByZWZlciBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXBsb3ltZW50IGFwcHJvYWNoIHdpdGhvdXQgdGhlIGNvbXBsZXhpdHkgb2YgbWFuYWdpbmcgbXVsdGlwbGUgZW52aXJvbm1lbnRzLCB0YXJnZXQgZ3JvdXBzLCBhbmQgbGlzdGVuZXJzLlxuICogICArICBObyBsb2FkIGJhbGFuY2VyIHJlcXVpcmVtZW50OiBZb3VyIHNlcnZpY2UgZG9lc24ndCB1c2Ugb3IgcmVxdWlyZSBhIGxvYWQgYmFsYW5jZXIsIEFMQiwgTkxCLCBvciBTZXJ2aWNlIENvbm5lY3QgKHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cykuXG4gKiAgICsgIFN0YXRlZnVsIGFwcGxpY2F0aW9uczogWW91ciBhcHBsaWNhdGlvbiBtYWludGFpbnMgc3RhdGUgdGhhdCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gcnVuIHR3byBwYXJhbGxlbCBlbnZpcm9ubWVudHMuXG4gKiAgICsgIENvc3Qgc2Vuc2l0aXZpdHk6IFlvdSB3YW50IHRvIG1pbmltaXplIGRlcGxveW1lbnQgY29zdHMgYnkgbm90IHJ1bm5pbmcgZHVwbGljYXRlIGVudmlyb25tZW50cyBkdXJpbmcgZGVwbG95bWVudC5cbiAqICAgXG4gKiAgUm9sbGluZyB1cGRhdGVzIGFyZSB0aGUgZGVmYXVsdCBkZXBsb3ltZW50IHN0cmF0ZWd5IGZvciBzZXJ2aWNlcyBhbmQgcHJvdmlkZSBhIGJhbGFuY2UgYmV0d2VlbiBkZXBsb3ltZW50IHNhZmV0eSBhbmQgcmVzb3VyY2UgZWZmaWNpZW5jeSBmb3IgbWFueSBjb21tb24gYXBwbGljYXRpb24gc2NlbmFyaW9zLlxuICogICArICBgYEJMVUVfR1JFRU5gYDogQSAqYmx1ZS9ncmVlbiogZGVwbG95bWVudCBzdHJhdGVneSAoYGBCTFVFX0dSRUVOYGApIGlzIGEgcmVsZWFzZSBtZXRob2RvbG9neSB0aGF0IHJlZHVjZXMgZG93bnRpbWUgYW5kIHJpc2sgYnkgcnVubmluZyB0d28gaWRlbnRpY2FsIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIGNhbGxlZCBibHVlIGFuZCBncmVlbi4gV2l0aCBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cywgeW91IGNhbiB2YWxpZGF0ZSBuZXcgc2VydmljZSByZXZpc2lvbnMgYmVmb3JlIGRpcmVjdGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gdGhlbS4gVGhpcyBhcHByb2FjaCBwcm92aWRlcyBhIHNhZmVyIHdheSB0byBkZXBsb3kgY2hhbmdlcyB3aXRoIHRoZSBhYmlsaXR5IHRvIHF1aWNrbHkgcm9sbCBiYWNrIGlmIG5lZWRlZC5cbiAqICBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cyBhcmUgYmVzdCBzdWl0ZWQgZm9yIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuICogICArICBTZXJ2aWNlIHZhbGlkYXRpb246IFdoZW4geW91IG5lZWQgdG8gdmFsaWRhdGUgbmV3IHNlcnZpY2UgcmV2aXNpb25zIGJlZm9yZSBkaXJlY3RpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIHRoZW1cbiAqICAgKyAgWmVybyBkb3dudGltZTogV2hlbiB5b3VyIHNlcnZpY2UgcmVxdWlyZXMgemVyby1kb3dudGltZSBkZXBsb3ltZW50c1xuICogICArICBJbnN0YW50IHJvbGwgYmFjazogV2hlbiB5b3UgbmVlZCB0aGUgYWJpbGl0eSB0byBxdWlja2x5IHJvbGwgYmFjayBpZiBpc3N1ZXMgYXJlIGRldGVjdGVkXG4gKiAgICsgIExvYWQgYmFsYW5jZXIgcmVxdWlyZW1lbnQ6IFdoZW4geW91ciBzZXJ2aWNlIHVzZXMgQUxCLCBOTEIsIG9yIFNlcnZpY2UgQ29ubmVjdFxuICogICBcbiAqICAgXG4gKiAgICsgIEV4dGVybmFsXG4gKiAgVXNlIGEgdGhpcmQtcGFydHkgZGVwbG95bWVudCBjb250cm9sbGVyLlxuICogICArICBCbHVlL2dyZWVuIGRlcGxveW1lbnQgKHBvd2VyZWQgYnkgQUNEKVxuICogIEFDRCBpbnN0YWxscyBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIGFwcGxpY2F0aW9uIGFzIGEgbmV3IHJlcGxhY2VtZW50IHRhc2sgc2V0IGFuZCByZXJvdXRlcyBwcm9kdWN0aW9uIHRyYWZmaWMgZnJvbSB0aGUgb3JpZ2luYWwgYXBwbGljYXRpb24gdGFzayBzZXQgdG8gdGhlIHJlcGxhY2VtZW50IHRhc2sgc2V0LiBUaGUgb3JpZ2luYWwgdGFzayBzZXQgaXMgdGVybWluYXRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgZGVwbG95bWVudC4gVXNlIHRoaXMgZGVwbG95bWVudCBjb250cm9sbGVyIHRvIHZlcmlmeSBhIG5ldyBkZXBsb3ltZW50IG9mIGEgc2VydmljZSBiZWZvcmUgc2VuZGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuXG4gKiAgIFxuICogIFdoZW4gdXBkYXRpbmcgdGhlIGRlcGxveW1lbnQgY29udHJvbGxlciBmb3IgYSBzZXJ2aWNlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBtaWdyYXRpb24geW91J3JlIHBlcmZvcm1pbmcuXG4gKiAgICsgIElmIHlvdSBoYXZlIGEgdGVtcGxhdGUgdGhhdCBjb250YWlucyB0aGUgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciBpbmZvcm1hdGlvbiBhcyB3ZWxsIGFzIGBgVGFza1NldGBgIGFuZCBgYFByaW1hcnlUYXNrU2V0YGAgcmVzb3VyY2VzLCBhbmQgeW91IHJlbW92ZSB0aGUgdGFzayBzZXQgcmVzb3VyY2VzIGZyb20gdGhlIHRlbXBsYXRlIHdoZW4gdXBkYXRpbmcgZnJvbSBgYEVYVEVSTkFMYGAgdG8gYGBFQ1NgYCwgdGhlIGBgRGVzY3JpYmVUYXNrU2V0YGAgYW5kIGBgRGVsZXRlVGFza1NldGBgIEFQSSBjYWxscyB3aWxsIHJldHVybiBhIDQwMCBlcnJvciBhZnRlciB0aGUgZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHVwZGF0ZWQgdG8gYGBFQ1NgYC4gVGhpcyByZXN1bHRzIGluIGEgZGVsZXRlIGZhaWx1cmUgb24gdGhlIHRhc2sgc2V0IHJlc291cmNlcywgZXZlbiB0aG91Z2ggdGhlIHN0YWNrIHRyYW5zaXRpb25zIHRvIGBgVVBEQVRFX0NPTVBMRVRFYGAgc3RhdHVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNvdXJjZSByZW1vdmVkIGZyb20gc3RhY2sgYnV0IG5vdCBkZWxldGVkXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS90cm91Ymxlc2hvb3RpbmcuaHRtbCN0cm91Ymxlc2hvb3RpbmctZXJyb3JzLXJlc291cmNlLXJlbW92ZWQtbm90LWRlbGV0ZWQpIGluIHRoZSBDRk5sb25nIFVzZXIgR3VpZGUuIFRvIGZpeCB0aGlzIGlzc3VlLCBkZWxldGUgdGhlIHRhc2sgc2V0cyBkaXJlY3RseSB1c2luZyB0aGUgRUNTYGBEZWxldGVUYXNrU2V0YGAgQVBJLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gZGVsZXRlIGEgdGFzayBzZXQsIHNlZSBbRGVsZXRlVGFza1NldF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVUYXNrU2V0Lmh0bWwpIGluIHRoZSBFQ1Nsb25nIEFQSSBSZWZlcmVuY2UuXG4gKiAgICsgIElmIHlvdSdyZSBtaWdyYXRpbmcgZnJvbSBgYENPREVfREVQTE9ZYGAgdG8gYGBFQ1NgYCB3aXRoIGEgbmV3IHRhc2sgZGVmaW5pdGlvbiBhbmQgQ0ZOIHBlcmZvcm1zIGEgcm9sbGJhY2sgb3BlcmF0aW9uLCB0aGUgRUNTYGBVcGRhdGVTZXJ2aWNlYGAgcmVxdWVzdCBmYWlscyB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gKiAgUmVzb3VyY2UgaGFuZGxlciByZXR1cm5lZCBtZXNzYWdlOiBcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogVW5hYmxlIHRvIHVwZGF0ZSB0YXNrIGRlZmluaXRpb24gb24gc2VydmljZXMgd2l0aCBhIENPREVfREVQTE9ZIGRlcGxveW1lbnQgY29udHJvbGxlci4gXG4gKiAgICsgIEFmdGVyIGEgc3VjY2Vzc2Z1bCBtaWdyYXRpb24gZnJvbSBgYEVDU2BgIHRvIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBuZWVkIHRvIG1hbnVhbGx5IHJlbW92ZSB0aGUgYGBBQ1RJVkVgYCB0YXNrIHNldCwgYmVjYXVzZSBFQ1Mgbm8gbG9uZ2VyIG1hbmFnZXMgdGhlIGRlcGxveW1lbnQuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gZGVsZXRlIGEgdGFzayBzZXQsIHNlZSBbRGVsZXRlVGFza1NldF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVUYXNrU2V0Lmh0bWwpIGluIHRoZSBFQ1Nsb25nIEFQSSBSZWZlcmVuY2UuXG4gKi9cblR5cGU/OiAoXCJDT0RFX0RFUExPWVwiIHwgXCJFQ1NcIiB8IFwiRVhURVJOQUxcIilcbn1cbi8qKlxuICogT3B0aW9uYWwgZGVwbG95bWVudCBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCBob3cgbWFueSB0YXNrcyBydW4gZHVyaW5nIHRoZSBkZXBsb3ltZW50IGFuZCB0aGUgb3JkZXJpbmcgb2Ygc3RvcHBpbmcgYW5kIHN0YXJ0aW5nIHRhc2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGR1cmF0aW9uIHdoZW4gYm90aCBibHVlIGFuZCBncmVlbiBzZXJ2aWNlIHJldmlzaW9ucyBhcmUgcnVubmluZyBzaW11bHRhbmVvdXNseSBhZnRlciB0aGUgcHJvZHVjdGlvbiB0cmFmZmljIGhhcyBzaGlmdGVkLlxuICogIFRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHkgd2hlbiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHZhbHVlOlxuICogICArICBGb3Igcm9sbGluZyBkZXBsb3ltZW50cywgdGhlIHZhbHVlIGlzIHNldCB0byAzIGhvdXJzICgxODAgbWludXRlcykuXG4gKiAgICsgIFdoZW4geW91IHVzZSBhbiBleHRlcm5hbCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgKGBgRVhURVJOQUxgYCksIG9yIHRoZSBBQ0QgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IGNvbnRyb2xsZXIgKGBgQ09ERV9ERVBMT1lgYCksIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMyBob3VycyAoMTgwIG1pbnV0ZXMpLlxuICogICArICBGb3IgYWxsIG90aGVyIGNhc2VzLCB0aGUgdmFsdWUgaXMgc2V0IHRvIDM2IGhvdXJzICgyMTYwIG1pbnV0ZXMpLlxuICovXG5CYWtlVGltZUluTWludXRlcz86IG51bWJlclxuLyoqXG4gKiBBbiBhcnJheSBvZiBkZXBsb3ltZW50IGxpZmVjeWNsZSBob29rIG9iamVjdHMgdG8gcnVuIGN1c3RvbSBsb2dpYyBhdCBzcGVjaWZpYyBzdGFnZXMgb2YgdGhlIGRlcGxveW1lbnQgbGlmZWN5Y2xlLlxuICovXG5MaWZlY3ljbGVIb29rcz86IERlcGxveW1lbnRMaWZlY3ljbGVIb29rW11cbkFsYXJtcz86IERlcGxveW1lbnRBbGFybXNcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgc3RyYXRlZ3kgZm9yIHRoZSBzZXJ2aWNlLiBDaG9vc2UgZnJvbSB0aGVzZSB2YWxpZCB2YWx1ZXM6XG4gKiAgICsgIGBgUk9MTElOR2BgIC0gV2hlbiB5b3UgY3JlYXRlIGEgc2VydmljZSB3aGljaCB1c2VzIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBST0xMSU5HYGApIGRlcGxveW1lbnQgc3RyYXRlZ3ksIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugc2NoZWR1bGVyIHJlcGxhY2VzIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrcyB3aXRoIG5ldyB0YXNrcy4gVGhlIG51bWJlciBvZiB0YXNrcyB0aGF0IEFtYXpvbiBFQ1MgYWRkcyBvciByZW1vdmVzIGZyb20gdGhlIHNlcnZpY2UgZHVyaW5nIGEgcm9sbGluZyB1cGRhdGUgaXMgY29udHJvbGxlZCBieSB0aGUgc2VydmljZSBkZXBsb3ltZW50IGNvbmZpZ3VyYXRpb24uXG4gKiAgICsgIGBgQkxVRV9HUkVFTmBgIC0gQSBibHVlL2dyZWVuIGRlcGxveW1lbnQgc3RyYXRlZ3kgKGBgQkxVRV9HUkVFTmBgKSBpcyBhIHJlbGVhc2UgbWV0aG9kb2xvZ3kgdGhhdCByZWR1Y2VzIGRvd250aW1lIGFuZCByaXNrIGJ5IHJ1bm5pbmcgdHdvIGlkZW50aWNhbCBwcm9kdWN0aW9uIGVudmlyb25tZW50cyBjYWxsZWQgYmx1ZSBhbmQgZ3JlZW4uIFdpdGggQW1hem9uIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnRzLCB5b3UgY2FuIHZhbGlkYXRlIG5ldyBzZXJ2aWNlIHJldmlzaW9ucyBiZWZvcmUgZGlyZWN0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byB0aGVtLiBUaGlzIGFwcHJvYWNoIHByb3ZpZGVzIGEgc2FmZXIgd2F5IHRvIGRlcGxveSBjaGFuZ2VzIHdpdGggdGhlIGFiaWxpdHkgdG8gcXVpY2tseSByb2xsIGJhY2sgaWYgbmVlZGVkLlxuICovXG5TdHJhdGVneT86IChcIlJPTExJTkdcIiB8IFwiQkxVRV9HUkVFTlwiKVxuRGVwbG95bWVudENpcmN1aXRCcmVha2VyPzogRGVwbG95bWVudENpcmN1aXRCcmVha2VyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWF4aW11bVBlcmNlbnRgYCBwYXJhbWV0ZXIgcmVwcmVzZW50cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIGBgUlVOTklOR2BgIG9yIGBgUEVORElOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZWZpbmUgdGhlIGRlcGxveW1lbnQgYmF0Y2ggc2l6ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBpcyB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgYW5kIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgb2YgMjAwJSwgdGhlIHNjaGVkdWxlciBtYXkgc3RhcnQgZm91ciBuZXcgdGFza3MgYmVmb3JlIHN0b3BwaW5nIHRoZSBmb3VyIG9sZGVyIHRhc2tzIChwcm92aWRlZCB0aGF0IHRoZSBjbHVzdGVyIHJlc291cmNlcyByZXF1aXJlZCB0byBkbyB0aGlzIGFyZSBhdmFpbGFibGUpLiBUaGUgZGVmYXVsdCBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgaXMgMjAwJS5cbiAqICBUaGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdXNlcyB0aGlzIHBhcmFtZXRlciB0byByZXBsYWNlIHVuaGVhbHRoeSB0YXNrcyBieSBzdGFydGluZyByZXBsYWNlbWVudCB0YXNrcyBmaXJzdCBhbmQgdGhlbiBzdG9wcGluZyB0aGUgdW5oZWFsdGh5IHRhc2tzLCBhcyBsb25nIGFzIGNsdXN0ZXIgcmVzb3VyY2VzIGZvciBzdGFydGluZyByZXBsYWNlbWVudCB0YXNrcyBhcmUgYXZhaWxhYmxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHNjaGVkdWxlciByZXBsYWNlcyB1bmhlYWx0aHkgdGFza3MsIHNlZSBbQW1hem9uIEVDUyBzZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzX3NlcnZpY2VzLmh0bWwpLlxuICogIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMsIGFuZCB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlICptYXhpbXVtIHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptYXhpbXVtIHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiB0aGUgc2VydmljZSB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtYXhpbXVtIHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQuIFRoZSB2YWx1ZSBpcyBzdGlsbCByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NYXhpbXVtUGVyY2VudD86IG51bWJlclxuLyoqXG4gKiBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUsIHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHJlcHJlc2VudHMgYSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKS4gVGhpcyBwYXJhbWV0ZXIgZW5hYmxlcyB5b3UgdG8gZGVwbG95IHdpdGhvdXQgdXNpbmcgYWRkaXRpb25hbCBjbHVzdGVyIGNhcGFjaXR5LiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIG9mIDUwJSwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIG1heSBzdG9wIHR3byBleGlzdGluZyB0YXNrcyB0byBmcmVlIHVwIGNsdXN0ZXIgY2FwYWNpdHkgYmVmb3JlIHN0YXJ0aW5nIHR3byBuZXcgdGFza3MuIFxuICogICBJZiBhbnkgdGFza3MgYXJlIHVuaGVhbHRoeSBhbmQgaWYgYGBtYXhpbXVtUGVyY2VudGBgIGRvZXNuJ3QgYWxsb3cgdGhlIEFtYXpvbiBFQ1Mgc2NoZWR1bGVyIHRvIHN0YXJ0IHJlcGxhY2VtZW50IHRhc2tzLCB0aGUgc2NoZWR1bGVyIHN0b3BzIHRoZSB1bmhlYWx0aHkgdGFza3Mgb25lLWJ5LW9uZSDigJQgdXNpbmcgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgYXMgYSBjb25zdHJhaW50IOKAlCB0byBjbGVhciB1cCBjYXBhY2l0eSB0byBsYXVuY2ggcmVwbGFjZW1lbnQgdGFza3MuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyBub3QqIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBBIHNlcnZpY2UgaXMgY29uc2lkZXJlZCBoZWFsdGh5IGlmIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHBhc3MgdGhlaXIgaGVhbHRoIGNoZWNrcy5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIDQwIHNlY29uZHMgYWZ0ZXIgYSB0YXNrIHJlYWNoZXMgYSBgYFJVTk5JTkdgYCBzdGF0ZSBiZWZvcmUgdGhlIHRhc2sgaXMgY291bnRlZCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBvbmUgb3IgbW9yZSBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIGl0IHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLiBBIHRhc2sgaXMgY29uc2lkZXJlZCBoZWFsdGh5IHdoZW4gYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFzayBoYXZlIHBhc3NlZCB0aGVpciBoZWFsdGggY2hlY2tzLiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGNhbiB3YWl0IGZvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb250YWluZXIgaGVhbHRoIGNoZWNrIHNldHRpbmdzLiBcbiAqICAgXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvKiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIGFuIGVzc2VudGlhbCBjb250YWluZXIgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciBib3RoIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYW5kIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICBcbiAqICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXBsaWNhIHNlcnZpY2UgZm9yIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgaXMgMTAwJS4gVGhlIGRlZmF1bHQgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNlcnZpY2Ugc2NoZWR1bGUgaXMgMCUgZm9yIHRoZSBDTEksIHRoZSBBV1MgU0RLcywgYW5kIHRoZSBBUElzIGFuZCA1MCUgZm9yIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLlxuICogIFRoZSBtaW5pbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGR1cmluZyBhIGRlcGxveW1lbnQgaXMgdGhlIGBgZGVzaXJlZENvdW50YGAgbXVsdGlwbGllZCBieSB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYC8xMDAsIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB2YWx1ZS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQsIGFsdGhvdWdoIGl0IGlzIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlclxufVxuLyoqXG4gKiBBIGRlcGxveW1lbnQgbGlmZWN5Y2xlIGhvb2sgcnVucyBjdXN0b20gbG9naWMgYXQgc3BlY2lmaWMgc3RhZ2VzIG9mIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuIEN1cnJlbnRseSwgeW91IGNhbiB1c2UgTGFtYmRhIGZ1bmN0aW9ucyBhcyBob29rIHRhcmdldHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTGlmZWN5Y2xlIGhvb2tzIGZvciBBbWF6b24gRUNTIHNlcnZpY2UgZGVwbG95bWVudHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtbGlmZWN5Y2xlLWhvb2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50TGlmZWN5Y2xlSG9vayB7XG4vKipcbiAqIFRoZSBsaWZlY3ljbGUgc3RhZ2VzIGF0IHdoaWNoIHRvIHJ1biB0aGUgaG9vay4gQ2hvb3NlIGZyb20gdGhlc2UgdmFsaWQgdmFsdWVzOlxuICogICArICBSRUNPTkNJTEVfU0VSVklDRVxuICogIFRoZSByZWNvbmNpbGlhdGlvbiBzdGFnZSB0aGF0IG9ubHkgaGFwcGVucyB3aGVuIHlvdSBzdGFydCBhIG5ldyBzZXJ2aWNlIGRlcGxveW1lbnQgd2l0aCBtb3JlIHRoYW4gMSBzZXJ2aWNlIHJldmlzaW9uIGluIGFuIEFDVElWRSBzdGF0ZS5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICArICBQUkVfU0NBTEVfVVBcbiAqICBUaGUgZ3JlZW4gc2VydmljZSByZXZpc2lvbiBoYXMgbm90IHN0YXJ0ZWQuIFRoZSBibHVlIHNlcnZpY2UgcmV2aXNpb24gaXMgaGFuZGxpbmcgMTAwJSBvZiB0aGUgcHJvZHVjdGlvbiB0cmFmZmljLiBUaGVyZSBpcyBubyB0ZXN0IHRyYWZmaWMuXG4gKiAgWW91IGNhbiB1c2UgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhpcyBzdGFnZS5cbiAqICAgKyAgUE9TVF9TQ0FMRV9VUFxuICogIFRoZSBncmVlbiBzZXJ2aWNlIHJldmlzaW9uIGhhcyBzdGFydGVkLiBUaGUgYmx1ZSBzZXJ2aWNlIHJldmlzaW9uIGlzIGhhbmRsaW5nIDEwMCUgb2YgdGhlIHByb2R1Y3Rpb24gdHJhZmZpYy4gVGhlcmUgaXMgbm8gdGVzdCB0cmFmZmljLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgICsgIFRFU1RfVFJBRkZJQ19TSElGVFxuICogIFRoZSBibHVlIGFuZCBncmVlbiBzZXJ2aWNlIHJldmlzaW9ucyBhcmUgcnVubmluZy4gVGhlIGJsdWUgc2VydmljZSByZXZpc2lvbiBoYW5kbGVzIDEwMCUgb2YgdGhlIHByb2R1Y3Rpb24gdHJhZmZpYy4gVGhlIGdyZWVuIHNlcnZpY2UgcmV2aXNpb24gaXMgbWlncmF0aW5nIGZyb20gMCUgdG8gMTAwJSBvZiB0ZXN0IHRyYWZmaWMuXG4gKiAgWW91IGNhbiB1c2UgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhpcyBzdGFnZS5cbiAqICAgKyAgUE9TVF9URVNUX1RSQUZGSUNfU0hJRlRcbiAqICBUaGUgdGVzdCB0cmFmZmljIHNoaWZ0IGlzIGNvbXBsZXRlLiBUaGUgZ3JlZW4gc2VydmljZSByZXZpc2lvbiBoYW5kbGVzIDEwMCUgb2YgdGhlIHRlc3QgdHJhZmZpYy5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICArICBQUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcbiAqICBQcm9kdWN0aW9uIHRyYWZmaWMgaXMgc2hpZnRpbmcgdG8gdGhlIGdyZWVuIHNlcnZpY2UgcmV2aXNpb24uIFRoZSBncmVlbiBzZXJ2aWNlIHJldmlzaW9uIGlzIG1pZ3JhdGluZyBmcm9tIDAlIHRvIDEwMCUgb2YgcHJvZHVjdGlvbiB0cmFmZmljLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgICsgIFBPU1RfUFJPRFVDVElPTl9UUkFGRklDX1NISUZUXG4gKiAgVGhlIHByb2R1Y3Rpb24gdHJhZmZpYyBzaGlmdCBpcyBjb21wbGV0ZS5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICBcbiAqICBZb3UgbXVzdCBwcm92aWRlIHRoaXMgcGFyYW1ldGVyIHdoZW4gY29uZmlndXJpbmcgYSBkZXBsb3ltZW50IGxpZmVjeWNsZSBob29rLlxuICogXG4gKiBAbWluSXRlbXMgMVxuICovXG5MaWZlY3ljbGVTdGFnZXM6IChcIlJFQ09OQ0lMRV9TRVJWSUNFXCIgfCBcIlBSRV9TQ0FMRV9VUFwiIHwgXCJQT1NUX1NDQUxFX1VQXCIgfCBcIlRFU1RfVFJBRkZJQ19TSElGVFwiIHwgXCJQT1NUX1RFU1RfVFJBRkZJQ19TSElGVFwiIHwgXCJQUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcIiB8IFwiUE9TVF9QUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcIilbXVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGhvb2sgdGFyZ2V0LiBDdXJyZW50bHksIG9ubHkgTGFtYmRhIGZ1bmN0aW9uIEFSTnMgYXJlIHN1cHBvcnRlZC5cbiAqICBZb3UgbXVzdCBwcm92aWRlIHRoaXMgcGFyYW1ldGVyIHdoZW4gY29uZmlndXJpbmcgYSBkZXBsb3ltZW50IGxpZmVjeWNsZSBob29rLlxuICovXG5Ib29rVGFyZ2V0QXJuOiBzdHJpbmdcbi8qKlxuICogVXNlIHRoaXMgZmllbGQgdG8gc3BlY2lmeSBjdXN0b20gcGFyYW1ldGVycyB0aGF0IEVDUyBwYXNzZXMgdG8geW91ciBob29rIHRhcmdldCBpbnZvY2F0aW9ucyAoc3VjaCBhcyBhIExhbWJkYSBmdW5jdGlvbikuXG4gKiAgVGhpcyBmaWVsZCBtdXN0IGJlIGEgSlNPTiBvYmplY3QgYXMgYSBzdHJpbmcuXG4gKi9cbkhvb2tEZXRhaWxzPzogKHN0cmluZyB8IHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59KVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIEFtYXpvbiBFQ1MgcGVybWlzc2lvbiB0byBjYWxsIExhbWJkYSBmdW5jdGlvbnMgb24geW91ciBiZWhhbGYuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIExhbWJkYSBmdW5jdGlvbnMgaW4gQW1hem9uIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9ibHVlLWdyZWVuLXBlcm1pc3Npb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBDbG91ZFdhdGNoIGFsYXJtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50QWxhcm1zIHtcbi8qKlxuICogT25lIG9yIG1vcmUgQ2xvdWRXYXRjaCBhbGFybSBuYW1lcy4gVXNlIGEgXCIsXCIgdG8gc2VwYXJhdGUgdGhlIGFsYXJtcy5cbiAqL1xuQWxhcm1OYW1lczogc3RyaW5nW11cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgQ2xvdWRXYXRjaCBhbGFybSBvcHRpb24gaW4gdGhlIHNlcnZpY2UgZGVwbG95bWVudCBwcm9jZXNzLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgdXNlZCwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBjYW4gb25seSBiZSB1c2VkIGZvciBzZXJ2aWNlcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZS5cbiAqICAgVGhlICpkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgZmFpbCBpZiB0aGUgc2VydmljZSBjYW4ndCByZWFjaCBhIHN0ZWFkeSBzdGF0ZS4gSWYgeW91IHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIsIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgdHJhbnNpdGlvbiB0byBhIGZhaWxlZCBzdGF0ZSBhbmQgc3RvcCBsYXVuY2hpbmcgbmV3IHRhc2tzLiBJZiB5b3UgdXNlIHRoZSByb2xsYmFjayBvcHRpb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSb2xsaW5nIHVwZGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWVjcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXIge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBsb2dpYyBmb3IgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyBvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4iXX0=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLiBcbiAqICAgIE9uIEp1bmUgMTIsIDIwMjUsIEFtYXpvbiBFQ1MgbGF1bmNoZWQgc3VwcG9ydCBmb3IgdXBkYXRpbmcgY2FwYWNpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBmb3IgRUNTIHNlcnZpY2VzLiBXaXRoIHRoaXMgbGF1bmNoLCBFQ1MgYWxzbyBhbGlnbmVkIHRoZSBDRk4gdXBkYXRlIGJlaGF2aW9yIGZvciBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHBhcmFtZXRlciB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbYWRkcyBzdXBwb3J0IGZvciB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIGZvciBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hYm91dC1hd3Mvd2hhdHMtbmV3LzIwMjUvMDUvYW1hem9uLWVjcy1jYXBhY2l0eS1wcm92aWRlci1jb25maWd1cmF0aW9uLWVjcy8pLiBQcmV2aW91c2x5IEVDUyBpZ25vcmVkIHRoZSBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHByb3BlcnR5IGlmIGl0IHdhcyBzZXQgdG8gYW4gZW1wdHkgbGlzdCBmb3IgZXhhbXBsZSwgYGBbXWBgIGluIENGTiwgYmVjYXVzZSB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIHdhcyBub3Qgc3VwcG9ydGVkLiBOb3csIHdpdGggc3VwcG9ydCBmb3IgY2FwYWNpdHkgcHJvdmlkZXIgdXBkYXRlcywgY3VzdG9tZXJzIGNhbiByZW1vdmUgY2FwYWNpdHkgcHJvdmlkZXJzIGZyb20gYSBzZXJ2aWNlIGJ5IHBhc3NpbmcgYW4gZW1wdHkgbGlzdC4gV2hlbiB5b3Ugc3BlY2lmeSBhbiBlbXB0eSBsaXN0IChgYFtdYGApIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIENGTiB0ZW1wbGF0ZSwgRUNTIHdpbGwgcmVtb3ZlIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlLCBhcyBmb2xsb3dzOlxuICogICArICBGb3Igc2VydmljZXMgY3JlYXRlZCB3aXRoIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgYWZ0ZXIgdGhlIGxhdW5jaDpcbiAqICAgKyAgSWYgdGhlcmUncyBhIGNsdXN0ZXIgZGVmYXVsdCBzdHJhdGVneSBzZXQsIHRoZSBzZXJ2aWNlIHdpbGwgcmV2ZXJ0IHRvIHVzaW5nIHRoYXQgZGVmYXVsdCBzdHJhdGVneS5cbiAqICAgKyAgSWYgbm8gY2x1c3RlciBkZWZhdWx0IHN0cmF0ZWd5IGV4aXN0cywgeW91IHdpbGwgcmVjZWl2ZSB0aGUgZm9sbG93aW5nIGVycm9yOlxuICogIE5vIGxhdW5jaCB0eXBlIHRvIGZhbGwgYmFjayB0byBmb3IgZW1wdHkgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFlvdXIgc2VydmljZSB3YXMgbm90IGNyZWF0ZWQgd2l0aCBhIGxhdW5jaCB0eXBlLlxuICogICBcbiAqICAgKyAgRm9yIHNlcnZpY2VzIGNyZWF0ZWQgd2l0aCBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHByaW9yIHRvIHRoZSBsYXVuY2g6XG4gKiAgICsgIElmIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaGFkIGBgRkFSR0FURV9TUE9UYGAgb3IgYGBGQVJHQVRFYGAgY2FwYWNpdHkgcHJvdmlkZXJzLCB0aGUgbGF1bmNoIHR5cGUgd2lsbCBiZSB1cGRhdGVkIHRvIGBgRkFSR0FURWBgIGFuZCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgd2lsbCBiZSByZW1vdmVkLlxuICogICArICBJZiB0aGUgc3RyYXRlZ3kgaW5jbHVkZWQgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycywgdGhlIHNlcnZpY2Ugd2lsbCByZXZlcnQgdG8gRUMyIGxhdW5jaCB0eXBlLCBhbmQgdGhlIEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgd2lsbCBub3QgYmUgdXNlZC5cbiAqICAgXG4gKiAgIFxuICogIFJlY29tbWVuZGVkIEFjdGlvbnNcbiAqICBJZiB5b3UgYXJlIGN1cnJlbnRseSB1c2luZyBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneTogW11gYCBpbiB5b3VyIENGTiB0ZW1wbGF0ZXMsIHlvdSBzaG91bGQgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICogICArICBJZiB5b3UgZG8gbm90IGludGVuZCB0byB1cGRhdGUgdGhlIENhcGFjaXR5IFByb3ZpZGVyIFN0cmF0ZWd5OlxuICogICArICBSZW1vdmUgdGhlIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJvcGVydHkgZW50aXJlbHkgZnJvbSB5b3VyIENGTiB0ZW1wbGF0ZVxuICogICArICBBbHRlcm5hdGl2ZWx5LCB1c2UgYGAhUmVmIDo6Tm9WYWx1ZWBgIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIHRlbXBsYXRlXG4gKiAgIFxuICogICArICBJZiB5b3UgaW50ZW5kIHRvIG1haW50YWluIG9yIHVwZGF0ZSB0aGUgQ2FwYWNpdHkgUHJvdmlkZXIgU3RyYXRlZ3ksIHNwZWNpZnkgdGhlIGFjdHVhbCBDYXBhY2l0eSBQcm92aWRlciBTdHJhdGVneSBmb3IgdGhlIHNlcnZpY2UgaW4geW91ciBDRk4gdGVtcGxhdGUuXG4gKiAgIFxuICogIElmIHlvdXIgQ0ZOIHRlbXBsYXRlIGhhZCBhbiBlbXB0eSBsaXN0IChbXSkgZm9yIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJpb3IgdG8gdGhlIGFmb3JlbWVudGlvbmVkIGxhdW5jaCBvbiBKdW5lIDEyLCBhbmQgeW91IGFyZSB1c2luZyB0aGUgc2FtZSB0ZW1wbGF0ZSB3aXRoIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5OiBbXWBgLCB5b3UgbWlnaHQgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gKiAgIEludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogV2hlbiBzd2l0Y2hpbmcgZnJvbSBsYXVuY2ggdHlwZSB0byBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhbiBleGlzdGluZyBzZXJ2aWNlLCBvciBtYWtpbmcgYSBjaGFuZ2UgdG8gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhIHNlcnZpY2UgdGhhdCBpcyBhbHJlYWR5IHVzaW5nIG9uZSwgeW91IG11c3QgZm9yY2UgYSBuZXcgZGVwbG95bWVudC4gKFNlcnZpY2U6IEVjcywgU3RhdHVzIENvZGU6IDQwMCwgUmVxdWVzdCBJRDogeHh4KSAoU0RLIEF0dGVtcHQgQ291bnQ6IDEpXCIgKFJlcXVlc3RUb2tlbjogeHh4IEhhbmRsZXJFcnJvckNvZGU6IEludmFsaWRSZXF1ZXN0KSBcbiAqICBOb3RlIHRoYXQgQ0ZOIGF1dG9tYXRpY2FsbHkgaW5pdGlhdGVzIGEgbmV3IGRlcGxveW1lbnQgd2hlbiBpdCBkZXRlY3RzIGEgcGFyYW1ldGVyIGNoYW5nZSwgYnV0IGN1c3RvbWVycyBjYW5ub3QgY2hvb3NlIHRvIGZvcmNlIGEgZGVwbG95bWVudCB0aHJvdWdoIENGTi4gVGhpcyBpcyBhbiBpbnZhbGlkIGlucHV0IHNjZW5hcmlvIHRoYXQgcmVxdWlyZXMgb25lIG9mIHRoZSByZW1lZGlhdGlvbiBhY3Rpb25zIGxpc3RlZCBhYm92ZS5cbiAqICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhY3RpdmUgcHJvZHVjdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgY29udGFjdCBBV1MgU3VwcG9ydCBvciB5b3VyIFRlY2huaWNhbCBBY2NvdW50IE1hbmFnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQ1NfU0VSVklDRSB7XG4vKipcbiAqIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIHRoYXQgeW91ciB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgcnVubmluZyBvbi4gQSBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHNwZWNpZmllZCBvbmx5IGZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS4gSWYgb25lIGlzbid0IHNwZWNpZmllZCwgdGhlIGBgTEFURVNUYGAgcGxhdGZvcm0gdmVyc2lvbiBpcyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtwbGF0Zm9ybSB2ZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcGxhdGZvcm1fdmVyc2lvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QbGF0Zm9ybVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byB0aGUgdGFzay4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3QgcHJvcGFnYXRlZC4gVGFncyBjYW4gb25seSBiZSBwcm9wYWdhdGVkIHRvIHRoZSB0YXNrIGR1cmluZyB0YXNrIGNyZWF0aW9uLiBUbyBhZGQgdGFncyB0byBhIHRhc2sgYWZ0ZXIgdGFzayBjcmVhdGlvbiwgdXNlIHRoZSBbVGFnUmVzb3VyY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVGFnUmVzb3VyY2UuaHRtbCkgQVBJIGFjdGlvbi5cbiAqICBZb3UgbXVzdCBzZXQgdGhpcyB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGBOT05FYGAgd2hlbiB5b3UgdXNlIENvc3QgRXhwbG9yZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgdXNhZ2UgcmVwb3J0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNhZ2UtcmVwb3J0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIGRlZmF1bHQgaXMgYGBOT05FYGAuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuU2VydmljZUFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGxhY2VtZW50IHN0cmF0ZWd5IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgNSBzdHJhdGVneSBydWxlcyBmb3IgZWFjaCBzZXJ2aWNlLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudFN0cmF0ZWd5YGAgYXJyYXkuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqICAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVJlZ2lzdHJ5YGAgYXJyYXkuXG4gKi9cblNlcnZpY2VSZWdpc3RyaWVzPzogU2VydmljZVJlZ2lzdHJ5W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYCBhcnJheS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGNvbnRhaW4gYSBtYXhpbXVtIG9mIDIwIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtYGAgYXJyYXkuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneT86IENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW1bXVxuLyoqXG4gKiBUaGUgbGF1bmNoIHR5cGUgb24gd2hpY2ggdG8gcnVuIHlvdXIgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBMYXVuY2ggVHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2xhdW5jaF90eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkxhdW5jaFR5cGU/OiAoXCJFQzJcIiB8IFwiRkFSR0FURVwiIHwgXCJFWFRFUk5BTFwiKVxuTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQXZhaWxhYmlsaXR5IFpvbmUgcmViYWxhbmNpbmcgZm9yIHRoZSBzZXJ2aWNlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhbGFuY2luZyBhbiBBbWF6b24gRUNTIHNlcnZpY2UgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1yZWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgYGBBdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmdgYCBkaWZmZXJzIGJldHdlZW4gY3JlYXRlIGFuZCB1cGRhdGUgcmVxdWVzdHM6XG4gKiAgICsgIEZvciBjcmVhdGUgc2VydmljZSByZXF1ZXN0cywgd2hlbiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yIGBgQXZhaWxhYmlsaXR5Wm9uZVJlYmFsYW5jaW5nYGAsIEFtYXpvbiBFQ1MgZGVmYXVsdHMgdGhlIHZhbHVlIHRvIGBgRU5BQkxFRGBgLlxuICogICArICBGb3IgdXBkYXRlIHNlcnZpY2UgcmVxdWVzdHMsIHdoZW4gbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvciBgYEF2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZ2BgLCBBbWF6b24gRUNTIGRlZmF1bHRzIHRvIHRoZSBleGlzdGluZyBzZXJ2aWNl4oCZcyBgYEF2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZ2BgIHZhbHVlLiBJZiB0aGUgc2VydmljZSBuZXZlciBoYWQgYW4gYGBBdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmdgYCB2YWx1ZSBzZXQsIEFtYXpvbiBFQ1MgdHJlYXRzIHRoaXMgYXMgYGBESVNBQkxFRGBgLlxuICovXG5BdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmc/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgVGhlcmUgYXJlIHR3byBzZXJ2aWNlIHNjaGVkdWxlciBzdHJhdGVnaWVzIGF2YWlsYWJsZTpcbiAqICAgKyAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgIGBgREFFTU9OYGAtVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRlcGxveXMgZXhhY3RseSBvbmUgdGFzayBvbiBlYWNoIGFjdGl2ZSBjb250YWluZXIgaW5zdGFuY2UgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBjbHVzdGVyLiBUaGUgc2VydmljZSBzY2hlZHVsZXIgYWxzbyBldmFsdWF0ZXMgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGZvciBydW5uaW5nIHRhc2tzIGFuZCB3aWxsIHN0b3AgdGFza3MgdGhhdCBkb24ndCBtZWV0IHRoZSBwbGFjZW1lbnQgY29uc3RyYWludHMuIFdoZW4geW91J3JlIHVzaW5nIHRoaXMgc3RyYXRlZ3ksIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcywgYSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSwgb3IgdXNlIFNlcnZpY2UgQXV0byBTY2FsaW5nIHBvbGljaWVzLlxuICogICBUYXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSBvciB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgZG9uJ3Qgc3VwcG9ydCB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LlxuICovXG5TY2hlZHVsaW5nU3RyYXRlZ3k/OiAoXCJEQUVNT05cIiB8IFwiUkVQTElDQVwiKVxuTmV0d29ya0NvbmZpZ3VyYXRpb24/OiBOZXR3b3JrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHNlcnZpY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuIFdoZW4gYSBzZXJ2aWNlIGlzIGRlbGV0ZWQsIHRoZSB0YWdzIGFyZSBkZWxldGVkIGFzIHdlbGwuXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuVGFncz86IFRhZ1tdXG5Gb3JjZU5ld0RlcGxveW1lbnQ/OiBGb3JjZU5ld0RlcGxveW1lbnRcbi8qKlxuICogVGhlIHBlcmlvZCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBBbWF6b24gQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIHVuaGVhbHRoeSBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBWUEMgTGF0dGljZSwgYW5kIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzIGFmdGVyIGEgdGFzayBoYXMgZmlyc3Qgc3RhcnRlZC4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCB2YWx1ZSwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgMCBpcyB1c2VkLiBJZiB5b3UgZG8gbm90IHVzZSBhbnkgb2YgdGhlIGhlYWx0aCBjaGVja3MsIHRoZW4gYGBoZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kc2BgIGlzIHVudXNlZC5cbiAqICBJZiB5b3VyIHNlcnZpY2UgaGFzIG1vcmUgcnVubmluZyB0YXNrcyB0aGFuIGRlc2lyZWQsIHVuaGVhbHRoeSB0YXNrcyBpbiB0aGUgZ3JhY2UgcGVyaW9kIG1pZ2h0IGJlIHN0b3BwZWQgdG8gcmVhY2ggdGhlIGRlc2lyZWQgY291bnQuXG4gKi9cbkhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHR1cm4gb24gQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MgZm9yIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgeW91ciBBbWF6b24gRUNTIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLXVzaW5nLXRhZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFdoZW4geW91IHVzZSBBbWF6b24gRUNTIG1hbmFnZWQgdGFncywgeW91IG11c3Qgc2V0IHRoZSBgYHByb3BhZ2F0ZVRhZ3NgYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqL1xuRW5hYmxlRUNTTWFuYWdlZFRhZ3M/OiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciB0aGUgc2VydmljZS4gSWYgYGB0cnVlYGAsIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIGFsbCBjb250YWluZXJzIGluIHRhc2tzIGFzIHBhcnQgb2YgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZUV4ZWN1dGVDb21tYW5kPzogYm9vbGVhblxuLyoqXG4gKiBBbiBhcnJheSBvZiBwbGFjZW1lbnQgY29uc3RyYWludCBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDEwIGNvbnN0cmFpbnRzIGZvciBlYWNoIHRhc2suIFRoaXMgbGltaXQgaW5jbHVkZXMgY29uc3RyYWludHMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhbmQgdGhvc2Ugc3BlY2lmaWVkIGF0IHJ1bnRpbWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgUGxhY2VtZW50Q29uc3RyYWludGBgIGFycmF5LlxuICovXG5QbGFjZW1lbnRDb25zdHJhaW50cz86IFBsYWNlbWVudENvbnN0cmFpbnRbXVxuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBjbHVzdGVyIHRoYXQgeW91IHJ1biB5b3VyIHNlcnZpY2Ugb24uIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIGNsdXN0ZXIsIHRoZSBkZWZhdWx0IGNsdXN0ZXIgaXMgYXNzdW1lZC5cbiAqL1xuQ2x1c3Rlcj86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgbG9hZCBiYWxhbmNlciBvYmplY3RzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBSb2xlYGAgcHJvcGVydHksIGBgTG9hZEJhbGFuY2Vyc2BgIG11c3QgYmUgc3BlY2lmaWVkIGFzIHdlbGwuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mIGxvYWQgYmFsYW5jZXJzIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHBlciBzZXJ2aWNlLCBzZWUgW1NlcnZpY2UgTG9hZCBCYWxhbmNpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtbG9hZC1iYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYExvYWRCYWxhbmNlcmBgIGFycmF5LlxuICovXG5Mb2FkQmFsYW5jZXJzPzogTG9hZEJhbGFuY2VyW11cblNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbj86IFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGluc3RhbnRpYXRpb25zIG9mIHRoZSBzcGVjaWZpZWQgdGFzayBkZWZpbml0aW9uIHRvIHBsYWNlIGFuZCBrZWVwIHJ1bm5pbmcgaW4geW91ciBzZXJ2aWNlLlxuICogIEZvciBuZXcgc2VydmljZXMsIGlmIGEgZGVzaXJlZCBjb3VudCBpcyBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgdmFsdWUgb2YgYGAxYGAgaXMgdXNlZC4gV2hlbiB1c2luZyB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LCB0aGUgZGVzaXJlZCBjb3VudCBpcyBub3QgcmVxdWlyZWQuXG4gKiAgRm9yIGV4aXN0aW5nIHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgb21pdHRlZCBmcm9tIHRoZSBvcGVyYXRpb24uXG4gKi9cbkRlc2lyZWRDb3VudD86IG51bWJlclxuLyoqXG4gKiBUaGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UgYmVpbmcgY3JlYXRlZC5cbiAqL1xuVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25zPzogVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25bXVxuRGVwbG95bWVudENvbnRyb2xsZXI/OiBEZXBsb3ltZW50Q29udHJvbGxlclxuLyoqXG4gKiBUaGUgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gRUNTIHRvIG1ha2UgY2FsbHMgdG8geW91ciBsb2FkIGJhbGFuY2VyIG9uIHlvdXIgYmVoYWxmLiBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHBlcm1pdHRlZCBpZiB5b3UgYXJlIHVzaW5nIGEgbG9hZCBiYWxhbmNlciB3aXRoIHlvdXIgc2VydmljZSBhbmQgeW91ciB0YXNrIGRlZmluaXRpb24gZG9lc24ndCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGByb2xlYGAgcGFyYW1ldGVyLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSBsb2FkIGJhbGFuY2VyIG9iamVjdCB3aXRoIHRoZSBgYGxvYWRCYWxhbmNlcnNgYCBwYXJhbWV0ZXIuXG4gKiAgIElmIHlvdXIgYWNjb3VudCBoYXMgYWxyZWFkeSBjcmVhdGVkIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UtbGlua2VkIHJvbGUsIHRoYXQgcm9sZSBpcyB1c2VkIGZvciB5b3VyIHNlcnZpY2UgdW5sZXNzIHlvdSBzcGVjaWZ5IGEgcm9sZSBoZXJlLiBUaGUgc2VydmljZS1saW5rZWQgcm9sZSBpcyByZXF1aXJlZCBpZiB5b3VyIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBvciBpZiB0aGUgc2VydmljZSBpcyBjb25maWd1cmVkIHRvIHVzZSBzZXJ2aWNlIGRpc2NvdmVyeSwgYW4gZXh0ZXJuYWwgZGVwbG95bWVudCBjb250cm9sbGVyLCBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLCBvciBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvcnMgaW4gd2hpY2ggY2FzZSB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHJvbGUgaGVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgc2VydmljZS1saW5rZWQgcm9sZXMgZm9yIEFtYXpvbiBFQ1NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nLXNlcnZpY2UtbGlua2VkLXJvbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzcGVjaWZpZWQgcm9sZSBoYXMgYSBwYXRoIG90aGVyIHRoYW4gYGAvYGAsIHRoZW4geW91IG11c3QgZWl0aGVyIHNwZWNpZnkgdGhlIGZ1bGwgcm9sZSBBUk4gKHRoaXMgaXMgcmVjb21tZW5kZWQpIG9yIHByZWZpeCB0aGUgcm9sZSBuYW1lIHdpdGggdGhlIHBhdGguIEZvciBleGFtcGxlLCBpZiBhIHJvbGUgd2l0aCB0aGUgbmFtZSBgYGJhcmBgIGhhcyBhIHBhdGggb2YgYGAvZm9vL2BgIHRoZW4geW91IHdvdWxkIHNwZWNpZnkgYGAvZm9vL2JhcmBgIGFzIHRoZSByb2xlIG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZyaWVuZGx5IG5hbWVzIGFuZCBwYXRoc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pZGVudGlmaWVycy5odG1sI2lkZW50aWZpZXJzLWZyaWVuZGx5LW5hbWVzKSBpbiB0aGUgKklBTSBVc2VyIEd1aWRlKi5cbiAqL1xuUm9sZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBmYW1pbHlgYCBhbmQgYGByZXZpc2lvbmBgIChgYGZhbWlseTpyZXZpc2lvbmBgKSBvciBmdWxsIEFSTiBvZiB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHJ1biBpbiB5b3VyIHNlcnZpY2UuIElmIGEgYGByZXZpc2lvbmBgIGlzbid0IHNwZWNpZmllZCwgdGhlIGxhdGVzdCBgYEFDVElWRWBgIHJldmlzaW9uIGlzIHVzZWQuXG4gKiAgQSB0YXNrIGRlZmluaXRpb24gbXVzdCBiZSBzcGVjaWZpZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyBlaXRoZXIgdGhlIGBgRUNTYGAgb3IgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVwbG95bWVudCB0eXBlcywgc2VlIFtBbWF6b24gRUNTIGRlcGxveW1lbnQgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZXMuaHRtbCkuXG4gKi9cblRhc2tEZWZpbml0aW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHlvdXIgc2VydmljZS4gVXAgdG8gMjU1IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zIGFyZSBhbGxvd2VkLiBTZXJ2aWNlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGNsdXN0ZXIsIGJ1dCB5b3UgY2FuIGhhdmUgc2ltaWxhcmx5IG5hbWVkIHNlcnZpY2VzIGluIG11bHRpcGxlIGNsdXN0ZXJzIHdpdGhpbiBhIFJlZ2lvbiBvciBhY3Jvc3MgbXVsdGlwbGUgUmVnaW9ucy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgdGhlIGBgU2VydmljZU5hbWVgYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZU5hbWVgYCBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgY2x1c3Rlci5cbiAqL1xuU2VydmljZU5hbWU/OiBzdHJpbmdcbkRlcGxveW1lbnRDb25maWd1cmF0aW9uPzogRGVwbG95bWVudENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5IGZvciBhIHRhc2sgb3Igc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtc3RyYXRlZ2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50U3RyYXRlZ3kge1xuLyoqXG4gKiBUaGUgZmllbGQgdG8gYXBwbHkgdGhlIHBsYWNlbWVudCBzdHJhdGVneSBhZ2FpbnN0LiBGb3IgdGhlIGBgc3ByZWFkYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB2YWxpZCB2YWx1ZXMgYXJlIGBgaW5zdGFuY2VJZGBgIChvciBgYGhvc3RgYCwgd2hpY2ggaGFzIHRoZSBzYW1lIGVmZmVjdCksIG9yIGFueSBwbGF0Zm9ybSBvciBjdXN0b20gYXR0cmlidXRlIHRoYXQncyBhcHBsaWVkIHRvIGEgY29udGFpbmVyIGluc3RhbmNlLCBzdWNoIGFzIGBgYXR0cmlidXRlOmVjcy5hdmFpbGFiaWxpdHktem9uZWBgLiBGb3IgdGhlIGBgYmlucGFja2BgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGNwdWBgIGFuZCBgYG1lbW9yeWBgLiBGb3IgdGhlIGBgcmFuZG9tYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB0aGlzIGZpZWxkIGlzIG5vdCB1c2VkLlxuICovXG5GaWVsZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBwbGFjZW1lbnQgc3RyYXRlZ3kuIFRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSByYW5kb21seSBwbGFjZXMgdGFza3Mgb24gYXZhaWxhYmxlIGNhbmRpZGF0ZXMuIFRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSBzcHJlYWRzIHBsYWNlbWVudCBhY3Jvc3MgYXZhaWxhYmxlIGNhbmRpZGF0ZXMgZXZlbmx5IGJhc2VkIG9uIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBUaGUgYGBiaW5wYWNrYGAgc3RyYXRlZ3kgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzIHRoYXQgaGF2ZSB0aGUgbGVhc3QgYXZhaWxhYmxlIGFtb3VudCBvZiB0aGUgcmVzb3VyY2UgdGhhdCdzIHNwZWNpZmllZCB3aXRoIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSwgaWYgeW91IGJpbnBhY2sgb24gbWVtb3J5LCBhIHRhc2sgaXMgcGxhY2VkIG9uIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgcmVtYWluaW5nIG1lbW9yeSBidXQgc3RpbGwgZW5vdWdoIHRvIHJ1biB0aGUgdGFzay5cbiAqL1xuVHlwZTogKFwiYmlucGFja1wiIHwgXCJyYW5kb21cIiB8IFwic3ByZWFkXCIpXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIGZvciB0aGUgc2VydmljZSByZWdpc3RyeS5cbiAqICBFYWNoIHNlcnZpY2UgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBvbmUgc2VydmljZSByZWdpc3RyeS4gTXVsdGlwbGUgc2VydmljZSByZWdpc3RyaWVzIGZvciBlYWNoIHNlcnZpY2UgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKiAgV2hlbiB5b3UgYWRkLCB1cGRhdGUsIG9yIHJlbW92ZSB0aGUgc2VydmljZSByZWdpc3RyaWVzIGNvbmZpZ3VyYXRpb24sIEFtYXpvbiBFQ1Mgc3RhcnRzIGEgbmV3IGRlcGxveW1lbnQuIE5ldyB0YXNrcyBhcmUgcmVnaXN0ZXJlZCBhbmQgZGVyZWdpc3RlcmVkIHRvIHRoZSB1cGRhdGVkIHNlcnZpY2UgcmVnaXN0cnkgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVnaXN0cnkge1xuLyoqXG4gKiBUaGUgY29udGFpbmVyIG5hbWUgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gb3IgYSBgYHBvcnRgYCB2YWx1ZS4gSG93ZXZlciwgeW91IGNhbid0IHNwZWNpZnkgYm90aC5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB1c2VkIGlmIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZSBzcGVjaWZpZWQgYW4gU1JWIHJlY29yZC4gVGhpcyBmaWVsZCBtaWdodCBiZSB1c2VkIGlmIGJvdGggdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBTUlYgcmVjb3JkcyBhcmUgdXNlZC5cbiAqL1xuUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIEl0J3MgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIENNQVAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZVNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlU2VydmljZS5odG1sKS5cbiAqL1xuUmVnaXN0cnlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb24ge1xuTWFuYWdlZEVCU1ZvbHVtZT86IFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdm9sdW1lLiBUaGlzIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHZvbHVtZSBuYW1lIGZyb20gdGhlIGBgVm9sdW1lYGAgb2JqZWN0IGluIHRoZSB0YXNrIGRlZmluaXRpb24uXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFtYXpvbiBFQlMgdm9sdW1lIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGFuZCBtYW5hZ2VzIG9uIHlvdXIgYmVoYWxmLiBUaGVzZSBzZXR0aW5ncyBhcmUgdXNlZCB0byBjcmVhdGUgZWFjaCBBbWF6b24gRUJTIHZvbHVtZSwgd2l0aCBvbmUgdm9sdW1lIGNyZWF0ZWQgZm9yIGVhY2ggdGFzayBpbiB0aGUgc2VydmljZS4gVGhlIEFtYXpvbiBFQlMgdm9sdW1lcyBhcmUgdmlzaWJsZSBpbiB5b3VyIGFjY291bnQgaW4gdGhlIEFtYXpvbiBFQzIgY29uc29sZSBvbmNlIHRoZXkgYXJlIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU1hbmFnZWRFQlNWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNuYXBzaG90IHRoYXQgQW1hem9uIEVDUyB1c2VzIHRvIGNyZWF0ZSB2b2x1bWVzIGZvciBhdHRhY2htZW50IHRvIHRhc2tzIG1haW50YWluZWQgYnkgdGhlIHNlcnZpY2UuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGBgc25hcHNob3RJZGBgIG9yIGBgc2l6ZUluR2lCYGAgaW4geW91ciB2b2x1bWUgY29uZmlndXJhdGlvbi4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTbmFwc2hvdElkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5TbmFwc2hvdElkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2b2x1bWUgdHlwZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBWb2x1bWVUeXBlYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJTIHZvbHVtZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGVzLlxuICogICArICBHZW5lcmFsIFB1cnBvc2UgU1NEOiBgYGdwMmBgfGBgZ3AzYGBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBTU0Q6IGBgaW8xYGB8YGBpbzJgYFxuICogICArICBUaHJvdWdocHV0IE9wdGltaXplZCBIREQ6IGBgc3QxYGBcbiAqICAgKyAgQ29sZCBIREQ6IGBgc2MxYGBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYFxuICogICBUaGUgbWFnbmV0aWMgdm9sdW1lIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBvbiBGYXJnYXRlLlxuICovXG5Wb2x1bWVUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBpZGVudGlmaWVyIG9mIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgdG8gdXNlIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24uIFdoZW4gYSBrZXkgaXMgc3BlY2lmaWVkIHVzaW5nIHRoaXMgcGFyYW1ldGVyLCBpdCBvdmVycmlkZXMgQW1hem9uIEVCUyBkZWZhdWx0IGVuY3J5cHRpb24gb3IgYW55IEtNUyBrZXkgdGhhdCB5b3Ugc3BlY2lmaWVkIGZvciBjbHVzdGVyLWxldmVsIG1hbmFnZWQgc3RvcmFnZSBlbmNyeXB0aW9uLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEttc0tleUlkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBlbmNyeXB0aW5nIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byB0YXNrcywgc2VlIFtFbmNyeXB0IGRhdGEgc3RvcmVkIGluIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byBBbWF6b24gRUNTIHRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lYnMta21zLWVuY3J5cHRpb24uaHRtbCkuXG4gKiAgIEFXUyBhdXRoZW50aWNhdGVzIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgYXN5bmNocm9ub3VzbHkuIFRoZXJlZm9yZSwgaWYgeW91IHNwZWNpZnkgYW4gSUQsIGFsaWFzLCBvciBBUk4gdGhhdCBpcyBpbnZhbGlkLCB0aGUgYWN0aW9uIGNhbiBhcHBlYXIgdG8gY29tcGxldGUsIGJ1dCBldmVudHVhbGx5IGZhaWxzLlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgdm9sdW1lLiBBbWF6b24gRUNTIGFwcGxpZXMgc2VydmljZS1tYW5hZ2VkIHRhZ3MgYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUYWdTcGVjaWZpY2F0aW9ucy5OYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5UYWdTcGVjaWZpY2F0aW9ucz86IEVCU1RhZ1NwZWNpZmljYXRpb25bXVxuLyoqXG4gKiBUaGUgZmlsZXN5c3RlbSB0eXBlIGZvciB0aGUgdm9sdW1lLiBGb3Igdm9sdW1lcyBjcmVhdGVkIGZyb20gYSBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBmaWxlc3lzdGVtIHR5cGUgdGhhdCB0aGUgdm9sdW1lIHdhcyB1c2luZyB3aGVuIHRoZSBzbmFwc2hvdCB3YXMgY3JlYXRlZC4gSWYgdGhlcmUgaXMgYSBmaWxlc3lzdGVtIHR5cGUgbWlzbWF0Y2gsIHRoZSB0YXNrcyB3aWxsIGZhaWwgdG8gc3RhcnQuXG4gKiAgVGhlIGF2YWlsYWJsZSBMaW51eCBmaWxlc3lzdGVtIHR5cGVzIGFyZeKAqCBgYGV4dDNgYCwgYGBleHQ0YGAsIGFuZCBgYHhmc2BgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBgYHhmc2BgIGZpbGVzeXN0ZW0gdHlwZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiAgVGhlIGF2YWlsYWJsZSBXaW5kb3dzIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIGBgTlRGU2BgLlxuICovXG5GaWxlc3lzdGVtVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIElmIHlvdSB0dXJuIG9uIFJlZ2lvbi1sZXZlbCBBbWF6b24gRUJTIGVuY3J5cHRpb24gYnkgZGVmYXVsdCBidXQgc2V0IHRoaXMgdmFsdWUgYXMgYGBmYWxzZWBgLCB0aGUgc2V0dGluZyBpcyBvdmVycmlkZGVuIGFuZCB0aGUgdm9sdW1lIGlzIGVuY3J5cHRlZCB3aXRoIHRoZSBLTVMga2V5IHNwZWNpZmllZCBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgRW5jcnlwdGVkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5FbmNyeXB0ZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0aHJvdWdocHV0IHRvIHByb3Zpc2lvbiBmb3IgYSB2b2x1bWUsIGluIE1pQi9zLCB3aXRoIGEgbWF4aW11bSBvZiAxLDAwMCBNaUIvcy4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUaHJvdWdocHV0YGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgZ3AzYGAgdm9sdW1lIHR5cGUuXG4gKi9cblRocm91Z2hwdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHJhdGUsIGluIE1pQi9zLCBhdCB3aGljaCBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNuYXBzaG90IG9mIGFuIGV4aXN0aW5nIEVCUyB2b2x1bWUgdG8gY3JlYXRlIG5ldyB2b2x1bWVzIGZvciBhdHRhY2htZW50IHRvIHRoZSB0YXNrcyBtYWludGFpbmVkIGJ5IHRoZSBzZXJ2aWNlLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBzcGVjaWZpZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBhIGBgc25hcHNob3RJZGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJbml0aWFsaXplIEFtYXpvbiBFQlMgdm9sdW1lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2luaXRhbGl6ZS12b2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUJTIFVzZXIgR3VpZGUqLlxuICovXG5Wb2x1bWVJbml0aWFsaXphdGlvblJhdGU/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kIChJT1BTKS4gRm9yIGBgZ3AzYGAsIGBgaW8xYGAsIGFuZCBgYGlvMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIElPUFMgdGhhdCBhcmUgcHJvdmlzaW9uZWQgZm9yIHRoZSB2b2x1bWUuIEZvciBgYGdwMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgYmFzZWxpbmUgcGVyZm9ybWFuY2Ugb2YgdGhlIHZvbHVtZSBhbmQgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHZvbHVtZSBhY2N1bXVsYXRlcyBJL08gY3JlZGl0cyBmb3IgYnVyc3RpbmcuXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgIGBgZ3AzYGA6IDMsMDAwIC0gMTYsMDAwIElPUFNcbiAqICAgKyAgYGBpbzFgYDogMTAwIC0gNjQsMDAwIElPUFNcbiAqICAgKyAgYGBpbzJgYDogMTAwIC0gMjU2LDAwMCBJT1BTXG4gKiAgIFxuICogIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciBgYGlvMWBgIGFuZCBgYGlvMmBgIHZvbHVtZSB0eXBlcy4gVGhlIGRlZmF1bHQgZm9yIGBgZ3AzYGAgdm9sdW1lcyBpcyBgYDMsMDAwIElPUFNgYC4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGBzdDFgYCwgYGBzYzFgYCwgb3IgYGBzdGFuZGFyZGBgIHZvbHVtZSB0eXBlcy5cbiAqICBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSBpbiBHaUIuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgdm9sdW1lIHNpemUgb3IgYSBzbmFwc2hvdCBJRC4gSWYgeW91IHNwZWNpZnkgYSBzbmFwc2hvdCBJRCwgdGhlIHNuYXBzaG90IHNpemUgaXMgdXNlZCBmb3IgdGhlIHZvbHVtZSBzaXplIGJ5IGRlZmF1bHQuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdm9sdW1lIHNpemUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzbmFwc2hvdCBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNpemVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgc2l6ZSB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEtMTYsMzg0XG4gKiAgICsgIGBgaW8xYGAgYW5kIGBgaW8yYGA6IDQtMTYsMzg0XG4gKiAgICsgIGBgc3QxYGAgYW5kIGBgc2MxYGA6IDEyNS0xNiwzODRcbiAqICAgKyAgYGBzdGFuZGFyZGBgOiAxLTEsMDI0XG4gKi9cblNpemVJbkdpQj86IG51bWJlclxuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHZvbHVtZS4gVGhpcyBpcyB0aGUgQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgQVdTIGluZnJhc3RydWN0dXJlLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIEFtYXpvbiBFQ1MtbWFuYWdlZCBgYEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXNgYCBJQU0gcG9saWN5IHdpdGggdGhpcyByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9pbmZyYXN0cnVjdHVyZV9JQU1fcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQ1MgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSB0YWcgc3BlY2lmaWNhdGlvbnMgb2YgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUJTVGFnU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIOKAqHRoZSBBbWF6b24gRUJTIHZvbHVtZS4gVGFncyBjYW4gb25seSBwcm9wYWdhdGUgdG8gYSBgYFNFUlZJQ0VgYCBzcGVjaWZpZWQgaW4g4oCoYGBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbmBgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCDigKhwcm9wYWdhdGVkLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcbi8qKlxuICogVGhlIHR5cGUgb2Ygdm9sdW1lIHJlc291cmNlLlxuICovXG5SZXNvdXJjZVR5cGU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyBhcHBsaWVkIHRvIHRoaXMgQW1hem9uIEVCUyB2b2x1bWUuIGBgQW1hem9uRUNTQ3JlYXRlZGBgIGFuZCBgYEFtYXpvbkVDU01hbmFnZWRgYCBhcmUgcmVzZXJ2ZWQgdGFncyB0aGF0IGNhbid0IGJlIHVzZWQuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gYSByZXNvdXJjZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgdGhlbS5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICogICBcbiAqICBJbiBvcmRlciB0byB0YWcgYSBzZXJ2aWNlIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcgQVJOIGZvcm1hdCwgeW91IG5lZWQgdG8gbWlncmF0ZSB0aGUgc2VydmljZSB0byB0aGUgbG9uZyBBUk4uIFlvdSBtdXN0IHVzZSB0aGUgQVBJLCBDTEkgb3IgY29uc29sZSB0byBtaWdyYXRlIHRoZSBzZXJ2aWNlIEFSTi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWlncmF0ZSBhbiBzaG9ydCBzZXJ2aWNlIEFSTiB0byBhIGxvbmcgQVJOXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWFybi1taWdyYXRpb24uaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICogICBgYGFybjphd3M6ZWNzOnJlZ2lvbjphd3NfYWNjb3VudF9pZDpzZXJ2aWNlL3NlcnZpY2UtbmFtZWBgIFxuICogIEFmdGVyIHRoZSBtaWdyYXRpb24gaXMgY29tcGxldGUsIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6XG4gKiAgICsgICBUaGUgc2VydmljZSBBUk4gaXM6IGBgYXJuOmF3czplY3M6cmVnaW9uOmF3c19hY2NvdW50X2lkOnNlcnZpY2UvY2x1c3Rlci1uYW1lL3NlcnZpY2UtbmFtZWBgXG4gKiAgICsgIFlvdSBjYW4gdXNlIENGTiB0byB0YWcgdGhlIHNlcnZpY2UgYXMgeW91IHdvdWxkIGEgc2VydmljZSB3aXRoIGEgbG9uZyBBUk4gZm9ybWF0LlxuICogICArICBXaGVuIHRoZSBgYFBoeXNpY2FsUmVzb3VyY2VJZGBgIGluIHRoZSBDRk4gc3RhY2sgcmVwcmVzZW50cyBhIHNlcnZpY2UsIHRoZSB2YWx1ZSBkb2VzIG5vdCBjaGFuZ2UgYW5kIHdpbGwgYmUgdGhlIHNob3J0IHNlcnZpY2UgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBvcHRpb25hbCBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBgdmFsdWVgYCBhY3RzIGFzIGEgZGVzY3JpcHRvciB3aXRoaW4gYSB0YWcgY2F0ZWdvcnkgKGtleSkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIE9uZSBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBga2V5YGAgaXMgYSBnZW5lcmFsIGxhYmVsIHRoYXQgYWN0cyBsaWtlIGEgY2F0ZWdvcnkgZm9yIG1vcmUgc3BlY2lmaWMgdGFnIHZhbHVlcy5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGJlIHNldCB3aGVuIHVzaW5nIHRoZSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBBUElzIG9yIGFzIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGZvciBhIGNsdXN0ZXIgd2l0aCB0aGUgYGBDcmVhdGVDbHVzdGVyYGAgQVBJLlxuICogIE9ubHkgY2FwYWNpdHkgcHJvdmlkZXJzIHRoYXQgYXJlIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBhbmQgaGF2ZSBhbiBgYEFDVElWRWBgIG9yIGBgVVBEQVRJTkdgYCBzdGF0dXMgY2FuIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gVGhlIGBgUHV0Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJzYGAgQVBJIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgY2FwYWNpdHkgcHJvdmlkZXIgd2l0aCBhIGNsdXN0ZXIuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC4gTmV3IEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYGBDcmVhdGVDYXBhY2l0eVByb3ZpZGVyYGAgQVBJIG9wZXJhdGlvbi5cbiAqICBUbyB1c2UgYW4gRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW0ge1xuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXIuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlICpiYXNlKiB2YWx1ZSBkZXNpZ25hdGVzIGhvdyBtYW55IHRhc2tzLCBhdCBhIG1pbmltdW0sIHRvIHJ1biBvbiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyIGZvciBlYWNoIHNlcnZpY2UuIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGhhdmUgYSAqYmFzZSogZGVmaW5lZC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICogIEJhc2UgdmFsdWUgY2hhcmFjdGVyaXN0aWNzOlxuICogICArICBPbmx5IG9uZSBjYXBhY2l0eSBwcm92aWRlciBpbiBhIHN0cmF0ZWd5IGNhbiBoYXZlIGEgYmFzZSBkZWZpbmVkXG4gKiAgICsgIERlZmF1bHQgdmFsdWUgaXMgYGAwYGAgaWYgbm90IHNwZWNpZmllZFxuICogICArICBWYWxpZCByYW5nZTogMCB0byAxMDAsMDAwXG4gKiAgICsgIEJhc2UgcmVxdWlyZW1lbnRzIGFyZSBzYXRpc2ZpZWQgZmlyc3QgYmVmb3JlIHdlaWdodCBkaXN0cmlidXRpb25cbiAqL1xuQmFzZT86IG51bWJlclxuLyoqXG4gKiBUaGUgKndlaWdodCogdmFsdWUgZGVzaWduYXRlcyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzIGxhdW5jaGVkIHRoYXQgc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBUaGUgYGB3ZWlnaHRgYCB2YWx1ZSBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYWZ0ZXIgdGhlIGBgYmFzZWBgIHZhbHVlLCBpZiBkZWZpbmVkLCBpcyBzYXRpc2ZpZWQuXG4gKiAgSWYgbm8gYGB3ZWlnaHRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIFdoZW4gbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3ksIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSBhIHdlaWdodCB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYW55IGNhcGFjaXR5IHByb3ZpZGVycyB3aXRoIGEgd2VpZ2h0IG9mIGBgMGBgIGNhbid0IGJlIHVzZWQgdG8gcGxhY2UgdGFza3MuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBpbiBhIHN0cmF0ZWd5IHRoYXQgYWxsIGhhdmUgYSB3ZWlnaHQgb2YgYGAwYGAsIGFueSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBhY3Rpb25zIHVzaW5nIHRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB3aWxsIGZhaWwuXG4gKiAgV2VpZ2h0IHZhbHVlIGNoYXJhY3RlcmlzdGljczpcbiAqICAgKyAgV2VpZ2h0IGlzIGNvbnNpZGVyZWQgYWZ0ZXIgdGhlIGJhc2UgdmFsdWUgaXMgc2F0aXNmaWVkXG4gKiAgICsgIERlZmF1bHQgdmFsdWUgaXMgYGAwYGAgaWYgbm90IHNwZWNpZmllZFxuICogICArICBWYWxpZCByYW5nZTogMCB0byAxLDAwMFxuICogICArICBBdCBsZWFzdCBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgbXVzdCBoYXZlIGEgd2VpZ2h0IGdyZWF0ZXIgdGhhbiB6ZXJvXG4gKiAgICsgIENhcGFjaXR5IHByb3ZpZGVycyB3aXRoIHdlaWdodCBvZiBgYDBgYCBjYW5ub3QgcGxhY2UgdGFza3NcbiAqICAgXG4gKiAgVGFzayBkaXN0cmlidXRpb24gbG9naWM6XG4gKiAgIDEuICBCYXNlIHNhdGlzZmFjdGlvbjogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHRhc2tzIHNwZWNpZmllZCBieSB0aGUgYmFzZSB2YWx1ZSBhcmUgcGxhY2VkIG9uIHRoYXQgY2FwYWNpdHkgcHJvdmlkZXJcbiAqICAgMS4gIFdlaWdodCBkaXN0cmlidXRpb246IEFmdGVyIGJhc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGFkZGl0aW9uYWwgdGFza3MgYXJlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB3ZWlnaHQgcmF0aW9zXG4gKiAgIFxuICogIEV4YW1wbGVzOlxuICogIEVxdWFsIERpc3RyaWJ1dGlvbjogVHdvIGNhcGFjaXR5IHByb3ZpZGVycyBib3RoIHdpdGggd2VpZ2h0IGBgMWBgIHdpbGwgc3BsaXQgdGFza3MgZXZlbmx5IGFmdGVyIGJhc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQuXG4gKiAgV2VpZ2h0ZWQgRGlzdHJpYnV0aW9uOiBJZiBjYXBhY2l0eVByb3ZpZGVyQSBoYXMgd2VpZ2h0IGBgMWBgIGFuZCBjYXBhY2l0eVByb3ZpZGVyQiBoYXMgd2VpZ2h0IGBgNGBgLCB0aGVuIGZvciBldmVyeSAxIHRhc2sgb24gQSwgNCB0YXNrcyB3aWxsIHJ1biBvbiBCLlxuICovXG5XZWlnaHQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciB0YXNrIGRlZmluaXRpb25zIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSB0byByZWNlaXZlIHRoZWlyIG93biBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBhbmQgaXQgaXMgbm90IHN1cHBvcnRlZCBmb3Igb3RoZXIgbmV0d29yayBtb2Rlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBOZXR3b3JraW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLW5ldHdvcmtpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtDb25maWd1cmF0aW9uIHtcbkF3c3ZwY0NvbmZpZ3VyYXRpb24/OiBBd3NWcGNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzVnBjQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHNlY3VyaXR5IGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzZWN1cml0eSBncm91cCwgdGhlIGRlZmF1bHQgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBWUEMgaXMgdXNlZC4gVGhlcmUncyBhIGxpbWl0IG9mIDUgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgY2FuIGJlIHNwZWNpZmllZC5cbiAqICAgQWxsIHNwZWNpZmllZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuU2VjdXJpdHlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBUaGVyZSdzIGEgbGltaXQgb2YgMTYgc3VibmV0cyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TdWJuZXRzPzogc3RyaW5nW11cbi8qKlxuICogV2hldGhlciB0aGUgdGFzaydzIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcmVjZWl2ZXMgYSBwdWJsaWMgSVAgYWRkcmVzcy4gXG4gKiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyB3aGVuIHlvdSBzZXQgdGhpcyB2YWx1ZTpcbiAqICAgKyAgV2hlbiB5b3UgdXNlIGBgY3JlYXRlLXNlcnZpY2VgYCBvciBgYHVwZGF0ZS1zZXJ2aWNlYGAsIHRoZSBkZWZhdWx0IGlzIGBgRElTQUJMRURgYC4gXG4gKiAgICsgIFdoZW4gdGhlIHNlcnZpY2UgYGBkZXBsb3ltZW50Q29udHJvbGxlcmBgIGlzIGBgRUNTYGAsIHRoZSB2YWx1ZSBtdXN0IGJlIGBgRElTQUJMRURgYC5cbiAqL1xuQXNzaWduUHVibGljSXA/OiAoXCJESVNBQkxFRFwiIHwgXCJFTkFCTEVEXCIpXG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBmb3JjZSBhIG5ldyBkZXBsb3ltZW50IG9mIHRoZSBzZXJ2aWNlLiBCeSBkZWZhdWx0LCBkZXBsb3ltZW50cyBhcmVuJ3QgZm9yY2VkLiBZb3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzdGFydCBhIG5ldyBkZXBsb3ltZW50IHdpdGggbm8gc2VydmljZSBkZWZpbml0aW9uIGNoYW5nZXMuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVwZGF0ZSBhIHNlcnZpY2UncyB0YXNrcyB0byB1c2UgYSBuZXdlciBEb2NrZXIgaW1hZ2Ugd2l0aCB0aGUgc2FtZSBpbWFnZS90YWcgY29tYmluYXRpb24gKGBgbXlfaW1hZ2U6bGF0ZXN0YGApIG9yIHRvIHJvbGwgRmFyZ2F0ZSB0YXNrcyBvbnRvIGEgbmV3ZXIgcGxhdGZvcm0gdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JjZU5ld0RlcGxveW1lbnQge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZm9yY2UgYSBuZXcgZGVwbG95bWVudCBvZiB0aGUgc2VydmljZS4gQnkgZGVmYXVsdCwgZGVwbG95bWVudHMgYXJlbid0IGZvcmNlZC4gWW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3RhcnQgYSBuZXcgZGVwbG95bWVudCB3aXRoIG5vIHNlcnZpY2UgZGVmaW5pdGlvbiBjaGFuZ2VzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiB1cGRhdGUgYSBzZXJ2aWNlJ3MgdGFza3MgdG8gdXNlIGEgbmV3ZXIgRG9ja2VyIGltYWdlIHdpdGggdGhlIHNhbWUgaW1hZ2UvdGFnIGNvbWJpbmF0aW9uIChgYG15X2ltYWdlOmxhdGVzdGBgKSBvciB0byByb2xsIEZhcmdhdGUgdGFza3Mgb250byBhIG5ld2VyIHBsYXRmb3JtIHZlcnNpb24uXG4gKi9cbkVuYWJsZUZvcmNlTmV3RGVwbG95bWVudDogYm9vbGVhblxuLyoqXG4gKiBXaGVuIHlvdSBjaGFuZ2UgdGhlYGBGb3JjZU5ld0RlcGxveW1lbnROb25jZWBgIHZhbHVlIGluIHlvdXIgdGVtcGxhdGUsIGl0IHNpZ25hbHMgRUNTIHRvIHN0YXJ0IGEgbmV3IGRlcGxveW1lbnQgZXZlbiB0aG91Z2ggbm8gb3RoZXIgc2VydmljZSBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC4gVGhlIHZhbHVlIG11c3QgYmUgYSB1bmlxdWUsIHRpbWUtIHZhcnlpbmcgdmFsdWUgbGlrZSBhIHRpbWVzdGFtcCwgcmFuZG9tIHN0cmluZywgb3Igc2VxdWVuY2UgbnVtYmVyLiBVc2UgdGhpcyBwcm9wZXJ0eSB3aGVuIHlvdSB3YW50IHRvIGVuc3VyZSB5b3VyIHRhc2tzIHBpY2sgdXAgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgRG9ja2VyIGltYWdlIHRoYXQgdXNlcyB0aGUgc2FtZSB0YWcgYnV0IGhhcyBiZWVuIHVwZGF0ZWQgaW4gdGhlIHJlZ2lzdHJ5LlxuICovXG5Gb3JjZU5ld0RlcGxveW1lbnROb25jZT86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29uc3RyYWludCBvbiB0YXNrIHBsYWNlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgY29uc3RyYWludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LWNvbnN0cmFpbnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91J3JlIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudENvbnN0cmFpbnQge1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBjb25zdHJhaW50LiBVc2UgYGBkaXN0aW5jdEluc3RhbmNlYGAgdG8gZW5zdXJlIHRoYXQgZWFjaCB0YXNrIGluIGEgcGFydGljdWxhciBncm91cCBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGNvbnRhaW5lciBpbnN0YW5jZS4gVXNlIGBgbWVtYmVyT2ZgYCB0byByZXN0cmljdCB0aGUgc2VsZWN0aW9uIHRvIGEgZ3JvdXAgb2YgdmFsaWQgY2FuZGlkYXRlcy5cbiAqL1xuVHlwZTogKFwiZGlzdGluY3RJbnN0YW5jZVwiIHwgXCJtZW1iZXJPZlwiKVxuLyoqXG4gKiBBIGNsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2UgZXhwcmVzc2lvbiB0byBhcHBseSB0byB0aGUgY29uc3RyYWludC4gVGhlIGV4cHJlc3Npb24gY2FuIGhhdmUgYSBtYXhpbXVtIGxlbmd0aCBvZiAyMDAwIGNoYXJhY3RlcnMuIFlvdSBjYW4ndCBzcGVjaWZ5IGFuIGV4cHJlc3Npb24gaWYgdGhlIGNvbnN0cmFpbnQgdHlwZSBpcyBgYGRpc3RpbmN0SW5zdGFuY2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2x1c3RlciBxdWVyeSBsYW5ndWFnZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY2x1c3Rlci1xdWVyeS1sYW5ndWFnZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkV4cHJlc3Npb24/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGBgTG9hZEJhbGFuY2VyYGAgcHJvcGVydHkgc3BlY2lmaWVzIGRldGFpbHMgb24gYSBsb2FkIGJhbGFuY2VyIHRoYXQgaXMgdXNlZCB3aXRoIGEgc2VydmljZS5cbiAqICBJZiB0aGUgc2VydmljZSBpcyB1c2luZyB0aGUgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgdGhlIHNlcnZpY2UgaXMgcmVxdWlyZWQgdG8gdXNlIGVpdGhlciBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gV2hlbiB5b3UgYXJlIGNyZWF0aW5nIGFuIEFDRGxvbmcgZGVwbG95bWVudCBncm91cCwgeW91IHNwZWNpZnkgdHdvIHRhcmdldCBncm91cHMgKHJlZmVycmVkIHRvIGFzIGEgYGB0YXJnZXRHcm91cFBhaXJgYCkuIEVhY2ggdGFyZ2V0IGdyb3VwIGJpbmRzIHRvIGEgc2VwYXJhdGUgdGFzayBzZXQgaW4gdGhlIGRlcGxveW1lbnQuIFRoZSBsb2FkIGJhbGFuY2VyIGNhbiBhbHNvIGhhdmUgdXAgdG8gdHdvIGxpc3RlbmVycywgYSByZXF1aXJlZCBsaXN0ZW5lciBmb3IgcHJvZHVjdGlvbiB0cmFmZmljIGFuZCBhbiBvcHRpb25hbCBsaXN0ZW5lciB0aGF0IGFsbG93cyB5b3UgdG8gdGVzdCBuZXcgcmV2aXNpb25zIG9mIHRoZSBzZXJ2aWNlIGJlZm9yZSByb3V0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC5cbiAqICBTZXJ2aWNlcyB3aXRoIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSAoZm9yIGV4YW1wbGUsIHRob3NlIHdpdGggdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUpIG9ubHkgc3VwcG9ydCBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycyBhbmQgTmV0d29yayBMb2FkIEJhbGFuY2Vycy4gQ2xhc3NpYyBMb2FkIEJhbGFuY2VycyBhcmUgbm90IHN1cHBvcnRlZC4gQWxzbywgd2hlbiB5b3UgY3JlYXRlIGFueSB0YXJnZXQgZ3JvdXBzIGZvciB0aGVzZSBzZXJ2aWNlcywgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIFRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlciB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRhcmdldCBncm91cCBvciBncm91cHMgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBBIHRhcmdldCBncm91cCBBUk4gaXMgb25seSBzcGVjaWZpZWQgd2hlbiB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYEVDU2BgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91IGNhbiBzcGVjaWZ5IG9uZSBvciBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZWdpc3RlcmluZyBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzIHdpdGggYSBzZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9yZWdpc3Rlci1tdWx0aXBsZS10YXJnZXRncm91cHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91J3JlIHJlcXVpcmVkIHRvIGRlZmluZSB0d28gdGFyZ2V0IGdyb3VwcyBmb3IgdGhlIGxvYWQgYmFsYW5jZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JsdWUvZ3JlZW4gZGVwbG95bWVudCB3aXRoIENvZGVEZXBsb3ldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1ibHVlZ3JlZW4uaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3VyIHNlcnZpY2UncyB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBEbyB0aGlzIHdoZW4gY3JlYXRpbmcgeW91ciB0YXJnZXQgZ3JvdXBzIGJlY2F1c2UgdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuIFRoaXMgbmV0d29yayBtb2RlIGlzIHJlcXVpcmVkIGZvciB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS5cbiAqL1xuVGFyZ2V0R3JvdXBBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxvYWQgYmFsYW5jZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBJZiB5b3UgYXJlIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgYSBOZXR3b3JrIExvYWQgQmFsYW5jZXIgdGhlIGxvYWQgYmFsYW5jZXIgbmFtZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9taXR0ZWQuXG4gKi9cbkxvYWRCYWxhbmNlck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciAoYXMgaXQgYXBwZWFycyBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uKSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAqICBZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb250YWluZXIgbmFtZSB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0YXJnZXQgZ3JvdXAgZm9yIGFuIEFtYXpvbiBFQ1MgbG9hZCBiYWxhbmNlci5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBvbiB0aGUgY29udGFpbmVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLiBUaGlzIHBvcnQgbXVzdCBjb3JyZXNwb25kIHRvIGEgYGBjb250YWluZXJQb3J0YGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHVzaW5nLiBGb3IgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGV5J3JlIGxhdW5jaGVkIG9uIG11c3QgYWxsb3cgaW5ncmVzcyB0cmFmZmljIG9uIHRoZSBgYGhvc3RQb3J0YGAgb2YgdGhlIHBvcnQgbWFwcGluZy5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxuQWR2YW5jZWRDb25maWd1cmF0aW9uPzogQWR2YW5jZWRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBhZHZhbmNlZCBzZXR0aW5ncyBmb3IgdGhlIGxvYWQgYmFsYW5jZXIgdXNlZCBpbiBibHVlL2dyZWVuIGRlcGxveW1lbnRzLiBTcGVjaWZ5IHRoZSBhbHRlcm5hdGUgdGFyZ2V0IGdyb3VwLCBsaXN0ZW5lciBydWxlcywgYW5kIElBTSByb2xlIHJlcXVpcmVkIGZvciB0cmFmZmljIHNoaWZ0aW5nIGR1cmluZyBibHVlL2dyZWVuIGRlcGxveW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSB0aGF0IGlkZW50aWZpZXMgKSB0aGF0IGlkZW50aWZpZXMgdGhlIHRlc3QgbGlzdGVuZXIgcnVsZSAoaW4gdGhlIGNhc2Ugb2YgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcikgb3IgbGlzdGVuZXIgKGluIHRoZSBjYXNlIGZvciBhbiBOZXR3b3JrIExvYWQgQmFsYW5jZXIpIGZvciByb3V0aW5nIHRlc3QgdHJhZmZpYy5cbiAqL1xuVGVzdExpc3RlbmVyUnVsZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGFsdGVybmF0ZSB0YXJnZXQgZ3JvdXAgZm9yIEFtYXpvbiBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cy5cbiAqL1xuQWx0ZXJuYXRlVGFyZ2V0R3JvdXBBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgdGhhdCB0aGF0IGlkZW50aWZpZXMgdGhlIHByb2R1Y3Rpb24gbGlzdGVuZXIgcnVsZSAoaW4gdGhlIGNhc2Ugb2YgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcikgb3IgbGlzdGVuZXIgKGluIHRoZSBjYXNlIGZvciBhbiBOZXR3b3JrIExvYWQgQmFsYW5jZXIpIGZvciByb3V0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYy5cbiAqL1xuUHJvZHVjdGlvbkxpc3RlbmVyUnVsZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIEFtYXpvbiBFQ1MgcGVybWlzc2lvbiB0byBjYWxsIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIEFQSXMgZm9yIHlvdS5cbiAqL1xuUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlIHRvIGRpc2NvdmVyIGFuZCBjb25uZWN0IHRvIHNlcnZpY2VzLCBhbmQgYmUgZGlzY292ZXJlZCBieSwgYW5kIGNvbm5lY3RlZCBmcm9tLCBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gYSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBsaXN0IG9mIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdHMuIFRoZXNlIGFyZSBuYW1lcyBhbmQgYWxpYXNlcyAoYWxzbyBrbm93biBhcyBlbmRwb2ludHMpIHRoYXQgYXJlIHVzZWQgYnkgb3RoZXIgQW1hem9uIEVDUyBzZXJ2aWNlcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gXG4gKiAgVGhpcyBmaWVsZCBpcyBub3QgcmVxdWlyZWQgZm9yIGEgXCJjbGllbnRcIiBBbWF6b24gRUNTIHNlcnZpY2UgdGhhdCdzIGEgbWVtYmVyIG9mIGEgbmFtZXNwYWNlIG9ubHkgdG8gY29ubmVjdCB0byBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gdGhlIG5hbWVzcGFjZS4gQW4gZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIGEgZnJvbnRlbmQgYXBwbGljYXRpb24gdGhhdCBhY2NlcHRzIGluY29taW5nIHJlcXVlc3RzIGZyb20gZWl0aGVyIGEgbG9hZCBiYWxhbmNlciB0aGF0J3MgYXR0YWNoZWQgdG8gdGhlIHNlcnZpY2Ugb3IgYnkgb3RoZXIgbWVhbnMuXG4gKiAgQW4gb2JqZWN0IHNlbGVjdHMgYSBwb3J0IGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiwgYXNzaWducyBhIG5hbWUgZm9yIHRoZSBDTUFQbG9uZyBzZXJ2aWNlLCBhbmQgYSBsaXN0IG9mIGFsaWFzZXMgKGVuZHBvaW50cykgYW5kIHBvcnRzIGZvciBjbGllbnQgYXBwbGljYXRpb25zIHRvIHJlZmVyIHRvIHRoaXMgc2VydmljZS5cbiAqL1xuU2VydmljZXM/OiBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VbXVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB1c2UgU2VydmljZSBDb25uZWN0IHdpdGggdGhpcyBzZXJ2aWNlLlxuICovXG5FbmFibGVkOiBib29sZWFuXG5Mb2dDb25maWd1cmF0aW9uPzogTG9nQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZXNwYWNlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQ01BUGxvbmcgbmFtZXNwYWNlIGZvciB1c2Ugd2l0aCBTZXJ2aWNlIENvbm5lY3QuIFRoZSBuYW1lc3BhY2UgbXVzdCBiZSBpbiB0aGUgc2FtZSBBV1MgUmVnaW9uIGFzIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UgYW5kIGNsdXN0ZXIuIFRoZSB0eXBlIG9mIG5hbWVzcGFjZSBkb2Vzbid0IGFmZmVjdCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENNQVBsb25nLCBzZWUgW1dvcmtpbmcgd2l0aCBTZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvZGcvd29ya2luZy13aXRoLXNlcnZpY2VzLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTmFtZXNwYWNlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3QgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0U2VydmljZSB7XG5UaW1lb3V0PzogVGltZW91dENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5IHRvIGxpc3RlbiBvbi5cbiAqICBVc2UgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgdG8gYnlwYXNzIHRoZSBwcm94eSBmb3IgdHJhZmZpYyBvbiB0aGUgcG9ydCBudW1iZXIgc3BlY2lmaWVkIGluIHRoZSBuYW1lZCBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIGFwcGxpY2F0aW9uLCBhbmQgdGhlbiB1c2UgaXQgaW4geW91ciBWUEMgc2VjdXJpdHkgZ3JvdXBzIHRvIGFsbG93IHRyYWZmaWMgaW50byB0aGUgcHJveHkgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICogIEluIGBgYXdzdnBjYGAgbW9kZSBhbmQgRmFyZ2F0ZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGNvbnRhaW5lciBwb3J0IG51bWJlci4gVGhlIGNvbnRhaW5lciBwb3J0IG51bWJlciBpcyBpbiB0aGUgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIEluIGJyaWRnZSBtb2RlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZXBoZW1lcmFsIHBvcnQgb2YgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS5cbiAqL1xuSW5ncmVzc1BvcnRPdmVycmlkZT86IG51bWJlclxuLyoqXG4gKiBUaGUgbGlzdCBvZiBjbGllbnQgYWxpYXNlcyBmb3IgdGhpcyBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZS4gWW91IHVzZSB0aGVzZSB0byBhc3NpZ24gbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnQgYXBwbGljYXRpb25zLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2xpZW50IGFsaWFzZXMgdGhhdCB5b3UgY2FuIGhhdmUgaW4gdGhpcyBsaXN0IGlzIDEuXG4gKiAgRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIEFtYXpvbiBFQ1MgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIEZvciBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAsIHlvdSBtdXN0IHByb3ZpZGUgYXQgbGVhc3Qgb25lIGBgY2xpZW50QWxpYXNgYCB3aXRoIG9uZSBgYHBvcnRgYC5cbiAqL1xuQ2xpZW50QWxpYXNlcz86IFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXNbXVxuVGxzPzogU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpcyB0aGUgbmFtZSBvZiB0aGUgbmV3IENNQVAgc2VydmljZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuIFRoaXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBDTUFQIG5hbWVzcGFjZS4gVGhlIG5hbWUgY2FuIGNvbnRhaW4gdXAgdG8gNjQgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgYW5kIGh5cGhlbnMgKC0pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICovXG5EaXNjb3ZlcnlOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBgYHBvcnROYW1lYGAgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGBgcG9ydE1hcHBpbmdzYGAgZnJvbSBhbGwgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBjb25maWd1cmVkIHRpbWVvdXRzIGZvciBTZXJ2aWNlIENvbm5lY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZW91dENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgd2FpdGluZyBmb3IgdGhlIHVwc3RyZWFtIHRvIHJlc3BvbmQgd2l0aCBhIGNvbXBsZXRlIHJlc3BvbnNlIHBlciByZXF1ZXN0LiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYHBlclJlcXVlc3RUaW1lb3V0YGAuIGBgcGVyUmVxdWVzdFRpbWVvdXRgYCBjYW4gb25seSBiZSBzZXQgaWYgU2VydmljZSBDb25uZWN0IGBgYXBwUHJvdG9jb2xgYCBpc24ndCBgYFRDUGBgLiBPbmx5IGBgaWRsZVRpbWVvdXRgYCBpcyBhbGxvd2VkIGZvciBgYFRDUGBgYGBhcHBQcm90b2NvbGBgLlxuICovXG5QZXJSZXF1ZXN0VGltZW91dFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgYSBjb25uZWN0aW9uIHdpbGwgc3RheSBhY3RpdmUgd2hpbGUgaWRsZS4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBpZGxlVGltZW91dGBgLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBIVFRQYGAvYGBIVFRQMmBgL2BgR1JQQ2BgIGlzIDUgbWludXRlcy5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgVENQYGAgaXMgMSBob3VyLlxuICovXG5JZGxlVGltZW91dFNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDbGllbnRBbGlhcyB7XG4vKipcbiAqIFRoZSBgYGRuc05hbWVgYCBpcyB0aGUgbmFtZSB0aGF0IHlvdSB1c2UgaW4gdGhlIGFwcGxpY2F0aW9ucyBvZiBjbGllbnQgdGFza3MgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFRoZSBuYW1lIG11c3QgYmUgYSB2YWxpZCBETlMgbmFtZSBidXQgZG9lc24ndCBuZWVkIHRvIGJlIGZ1bGx5LXF1YWxpZmllZC4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgdXAgdG8gMTI3IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGh5cGhlbnMgKC0pLCBhbmQgcGVyaW9kcyAoLikuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYGRpc2NvdmVyeU5hbWUubmFtZXNwYWNlYGAgaXMgdXNlZC4gSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIG5hbWUgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGEgZmV3IGNvbW1vbiBuYW1lcyBhcmUgYGBkYXRhYmFzZWBgLCBgYGRiYGAsIG9yIHRoZSBsb3dlcmNhc2UgbmFtZSBvZiBhIGRhdGFiYXNlLCBzdWNoIGFzIGBgbXlzcWxgYCBvciBgYHJlZGlzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRG5zTmFtZT86IHN0cmluZ1xuVGVzdFRyYWZmaWNSdWxlcz86IFNlcnZpY2VDb25uZWN0VGVzdFRyYWZmaWNSdWxlc1xuLyoqXG4gKiBUaGUgbGlzdGVuaW5nIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LiBUaGlzIHBvcnQgaXMgYXZhaWxhYmxlIGluc2lkZSBvZiBhbGwgb2YgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2UuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIHBvcnQgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Qb3J0OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3QgdHJhZmZpYyByb3V0aW5nIHJ1bGVzIHVzZWQgZHVyaW5nIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMgd2l0aCBBbWF6b24gRUNTIFNlcnZpY2UgQ29ubmVjdC4gVGhpcyBhbGxvd3MgeW91IHRvIHJvdXRlIGEgcG9ydGlvbiBvZiB0cmFmZmljIHRvIHRoZSBuZXcgc2VydmljZSByZXZpc2lvbiBvZiB5b3VyIHNlcnZpY2UgZm9yIHRlc3RpbmcgYmVmb3JlIHNoaWZ0aW5nIGFsbCBwcm9kdWN0aW9uIHRyYWZmaWMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzIHtcbkhlYWRlcjogU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzSGVhZGVyXG59XG4vKipcbiAqIFRoZSBIVFRQIGhlYWRlci1iYXNlZCByb3V0aW5nIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lIHdoaWNoIHJlcXVlc3RzIHNob3VsZCBiZSByb3V0ZWQgdG8gdGhlIG5ldyBzZXJ2aWNlIHZlcnNpb24gZHVyaW5nIGJsdWUvZ3JlZW4gZGVwbG95bWVudCB0ZXN0aW5nLiBUaGVzZSBydWxlcyBwcm92aWRlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdGVzdCB0cmFmZmljIHJvdXRpbmcgYmFzZWQgb24gcmVxdWVzdCBoZWFkZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGVzdFRyYWZmaWNSdWxlc0hlYWRlciB7XG5WYWx1ZT86IFNlcnZpY2VDb25uZWN0VGVzdFRyYWZmaWNSdWxlc0hlYWRlclZhbHVlXG5OYW1lOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzSGVhZGVyVmFsdWUge1xuRXhhY3Q6IHN0cmluZ1xufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uIHtcbklzc3VlckNlcnRpZmljYXRlQXV0aG9yaXR5OiBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5XG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkuXG4gKi9cbkttc0tleT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIFNlcnZpY2UgQ29ubmVjdCBUTFMuXG4gKi9cblJvbGVBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHNpZ25lciBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eSB7XG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSBjZXJ0aWZpY2F0ZS5cbiAqL1xuQXdzUGNhQXV0aG9yaXR5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExvZ0NvbmZpZ2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWxvZy1kcml2ZXJgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBCeSBkZWZhdWx0LCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBsb2dnaW5nIGRyaXZlciB0aGF0IHRoZSBEb2NrZXIgZGFlbW9uIHVzZXMuIEhvd2V2ZXIsIHRoZSBjb250YWluZXIgbWlnaHQgdXNlIGEgZGlmZmVyZW50IGxvZ2dpbmcgZHJpdmVyIHRoYW4gdGhlIERvY2tlciBkYWVtb24gYnkgc3BlY2lmeWluZyBhIGxvZyBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gKiAgVW5kZXJzdGFuZCB0aGUgZm9sbG93aW5nIHdoZW4gc3BlY2lmeWluZyBhIGxvZyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNvbnRhaW5lcnMuXG4gKiAgICsgIEFtYXpvbiBFQ1MgY3VycmVudGx5IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHRoZSBsb2dnaW5nIGRyaXZlcnMgYXZhaWxhYmxlIHRvIHRoZSBEb2NrZXIgZGFlbW9uLiBBZGRpdGlvbmFsIGxvZyBkcml2ZXJzIG1heSBiZSBhdmFpbGFibGUgaW4gZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudC5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCxgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogICArICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTggb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBtdXN0IHJlZ2lzdGVyIHRoZSBhdmFpbGFibGUgbG9nZ2luZyBkcml2ZXJzIHdpdGggdGhlIGBgRUNTX0FWQUlMQUJMRV9MT0dHSU5HX0RSSVZFUlNgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgY29udGFpbmVycyBwbGFjZWQgb24gdGhhdCBpbnN0YW5jZSBjYW4gdXNlIHRoZXNlIGxvZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC1jb25maWcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgb24gRkFSR0FURWxvbmcsIGJlY2F1c2UgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIHlvdXIgdGFza3MgYXJlIGhvc3RlZCBvbiwgYW55IGFkZGl0aW9uYWwgc29mdHdhcmUgbmVlZGVkIG11c3QgYmUgaW5zdGFsbGVkIG91dHNpZGUgb2YgdGhlIHRhc2suIEZvciBleGFtcGxlLCB0aGUgRmx1ZW50ZCBvdXRwdXQgYWdncmVnYXRvcnMgb3IgYSByZW1vdGUgaG9zdCBydW5uaW5nIExvZ3N0YXNoIHRvIHNlbmQgR2VsZiBsb2dzIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBsb2cgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlY3JldE9wdGlvbnM/OiBTZWNyZXRbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIGxvZyBkcml2ZXIuXG4gKiAgVGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IGRlcGVuZCBvbiB0aGUgbG9nIGRyaXZlci4gU29tZSBvZiB0aGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB5b3UgdXNlIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyIHRvIHJvdXRlIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggaW5jbHVkZSB0aGUgZm9sbG93aW5nOlxuICogICArIGF3c2xvZ3MtY3JlYXRlLWdyb3VwIFJlcXVpcmVkOiBObyBTcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlIGxvZyBncm91cCB0byBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gZmFsc2UuIFlvdXIgSUFNIHBvbGljeSBtdXN0IGluY2x1ZGUgdGhlIGxvZ3M6Q3JlYXRlTG9nR3JvdXAgcGVybWlzc2lvbiBiZWZvcmUgeW91IGF0dGVtcHQgdG8gdXNlIGF3c2xvZ3MtY3JlYXRlLWdyb3VwLiArIGF3c2xvZ3MtcmVnaW9uIFJlcXVpcmVkOiBZZXMgU3BlY2lmeSB0aGUgUmVnaW9uIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBpcyB0byBzZW5kIHlvdXIgRG9ja2VyIGxvZ3MgdG8uIFlvdSBjYW4gY2hvb3NlIHRvIHNlbmQgYWxsIG9mIHlvdXIgbG9ncyBmcm9tIGNsdXN0ZXJzIGluIGRpZmZlcmVudCBSZWdpb25zIHRvIGEgc2luZ2xlIHJlZ2lvbiBpbiBDbG91ZFdhdGNoIExvZ3MuIFRoaXMgaXMgc28gdGhhdCB0aGV5J3JlIGFsbCB2aXNpYmxlIGluIG9uZSBsb2NhdGlvbi4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNlcGFyYXRlIHRoZW0gYnkgUmVnaW9uIGZvciBtb3JlIGdyYW51bGFyaXR5LiBNYWtlIHN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGxvZyBncm91cCBleGlzdHMgaW4gdGhlIFJlZ2lvbiB0aGF0IHlvdSBzcGVjaWZ5IHdpdGggdGhpcyBvcHRpb24uICsgYXdzbG9ncy1ncm91cCBSZXF1aXJlZDogWWVzIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGEgbG9nIGdyb3VwIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBzZW5kcyBpdHMgbG9nIHN0cmVhbXMgdG8uICsgYXdzbG9ncy1zdHJlYW0tcHJlZml4IFJlcXVpcmVkOiBZZXMsIHdoZW4gdXNpbmcgRmFyZ2F0ZS5PcHRpb25hbCB3aGVuIHVzaW5nIEVDMi4gVXNlIHRoZSBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggb3B0aW9uIHRvIGFzc29jaWF0ZSBhIGxvZyBzdHJlYW0gd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCwgdGhlIGNvbnRhaW5lciBuYW1lLCBhbmQgdGhlIElEIG9mIHRoZSBBbWF6b24gRUNTIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIElmIHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gdGFrZXMgdGhlIGZvcm1hdCBwcmVmaXgtbmFtZS9jb250YWluZXItbmFtZS9lY3MtdGFzay1pZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSBpcyBuYW1lZCBhZnRlciB0aGUgY29udGFpbmVyIElEIHRoYXQncyBhc3NpZ25lZCBieSB0aGUgRG9ja2VyIGRhZW1vbiBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLiBCZWNhdXNlIGl0J3MgZGlmZmljdWx0IHRvIHRyYWNlIGxvZ3MgYmFjayB0byB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtIHdpdGgganVzdCB0aGUgRG9ja2VyIGNvbnRhaW5lciBJRCAod2hpY2ggaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSksIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24uIEZvciBBbWF6b24gRUNTIHNlcnZpY2VzLCB5b3UgY2FuIHVzZSB0aGUgc2VydmljZSBuYW1lIGFzIHRoZSBwcmVmaXguIERvaW5nIHNvLCB5b3UgY2FuIHRyYWNlIGxvZyBzdHJlYW1zIHRvIHRoZSBzZXJ2aWNlIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLCB0aGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtLCBhbmQgdGhlIElEIG9mIHRoZSB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBZb3UgbXVzdCBzcGVjaWZ5IGEgc3RyZWFtLXByZWZpeCBmb3IgeW91ciBsb2dzIHRvIGhhdmUgeW91ciBsb2dzIGFwcGVhciBpbiB0aGUgTG9nIHBhbmUgd2hlbiB1c2luZyB0aGUgQW1hem9uIEVDUyBjb25zb2xlLiArIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gaW4gUHl0aG9uIHN0cmZ0aW1lIGZvcm1hdC4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBPbmUgZXhhbXBsZSBvZiBhIHVzZSBjYXNlIGZvciB1c2luZyB0aGlzIGZvcm1hdCBpcyBmb3IgcGFyc2luZyBvdXRwdXQgc3VjaCBhcyBhIHN0YWNrIGR1bXAsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBiZSBsb2dnZWQgaW4gbXVsdGlwbGUgZW50cmllcy4gVGhlIGNvcnJlY3QgcGF0dGVybiBhbGxvd3MgaXQgdG8gYmUgY2FwdHVyZWQgaW4gYSBzaW5nbGUgZW50cnkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gKyBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gdGhhdCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uLiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybi4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBpcyBhbHNvIGNvbmZpZ3VyZWQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gXG4gKiAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFwcGx5IHRvIGFsbCBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMuXG4gKiAgICsgbW9kZSBSZXF1aXJlZDogTm8gVmFsaWQgdmFsdWVzOiBub24tYmxvY2tpbmcgfCBibG9ja2luZyBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBkZWxpdmVyeSBtb2RlIG9mIGxvZyBtZXNzYWdlcyBmcm9tIHRoZSBjb250YWluZXIgdG8gdGhlIGxvZyBkcml2ZXIgc3BlY2lmaWVkIHVzaW5nIGxvZ0RyaXZlci4gVGhlIGRlbGl2ZXJ5IG1vZGUgeW91IGNob29zZSBhZmZlY3RzIGFwcGxpY2F0aW9uIGF2YWlsYWJpbGl0eSB3aGVuIHRoZSBmbG93IG9mIGxvZ3MgZnJvbSBjb250YWluZXIgaXMgaW50ZXJydXB0ZWQuIElmIHlvdSB1c2UgdGhlIGJsb2NraW5nIG1vZGUgYW5kIHRoZSBmbG93IG9mIGxvZ3MgaXMgaW50ZXJydXB0ZWQsIGNhbGxzIGZyb20gY29udGFpbmVyIGNvZGUgdG8gd3JpdGUgdG8gdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgd2lsbCBibG9jay4gVGhlIGxvZ2dpbmcgdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJsb2NrIGFzIGEgcmVzdWx0LiBUaGlzIG1heSBjYXVzZSB0aGUgYXBwbGljYXRpb24gdG8gYmVjb21lIHVucmVzcG9uc2l2ZSBhbmQgbGVhZCB0byBjb250YWluZXIgaGVhbHRoY2hlY2sgZmFpbHVyZS4gSWYgeW91IHVzZSB0aGUgbm9uLWJsb2NraW5nIG1vZGUsIHRoZSBjb250YWluZXIncyBsb2dzIGFyZSBpbnN0ZWFkIHN0b3JlZCBpbiBhbiBpbi1tZW1vcnkgaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb25maWd1cmVkIHdpdGggdGhlIG1heC1idWZmZXItc2l6ZSBvcHRpb24uIFRoaXMgcHJldmVudHMgdGhlIGFwcGxpY2F0aW9uIGZyb20gYmVjb21pbmcgdW5yZXNwb25zaXZlIHdoZW4gbG9ncyBjYW5ub3QgYmUgc2VudC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoaXMgbW9kZSBpZiB5b3Ugd2FudCB0byBlbnN1cmUgc2VydmljZSBhdmFpbGFiaWxpdHkgYW5kIGFyZSBva2F5IHdpdGggc29tZSBsb2cgbG9zcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQcmV2ZW50aW5nIGxvZyBsb3NzIHdpdGggbm9uLWJsb2NraW5nIG1vZGUgaW4gdGhlIGF3c2xvZ3MgY29udGFpbmVyIGxvZyBkcml2ZXIuIFlvdSBjYW4gc2V0IGEgZGVmYXVsdCBtb2RlIGZvciBhbGwgY29udGFpbmVycyBpbiBhIHNwZWNpZmljIFJlZ2lvbiBieSB1c2luZyB0aGUgZGVmYXVsdExvZ0RyaXZlck1vZGUgYWNjb3VudCBzZXR0aW5nLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgbW9kZSBvcHRpb24gb3IgY29uZmlndXJlIHRoZSBhY2NvdW50IHNldHRpbmcsIEFtYXpvbiBFQ1Mgd2lsbCBkZWZhdWx0IHRvIHRoZSBub24tYmxvY2tpbmcgbW9kZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjY291bnQgc2V0dGluZywgc2VlIERlZmF1bHQgbG9nIGRyaXZlciBtb2RlIGluIHRoZSBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUuIE9uIEp1bmUgMjUsIDIwMjUsIEFtYXpvbiBFQ1MgY2hhbmdlZCB0aGUgZGVmYXVsdCBsb2cgZHJpdmVyIG1vZGUgZnJvbSBibG9ja2luZyB0byBub24tYmxvY2tpbmcgdG8gcHJpb3JpdGl6ZSB0YXNrIGF2YWlsYWJpbGl0eSBvdmVyIGxvZ2dpbmcuIFRvIGNvbnRpbnVlIHVzaW5nIHRoZSBibG9ja2luZyBtb2RlIGFmdGVyIHRoaXMgY2hhbmdlLCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzogU2V0IHRoZSBtb2RlIG9wdGlvbiBpbiB5b3VyIGNvbnRhaW5lciBkZWZpbml0aW9uJ3MgbG9nQ29uZmlndXJhdGlvbiBhcyBibG9ja2luZy4gU2V0IHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcgdG8gYmxvY2tpbmcuICsgbWF4LWJ1ZmZlci1zaXplIFJlcXVpcmVkOiBObyBEZWZhdWx0IHZhbHVlOiAxMG0gV2hlbiBub24tYmxvY2tpbmcgbW9kZSBpcyB1c2VkLCB0aGUgbWF4LWJ1ZmZlci1zaXplIGxvZyBvcHRpb24gY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0J3MgdXNlZCBmb3IgaW50ZXJtZWRpYXRlIG1lc3NhZ2Ugc3RvcmFnZS4gTWFrZSBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgYnVmZmVyIHNpemUgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwLCBmdXJ0aGVyIGxvZ3MgY2Fubm90IGJlIHN0b3JlZC4gTG9ncyB0aGF0IGNhbm5vdCBiZSBzdG9yZWQgYXJlIGxvc3QuIFxuICogIFRvIHJvdXRlIGxvZ3MgdXNpbmcgdGhlIGBgc3BsdW5rYGAgbG9nIHJvdXRlciwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGBgc3BsdW5rLXRva2VuYGAgYW5kIGEgYGBzcGx1bmstdXJsYGAuXG4gKiAgV2hlbiB5b3UgdXNlIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIHJvdXRlciB0byByb3V0ZSBsb2dzIHRvIGFuIEFXUyBTZXJ2aWNlIG9yIEFXUyBQYXJ0bmVyIE5ldHdvcmsgZGVzdGluYXRpb24gZm9yIGxvZyBzdG9yYWdlIGFuZCBhbmFseXRpY3MsIHlvdSBjYW4gc2V0IHRoZSBgYGxvZy1kcml2ZXItYnVmZmVyLWxpbWl0YGAgb3B0aW9uIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgYXJlIGJ1ZmZlcmVkIGluIG1lbW9yeSwgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIGxvZyByb3V0ZXIgY29udGFpbmVyLiBJdCBjYW4gaGVscCB0byByZXNvbHZlIHBvdGVudGlhbCBsb2cgbG9zcyBpc3N1ZSBiZWNhdXNlIGhpZ2ggdGhyb3VnaHB1dCBtaWdodCByZXN1bHQgaW4gbWVtb3J5IHJ1bm5pbmcgb3V0IGZvciB0aGUgYnVmZmVyIGluc2lkZSBvZiBEb2NrZXIuXG4gKiAgT3RoZXIgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB1c2luZyBgYGF3c2ZpcmVsZW5zYGAgdG8gcm91dGUgbG9ncyBkZXBlbmQgb24gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gRGF0YSBGaXJlaG9zZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBuYW1lIGZvciB0aGUgbG9nIHN0cmVhbSB3aXRoIGBgZGVsaXZlcnlfc3RyZWFtYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBTdHJlYW1zLCB5b3UgY2FuIHNwZWNpZnkgYW4gQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgZGF0YSBzdHJlYW0gbmFtZSB3aXRoIGBgc3RyZWFtYGAuXG4gKiAgIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UsIHlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGxpa2UgYGBOYW1lYGAsIGBgSG9zdGBgIChPcGVuU2VhcmNoIFNlcnZpY2UgZW5kcG9pbnQgd2l0aG91dCBwcm90b2NvbCksIGBgUG9ydGBgLCBgYEluZGV4YGAsIGBgVHlwZWBgLCBgYEF3c19hdXRoYGAsIGBgQXdzX3JlZ2lvbmBgLCBgYFN1cHByZXNzX1R5cGVfTmFtZWBgLCBhbmQgYGB0bHNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5kZXIgdGhlIGhvb2Q6IEZpcmVMZW5zIGZvciBBbWF6b24gRUNTIFRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29udGFpbmVycy91bmRlci10aGUtaG9vZC1maXJlbGVucy1mb3ItYW1hem9uLWVjcy10YXNrcy8pLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBTMywgeW91IGNhbiBzcGVjaWZ5IHRoZSBidWNrZXQgdXNpbmcgdGhlIGBgYnVja2V0YGAgb3B0aW9uLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBgYHJlZ2lvbmBgLCBgYHRvdGFsX2ZpbGVfc2l6ZWBgLCBgYHVwbG9hZF90aW1lb3V0YGAsIGFuZCBgYHVzZV9wdXRfb2JqZWN0YGAgYXMgb3B0aW9ucy5cbiAqICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTkgb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICovXG5PcHRpb25zPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgZHJpdmVyIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCwgYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBDbG91ZFdhdGNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19hd3Nsb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gYW4gc2VydmljZSBvciBQYXJ0bmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19maXJlbGVucy5odG1sKS5cbiAqICAgSWYgeW91IGhhdmUgYSBjdXN0b20gZHJpdmVyIHRoYXQgaXNuJ3QgbGlzdGVkLCB5b3UgY2FuIGZvcmsgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHByb2plY3QgdGhhdCdzIFthdmFpbGFibGUgb24gR2l0SHViXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tZWNzLWFnZW50KSBhbmQgY3VzdG9taXplIGl0IHRvIHdvcmsgd2l0aCB0aGF0IGRyaXZlci4gV2UgZW5jb3VyYWdlIHlvdSB0byBzdWJtaXQgcHVsbCByZXF1ZXN0cyBmb3IgY2hhbmdlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgaW5jbHVkZWQuIEhvd2V2ZXIsIHdlIGRvbid0IGN1cnJlbnRseSBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgbW9kaWZpZWQgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuXG4gKi9cbkxvZ0RyaXZlcj86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHlvdXIgY29udGFpbmVyLiBTZWNyZXRzIGNhbiBiZSBleHBvc2VkIHRvIGEgY29udGFpbmVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqICAgKyAgVG8gaW5qZWN0IHNlbnNpdGl2ZSBkYXRhIGludG8geW91ciBjb250YWluZXJzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNlIHRoZSBgYHNlY3JldHNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgICsgIFRvIHJlZmVyZW5jZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGxvZyBjb25maWd1cmF0aW9uIG9mIGEgY29udGFpbmVyLCB1c2UgdGhlIGBgc2VjcmV0T3B0aW9uc2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0IHtcbi8qKlxuICogVGhlIHNlY3JldCB0byBleHBvc2UgdG8gdGhlIGNvbnRhaW5lci4gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGVpdGhlciB0aGUgZnVsbCBBUk4gb2YgdGhlIEFTTWxvbmcgc2VjcmV0IG9yIHRoZSBmdWxsIEFSTiBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWlyZSBJQU1sb25nIHBlcm1pc3Npb25zLCBzZWUgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXNlY3JldHMuaHRtbCNzZWNyZXRzLWlhbSkgKGZvciBTZWNyZXRzIE1hbmFnZXIpIG9yIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1wYXJhbWV0ZXJzLmh0bWwpIChmb3IgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBzdG9yZSkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIgZXhpc3RzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgdGFzayB5b3UncmUgbGF1bmNoaW5nLCB0aGVuIHlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZnVsbCBBUk4gb3IgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGV4aXN0cyBpbiBhIGRpZmZlcmVudCBSZWdpb24sIHRoZW4gdGhlIGZ1bGwgQVJOIG11c3QgYmUgc3BlY2lmaWVkLlxuICovXG5WYWx1ZUZyb206IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0LlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgc2VydmljZSB0aGF0IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhcmdldCBncm91cChzKSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuVGFyZ2V0R3JvdXBBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcG9ydCBtYXBwaW5nIHRvIHJlZ2lzdGVyIGluIHRoZSBWUEMgTGF0dGljZSB0YXJnZXQgZ3JvdXAuIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGBgcG9ydE1hcHBpbmdgYCB5b3UgZGVmaW5lZCBpbiB5b3VyIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1PigKggaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIFZQQyBMYXR0aWNlIGluZnJhc3RydWN0dXJlLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb250cm9sbGVyIHtcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlIHRvIHVzZS5cbiAqICBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHRoZSBtZWNoYW5pc20gdGhhdCBkZXRlcm1pbmVzIGhvdyB0YXNrcyBhcmUgZGVwbG95ZWQgZm9yIHlvdXIgc2VydmljZS4gVGhlIHZhbGlkIG9wdGlvbnMgYXJlOlxuICogICArICBFQ1NcbiAqICBXaGVuIHlvdSBjcmVhdGUgYSBzZXJ2aWNlIHdoaWNoIHVzZXMgdGhlIGBgRUNTYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIGNob29zZSBiZXR3ZWVuIHRoZSBmb2xsb3dpbmcgZGVwbG95bWVudCBzdHJhdGVnaWVzOlxuICogICArICBgYFJPTExJTkdgYDogV2hlbiB5b3UgY3JlYXRlIGEgc2VydmljZSB3aGljaCB1c2VzIHRoZSAqcm9sbGluZyB1cGRhdGUqIChgYFJPTExJTkdgYCkgZGVwbG95bWVudCBzdHJhdGVneSwgdGhlIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciByZXBsYWNlcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFza3Mgd2l0aCBuZXcgdGFza3MuIFRoZSBudW1iZXIgb2YgdGFza3MgdGhhdCBFQ1MgYWRkcyBvciByZW1vdmVzIGZyb20gdGhlIHNlcnZpY2UgZHVyaW5nIGEgcm9sbGluZyB1cGRhdGUgaXMgY29udHJvbGxlZCBieSB0aGUgc2VydmljZSBkZXBsb3ltZW50IGNvbmZpZ3VyYXRpb24uIFxuICogIFJvbGxpbmcgdXBkYXRlIGRlcGxveW1lbnRzIGFyZSBiZXN0IHN1aXRlZCBmb3IgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4gKiAgICsgIEdyYWR1YWwgc2VydmljZSB1cGRhdGVzOiBZb3UgbmVlZCB0byB1cGRhdGUgeW91ciBzZXJ2aWNlIGluY3JlbWVudGFsbHkgd2l0aG91dCB0YWtpbmcgdGhlIGVudGlyZSBzZXJ2aWNlIG9mZmxpbmUgYXQgb25jZS5cbiAqICAgKyAgTGltaXRlZCByZXNvdXJjZSByZXF1aXJlbWVudHM6IFlvdSB3YW50IHRvIGF2b2lkIHRoZSBhZGRpdGlvbmFsIHJlc291cmNlIGNvc3RzIG9mIHJ1bm5pbmcgdHdvIGNvbXBsZXRlIGVudmlyb25tZW50cyBzaW11bHRhbmVvdXNseSAoYXMgcmVxdWlyZWQgYnkgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cykuXG4gKiAgICsgIEFjY2VwdGFibGUgZGVwbG95bWVudCB0aW1lOiBZb3VyIGFwcGxpY2F0aW9uIGNhbiB0b2xlcmF0ZSBhIGxvbmdlciBkZXBsb3ltZW50IHByb2Nlc3MsIGFzIHJvbGxpbmcgdXBkYXRlcyByZXBsYWNlIHRhc2tzIG9uZSBieSBvbmUuXG4gKiAgICsgIE5vIG5lZWQgZm9yIGluc3RhbnQgcm9sbCBiYWNrOiBZb3VyIHNlcnZpY2UgY2FuIHRvbGVyYXRlIGEgcm9sbGJhY2sgcHJvY2VzcyB0aGF0IHRha2VzIG1pbnV0ZXMgcmF0aGVyIHRoYW4gc2Vjb25kcy5cbiAqICAgKyAgU2ltcGxlIGRlcGxveW1lbnQgcHJvY2VzczogWW91IHByZWZlciBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXBsb3ltZW50IGFwcHJvYWNoIHdpdGhvdXQgdGhlIGNvbXBsZXhpdHkgb2YgbWFuYWdpbmcgbXVsdGlwbGUgZW52aXJvbm1lbnRzLCB0YXJnZXQgZ3JvdXBzLCBhbmQgbGlzdGVuZXJzLlxuICogICArICBObyBsb2FkIGJhbGFuY2VyIHJlcXVpcmVtZW50OiBZb3VyIHNlcnZpY2UgZG9lc24ndCB1c2Ugb3IgcmVxdWlyZSBhIGxvYWQgYmFsYW5jZXIsIEFMQiwgTkxCLCBvciBTZXJ2aWNlIENvbm5lY3QgKHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cykuXG4gKiAgICsgIFN0YXRlZnVsIGFwcGxpY2F0aW9uczogWW91ciBhcHBsaWNhdGlvbiBtYWludGFpbnMgc3RhdGUgdGhhdCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gcnVuIHR3byBwYXJhbGxlbCBlbnZpcm9ubWVudHMuXG4gKiAgICsgIENvc3Qgc2Vuc2l0aXZpdHk6IFlvdSB3YW50IHRvIG1pbmltaXplIGRlcGxveW1lbnQgY29zdHMgYnkgbm90IHJ1bm5pbmcgZHVwbGljYXRlIGVudmlyb25tZW50cyBkdXJpbmcgZGVwbG95bWVudC5cbiAqICAgXG4gKiAgUm9sbGluZyB1cGRhdGVzIGFyZSB0aGUgZGVmYXVsdCBkZXBsb3ltZW50IHN0cmF0ZWd5IGZvciBzZXJ2aWNlcyBhbmQgcHJvdmlkZSBhIGJhbGFuY2UgYmV0d2VlbiBkZXBsb3ltZW50IHNhZmV0eSBhbmQgcmVzb3VyY2UgZWZmaWNpZW5jeSBmb3IgbWFueSBjb21tb24gYXBwbGljYXRpb24gc2NlbmFyaW9zLlxuICogICArICBgYEJMVUVfR1JFRU5gYDogQSAqYmx1ZS9ncmVlbiogZGVwbG95bWVudCBzdHJhdGVneSAoYGBCTFVFX0dSRUVOYGApIGlzIGEgcmVsZWFzZSBtZXRob2RvbG9neSB0aGF0IHJlZHVjZXMgZG93bnRpbWUgYW5kIHJpc2sgYnkgcnVubmluZyB0d28gaWRlbnRpY2FsIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIGNhbGxlZCBibHVlIGFuZCBncmVlbi4gV2l0aCBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cywgeW91IGNhbiB2YWxpZGF0ZSBuZXcgc2VydmljZSByZXZpc2lvbnMgYmVmb3JlIGRpcmVjdGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gdGhlbS4gVGhpcyBhcHByb2FjaCBwcm92aWRlcyBhIHNhZmVyIHdheSB0byBkZXBsb3kgY2hhbmdlcyB3aXRoIHRoZSBhYmlsaXR5IHRvIHF1aWNrbHkgcm9sbCBiYWNrIGlmIG5lZWRlZC5cbiAqICBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cyBhcmUgYmVzdCBzdWl0ZWQgZm9yIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuICogICArICBTZXJ2aWNlIHZhbGlkYXRpb246IFdoZW4geW91IG5lZWQgdG8gdmFsaWRhdGUgbmV3IHNlcnZpY2UgcmV2aXNpb25zIGJlZm9yZSBkaXJlY3RpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIHRoZW1cbiAqICAgKyAgWmVybyBkb3dudGltZTogV2hlbiB5b3VyIHNlcnZpY2UgcmVxdWlyZXMgemVyby1kb3dudGltZSBkZXBsb3ltZW50c1xuICogICArICBJbnN0YW50IHJvbGwgYmFjazogV2hlbiB5b3UgbmVlZCB0aGUgYWJpbGl0eSB0byBxdWlja2x5IHJvbGwgYmFjayBpZiBpc3N1ZXMgYXJlIGRldGVjdGVkXG4gKiAgICsgIExvYWQgYmFsYW5jZXIgcmVxdWlyZW1lbnQ6IFdoZW4geW91ciBzZXJ2aWNlIHVzZXMgQUxCLCBOTEIsIG9yIFNlcnZpY2UgQ29ubmVjdFxuICogICBcbiAqICAgXG4gKiAgICsgIEV4dGVybmFsXG4gKiAgVXNlIGEgdGhpcmQtcGFydHkgZGVwbG95bWVudCBjb250cm9sbGVyLlxuICogICArICBCbHVlL2dyZWVuIGRlcGxveW1lbnQgKHBvd2VyZWQgYnkgQUNEKVxuICogIEFDRCBpbnN0YWxscyBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIGFwcGxpY2F0aW9uIGFzIGEgbmV3IHJlcGxhY2VtZW50IHRhc2sgc2V0IGFuZCByZXJvdXRlcyBwcm9kdWN0aW9uIHRyYWZmaWMgZnJvbSB0aGUgb3JpZ2luYWwgYXBwbGljYXRpb24gdGFzayBzZXQgdG8gdGhlIHJlcGxhY2VtZW50IHRhc2sgc2V0LiBUaGUgb3JpZ2luYWwgdGFzayBzZXQgaXMgdGVybWluYXRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgZGVwbG95bWVudC4gVXNlIHRoaXMgZGVwbG95bWVudCBjb250cm9sbGVyIHRvIHZlcmlmeSBhIG5ldyBkZXBsb3ltZW50IG9mIGEgc2VydmljZSBiZWZvcmUgc2VuZGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuXG4gKiAgIFxuICogIFdoZW4gdXBkYXRpbmcgdGhlIGRlcGxveW1lbnQgY29udHJvbGxlciBmb3IgYSBzZXJ2aWNlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBtaWdyYXRpb24geW91J3JlIHBlcmZvcm1pbmcuXG4gKiAgICsgIElmIHlvdSBoYXZlIGEgdGVtcGxhdGUgdGhhdCBjb250YWlucyB0aGUgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciBpbmZvcm1hdGlvbiBhcyB3ZWxsIGFzIGBgVGFza1NldGBgIGFuZCBgYFByaW1hcnlUYXNrU2V0YGAgcmVzb3VyY2VzLCBhbmQgeW91IHJlbW92ZSB0aGUgdGFzayBzZXQgcmVzb3VyY2VzIGZyb20gdGhlIHRlbXBsYXRlIHdoZW4gdXBkYXRpbmcgZnJvbSBgYEVYVEVSTkFMYGAgdG8gYGBFQ1NgYCwgdGhlIGBgRGVzY3JpYmVUYXNrU2V0YGAgYW5kIGBgRGVsZXRlVGFza1NldGBgIEFQSSBjYWxscyB3aWxsIHJldHVybiBhIDQwMCBlcnJvciBhZnRlciB0aGUgZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHVwZGF0ZWQgdG8gYGBFQ1NgYC4gVGhpcyByZXN1bHRzIGluIGEgZGVsZXRlIGZhaWx1cmUgb24gdGhlIHRhc2sgc2V0IHJlc291cmNlcywgZXZlbiB0aG91Z2ggdGhlIHN0YWNrIHRyYW5zaXRpb25zIHRvIGBgVVBEQVRFX0NPTVBMRVRFYGAgc3RhdHVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNvdXJjZSByZW1vdmVkIGZyb20gc3RhY2sgYnV0IG5vdCBkZWxldGVkXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS90cm91Ymxlc2hvb3RpbmcuaHRtbCN0cm91Ymxlc2hvb3RpbmctZXJyb3JzLXJlc291cmNlLXJlbW92ZWQtbm90LWRlbGV0ZWQpIGluIHRoZSBDRk5sb25nIFVzZXIgR3VpZGUuIFRvIGZpeCB0aGlzIGlzc3VlLCBkZWxldGUgdGhlIHRhc2sgc2V0cyBkaXJlY3RseSB1c2luZyB0aGUgRUNTYGBEZWxldGVUYXNrU2V0YGAgQVBJLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gZGVsZXRlIGEgdGFzayBzZXQsIHNlZSBbRGVsZXRlVGFza1NldF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVUYXNrU2V0Lmh0bWwpIGluIHRoZSBFQ1Nsb25nIEFQSSBSZWZlcmVuY2UuXG4gKiAgICsgIElmIHlvdSdyZSBtaWdyYXRpbmcgZnJvbSBgYENPREVfREVQTE9ZYGAgdG8gYGBFQ1NgYCB3aXRoIGEgbmV3IHRhc2sgZGVmaW5pdGlvbiBhbmQgQ0ZOIHBlcmZvcm1zIGEgcm9sbGJhY2sgb3BlcmF0aW9uLCB0aGUgRUNTYGBVcGRhdGVTZXJ2aWNlYGAgcmVxdWVzdCBmYWlscyB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gKiAgUmVzb3VyY2UgaGFuZGxlciByZXR1cm5lZCBtZXNzYWdlOiBcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogVW5hYmxlIHRvIHVwZGF0ZSB0YXNrIGRlZmluaXRpb24gb24gc2VydmljZXMgd2l0aCBhIENPREVfREVQTE9ZIGRlcGxveW1lbnQgY29udHJvbGxlci4gXG4gKiAgICsgIEFmdGVyIGEgc3VjY2Vzc2Z1bCBtaWdyYXRpb24gZnJvbSBgYEVDU2BgIHRvIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBuZWVkIHRvIG1hbnVhbGx5IHJlbW92ZSB0aGUgYGBBQ1RJVkVgYCB0YXNrIHNldCwgYmVjYXVzZSBFQ1Mgbm8gbG9uZ2VyIG1hbmFnZXMgdGhlIGRlcGxveW1lbnQuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gZGVsZXRlIGEgdGFzayBzZXQsIHNlZSBbRGVsZXRlVGFza1NldF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVUYXNrU2V0Lmh0bWwpIGluIHRoZSBFQ1Nsb25nIEFQSSBSZWZlcmVuY2UuXG4gKi9cblR5cGU/OiAoXCJDT0RFX0RFUExPWVwiIHwgXCJFQ1NcIiB8IFwiRVhURVJOQUxcIilcbn1cbi8qKlxuICogT3B0aW9uYWwgZGVwbG95bWVudCBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCBob3cgbWFueSB0YXNrcyBydW4gZHVyaW5nIHRoZSBkZXBsb3ltZW50IGFuZCB0aGUgb3JkZXJpbmcgb2Ygc3RvcHBpbmcgYW5kIHN0YXJ0aW5nIHRhc2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb25maWd1cmF0aW9uIHtcbkNhbmFyeUNvbmZpZ3VyYXRpb24/OiB7XG5bazogc3RyaW5nXTogdW5rbm93blxufVxuLyoqXG4gKiBUaGUgZHVyYXRpb24gd2hlbiBib3RoIGJsdWUgYW5kIGdyZWVuIHNlcnZpY2UgcmV2aXNpb25zIGFyZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5IGFmdGVyIHRoZSBwcm9kdWN0aW9uIHRyYWZmaWMgaGFzIHNoaWZ0ZWQuXG4gKiAgVGhlIGZvbGxvd2luZyBydWxlcyBhcHBseSB3aGVuIHlvdSBkb24ndCBzcGVjaWZ5IGEgdmFsdWU6XG4gKiAgICsgIEZvciByb2xsaW5nIGRlcGxveW1lbnRzLCB0aGUgdmFsdWUgaXMgc2V0IHRvIDMgaG91cnMgKDE4MCBtaW51dGVzKS5cbiAqICAgKyAgV2hlbiB5b3UgdXNlIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciAoYGBFWFRFUk5BTGBgKSwgb3IgdGhlIEFDRCBibHVlL2dyZWVuIGRlcGxveW1lbnQgY29udHJvbGxlciAoYGBDT0RFX0RFUExPWWBgKSwgdGhlIHZhbHVlIGlzIHNldCB0byAzIGhvdXJzICgxODAgbWludXRlcykuXG4gKiAgICsgIEZvciBhbGwgb3RoZXIgY2FzZXMsIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMzYgaG91cnMgKDIxNjAgbWludXRlcykuXG4gKi9cbkJha2VUaW1lSW5NaW51dGVzPzogbnVtYmVyXG4vKipcbiAqIEFuIGFycmF5IG9mIGRlcGxveW1lbnQgbGlmZWN5Y2xlIGhvb2sgb2JqZWN0cyB0byBydW4gY3VzdG9tIGxvZ2ljIGF0IHNwZWNpZmljIHN0YWdlcyBvZiB0aGUgZGVwbG95bWVudCBsaWZlY3ljbGUuXG4gKi9cbkxpZmVjeWNsZUhvb2tzPzogRGVwbG95bWVudExpZmVjeWNsZUhvb2tbXVxuQWxhcm1zPzogRGVwbG95bWVudEFsYXJtc1xuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBzdHJhdGVneSBmb3IgdGhlIHNlcnZpY2UuIENob29zZSBmcm9tIHRoZXNlIHZhbGlkIHZhbHVlczpcbiAqICAgKyAgYGBST0xMSU5HYGAgLSBXaGVuIHlvdSBjcmVhdGUgYSBzZXJ2aWNlIHdoaWNoIHVzZXMgdGhlIHJvbGxpbmcgdXBkYXRlIChgYFJPTExJTkdgYCkgZGVwbG95bWVudCBzdHJhdGVneSwgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgcmVwbGFjZXMgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzIHdpdGggbmV3IHRhc2tzLiBUaGUgbnVtYmVyIG9mIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBhZGRzIG9yIHJlbW92ZXMgZnJvbSB0aGUgc2VydmljZSBkdXJpbmcgYSByb2xsaW5nIHVwZGF0ZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZXJ2aWNlIGRlcGxveW1lbnQgY29uZmlndXJhdGlvbi5cbiAqICAgKyAgYGBCTFVFX0dSRUVOYGAgLSBBIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBzdHJhdGVneSAoYGBCTFVFX0dSRUVOYGApIGlzIGEgcmVsZWFzZSBtZXRob2RvbG9neSB0aGF0IHJlZHVjZXMgZG93bnRpbWUgYW5kIHJpc2sgYnkgcnVubmluZyB0d28gaWRlbnRpY2FsIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIGNhbGxlZCBibHVlIGFuZCBncmVlbi4gV2l0aCBBbWF6b24gRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMsIHlvdSBjYW4gdmFsaWRhdGUgbmV3IHNlcnZpY2UgcmV2aXNpb25zIGJlZm9yZSBkaXJlY3RpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIHRoZW0uIFRoaXMgYXBwcm9hY2ggcHJvdmlkZXMgYSBzYWZlciB3YXkgdG8gZGVwbG95IGNoYW5nZXMgd2l0aCB0aGUgYWJpbGl0eSB0byBxdWlja2x5IHJvbGwgYmFjayBpZiBuZWVkZWQuXG4gKi9cblN0cmF0ZWd5PzogKFwiUk9MTElOR1wiIHwgXCJCTFVFX0dSRUVOXCIgfCBcIkxJTkVBUlwiIHwgXCJDQU5BUllcIilcbkRlcGxveW1lbnRDaXJjdWl0QnJlYWtlcj86IERlcGxveW1lbnRDaXJjdWl0QnJlYWtlclxuLyoqXG4gKiBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUsIHRoZSBgYG1heGltdW1QZXJjZW50YGAgcGFyYW1ldGVyIHJlcHJlc2VudHMgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBgYFJVTk5JTkdgYCBvciBgYFBFTkRJTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKS4gVGhpcyBwYXJhbWV0ZXIgZW5hYmxlcyB5b3UgdG8gZGVmaW5lIHRoZSBkZXBsb3ltZW50IGJhdGNoIHNpemUuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgUkVQTElDQWBgIHNlcnZpY2Ugc2NoZWR1bGVyIGFuZCBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIG9mIDIwMCUsIHRoZSBzY2hlZHVsZXIgbWF5IHN0YXJ0IGZvdXIgbmV3IHRhc2tzIGJlZm9yZSBzdG9wcGluZyB0aGUgZm91ciBvbGRlciB0YXNrcyAocHJvdmlkZWQgdGhhdCB0aGUgY2x1c3RlciByZXNvdXJjZXMgcmVxdWlyZWQgdG8gZG8gdGhpcyBhcmUgYXZhaWxhYmxlKS4gVGhlIGRlZmF1bHQgYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdXNpbmcgdGhlIGBgUkVQTElDQWBgIHNlcnZpY2Ugc2NoZWR1bGVyIGlzIDIwMCUuXG4gKiAgVGhlIEFtYXpvbiBFQ1Mgc2NoZWR1bGVyIHVzZXMgdGhpcyBwYXJhbWV0ZXIgdG8gcmVwbGFjZSB1bmhlYWx0aHkgdGFza3MgYnkgc3RhcnRpbmcgcmVwbGFjZW1lbnQgdGFza3MgZmlyc3QgYW5kIHRoZW4gc3RvcHBpbmcgdGhlIHVuaGVhbHRoeSB0YXNrcywgYXMgbG9uZyBhcyBjbHVzdGVyIHJlc291cmNlcyBmb3Igc3RhcnRpbmcgcmVwbGFjZW1lbnQgdGFza3MgYXJlIGF2YWlsYWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBzY2hlZHVsZXIgcmVwbGFjZXMgdW5oZWFsdGh5IHRhc2tzLCBzZWUgW0FtYXpvbiBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGFza3MgaW4gdGhlIHNlcnZpY2UgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdGhhdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIHdoaWxlIHRoZSBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBpbiB0aGUgYGBEUkFJTklOR2BgIHN0YXRlLlxuICogICBZb3UgY2FuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgdGhlIHNlcnZpY2UgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMsIGFuZCB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWF4aW11bSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLiBUaGUgdmFsdWUgaXMgc3RpbGwgcmV0dXJuZWQgd2hlbiBkZXNjcmliaW5nIHlvdXIgc2VydmljZS5cbiAqL1xuTWF4aW11bVBlcmNlbnQ/OiBudW1iZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCByZXByZXNlbnRzIGEgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlcGxveSB3aXRob3V0IHVzaW5nIGFkZGl0aW9uYWwgY2x1c3RlciBjYXBhY2l0eS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBvZiA1MCUsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBtYXkgc3RvcCB0d28gZXhpc3RpbmcgdGFza3MgdG8gZnJlZSB1cCBjbHVzdGVyIGNhcGFjaXR5IGJlZm9yZSBzdGFydGluZyB0d28gbmV3IHRhc2tzLiBcbiAqICAgSWYgYW55IHRhc2tzIGFyZSB1bmhlYWx0aHkgYW5kIGlmIGBgbWF4aW11bVBlcmNlbnRgYCBkb2Vzbid0IGFsbG93IHRoZSBBbWF6b24gRUNTIHNjaGVkdWxlciB0byBzdGFydCByZXBsYWNlbWVudCB0YXNrcywgdGhlIHNjaGVkdWxlciBzdG9wcyB0aGUgdW5oZWFsdGh5IHRhc2tzIG9uZS1ieS1vbmUg4oCUIHVzaW5nIHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGFzIGEgY29uc3RyYWludCDigJQgdG8gY2xlYXIgdXAgY2FwYWNpdHkgdG8gbGF1bmNoIHJlcGxhY2VtZW50IHRhc2tzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHNjaGVkdWxlciByZXBsYWNlcyB1bmhlYWx0aHkgdGFza3MsIHNlZSBbQW1hem9uIEVDUyBzZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzX3NlcnZpY2VzLmh0bWwpLiBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8gbm90KiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgQSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSBpZiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciA0MCBzZWNvbmRzIGFmdGVyIGEgdGFzayByZWFjaGVzIGEgYGBSVU5OSU5HYGAgc3RhdGUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvdW50ZWQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgb25lIG9yIG1vcmUgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyBpdCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC4gQSB0YXNrIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSB3aGVuIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2sgaGF2ZSBwYXNzZWQgdGhlaXIgaGVhbHRoIGNoZWNrcy4gVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBjYW4gd2FpdCBmb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGFpbmVyIGhlYWx0aCBjaGVjayBzZXR0aW5ncy4gXG4gKiAgIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgYm90aCB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGFuZCB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgXG4gKiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVwbGljYSBzZXJ2aWNlIGZvciBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGlzIDEwMCUuIFRoZSBkZWZhdWx0IGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBEQUVNT05gYCBzZXJ2aWNlIHNjaGVkdWxlIGlzIDAlIGZvciB0aGUgQ0xJLCB0aGUgQVdTIFNES3MsIGFuZCB0aGUgQVBJcyBhbmQgNTAlIGZvciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAqICBUaGUgbWluaW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBkdXJpbmcgYSBkZXBsb3ltZW50IGlzIHRoZSBgYGRlc2lyZWRDb3VudGBgIG11bHRpcGxpZWQgYnkgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAvMTAwLCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLCBhbHRob3VnaCBpdCBpcyByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NaW5pbXVtSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXJcbkxpbmVhckNvbmZpZ3VyYXRpb24/OiB7XG5bazogc3RyaW5nXTogdW5rbm93blxufVxufVxuLyoqXG4gKiBBIGRlcGxveW1lbnQgbGlmZWN5Y2xlIGhvb2sgcnVucyBjdXN0b20gbG9naWMgYXQgc3BlY2lmaWMgc3RhZ2VzIG9mIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuIEN1cnJlbnRseSwgeW91IGNhbiB1c2UgTGFtYmRhIGZ1bmN0aW9ucyBhcyBob29rIHRhcmdldHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTGlmZWN5Y2xlIGhvb2tzIGZvciBBbWF6b24gRUNTIHNlcnZpY2UgZGVwbG95bWVudHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtbGlmZWN5Y2xlLWhvb2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50TGlmZWN5Y2xlSG9vayB7XG4vKipcbiAqIFRoZSBsaWZlY3ljbGUgc3RhZ2VzIGF0IHdoaWNoIHRvIHJ1biB0aGUgaG9vay4gQ2hvb3NlIGZyb20gdGhlc2UgdmFsaWQgdmFsdWVzOlxuICogICArICBSRUNPTkNJTEVfU0VSVklDRVxuICogIFRoZSByZWNvbmNpbGlhdGlvbiBzdGFnZSB0aGF0IG9ubHkgaGFwcGVucyB3aGVuIHlvdSBzdGFydCBhIG5ldyBzZXJ2aWNlIGRlcGxveW1lbnQgd2l0aCBtb3JlIHRoYW4gMSBzZXJ2aWNlIHJldmlzaW9uIGluIGFuIEFDVElWRSBzdGF0ZS5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICArICBQUkVfU0NBTEVfVVBcbiAqICBUaGUgZ3JlZW4gc2VydmljZSByZXZpc2lvbiBoYXMgbm90IHN0YXJ0ZWQuIFRoZSBibHVlIHNlcnZpY2UgcmV2aXNpb24gaXMgaGFuZGxpbmcgMTAwJSBvZiB0aGUgcHJvZHVjdGlvbiB0cmFmZmljLiBUaGVyZSBpcyBubyB0ZXN0IHRyYWZmaWMuXG4gKiAgWW91IGNhbiB1c2UgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhpcyBzdGFnZS5cbiAqICAgKyAgUE9TVF9TQ0FMRV9VUFxuICogIFRoZSBncmVlbiBzZXJ2aWNlIHJldmlzaW9uIGhhcyBzdGFydGVkLiBUaGUgYmx1ZSBzZXJ2aWNlIHJldmlzaW9uIGlzIGhhbmRsaW5nIDEwMCUgb2YgdGhlIHByb2R1Y3Rpb24gdHJhZmZpYy4gVGhlcmUgaXMgbm8gdGVzdCB0cmFmZmljLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgICsgIFRFU1RfVFJBRkZJQ19TSElGVFxuICogIFRoZSBibHVlIGFuZCBncmVlbiBzZXJ2aWNlIHJldmlzaW9ucyBhcmUgcnVubmluZy4gVGhlIGJsdWUgc2VydmljZSByZXZpc2lvbiBoYW5kbGVzIDEwMCUgb2YgdGhlIHByb2R1Y3Rpb24gdHJhZmZpYy4gVGhlIGdyZWVuIHNlcnZpY2UgcmV2aXNpb24gaXMgbWlncmF0aW5nIGZyb20gMCUgdG8gMTAwJSBvZiB0ZXN0IHRyYWZmaWMuXG4gKiAgWW91IGNhbiB1c2UgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhpcyBzdGFnZS5cbiAqICAgKyAgUE9TVF9URVNUX1RSQUZGSUNfU0hJRlRcbiAqICBUaGUgdGVzdCB0cmFmZmljIHNoaWZ0IGlzIGNvbXBsZXRlLiBUaGUgZ3JlZW4gc2VydmljZSByZXZpc2lvbiBoYW5kbGVzIDEwMCUgb2YgdGhlIHRlc3QgdHJhZmZpYy5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICArICBQUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcbiAqICBQcm9kdWN0aW9uIHRyYWZmaWMgaXMgc2hpZnRpbmcgdG8gdGhlIGdyZWVuIHNlcnZpY2UgcmV2aXNpb24uIFRoZSBncmVlbiBzZXJ2aWNlIHJldmlzaW9uIGlzIG1pZ3JhdGluZyBmcm9tIDAlIHRvIDEwMCUgb2YgcHJvZHVjdGlvbiB0cmFmZmljLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgICsgIFBPU1RfUFJPRFVDVElPTl9UUkFGRklDX1NISUZUXG4gKiAgVGhlIHByb2R1Y3Rpb24gdHJhZmZpYyBzaGlmdCBpcyBjb21wbGV0ZS5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICBcbiAqICBZb3UgbXVzdCBwcm92aWRlIHRoaXMgcGFyYW1ldGVyIHdoZW4gY29uZmlndXJpbmcgYSBkZXBsb3ltZW50IGxpZmVjeWNsZSBob29rLlxuICogXG4gKiBAbWluSXRlbXMgMVxuICovXG5MaWZlY3ljbGVTdGFnZXM6IChcIlJFQ09OQ0lMRV9TRVJWSUNFXCIgfCBcIlBSRV9TQ0FMRV9VUFwiIHwgXCJQT1NUX1NDQUxFX1VQXCIgfCBcIlRFU1RfVFJBRkZJQ19TSElGVFwiIHwgXCJQT1NUX1RFU1RfVFJBRkZJQ19TSElGVFwiIHwgXCJQUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcIiB8IFwiUE9TVF9QUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcIilbXVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGhvb2sgdGFyZ2V0LiBDdXJyZW50bHksIG9ubHkgTGFtYmRhIGZ1bmN0aW9uIEFSTnMgYXJlIHN1cHBvcnRlZC5cbiAqICBZb3UgbXVzdCBwcm92aWRlIHRoaXMgcGFyYW1ldGVyIHdoZW4gY29uZmlndXJpbmcgYSBkZXBsb3ltZW50IGxpZmVjeWNsZSBob29rLlxuICovXG5Ib29rVGFyZ2V0QXJuOiBzdHJpbmdcbi8qKlxuICogVXNlIHRoaXMgZmllbGQgdG8gc3BlY2lmeSBjdXN0b20gcGFyYW1ldGVycyB0aGF0IEVDUyBwYXNzZXMgdG8geW91ciBob29rIHRhcmdldCBpbnZvY2F0aW9ucyAoc3VjaCBhcyBhIExhbWJkYSBmdW5jdGlvbikuXG4gKiAgVGhpcyBmaWVsZCBtdXN0IGJlIGEgSlNPTiBvYmplY3QgYXMgYSBzdHJpbmcuXG4gKi9cbkhvb2tEZXRhaWxzPzogKHN0cmluZyB8IHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59KVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIEFtYXpvbiBFQ1MgcGVybWlzc2lvbiB0byBjYWxsIExhbWJkYSBmdW5jdGlvbnMgb24geW91ciBiZWhhbGYuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIExhbWJkYSBmdW5jdGlvbnMgaW4gQW1hem9uIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9ibHVlLWdyZWVuLXBlcm1pc3Npb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBDbG91ZFdhdGNoIGFsYXJtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50QWxhcm1zIHtcbi8qKlxuICogT25lIG9yIG1vcmUgQ2xvdWRXYXRjaCBhbGFybSBuYW1lcy4gVXNlIGEgXCIsXCIgdG8gc2VwYXJhdGUgdGhlIGFsYXJtcy5cbiAqL1xuQWxhcm1OYW1lczogc3RyaW5nW11cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgQ2xvdWRXYXRjaCBhbGFybSBvcHRpb24gaW4gdGhlIHNlcnZpY2UgZGVwbG95bWVudCBwcm9jZXNzLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgdXNlZCwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBjYW4gb25seSBiZSB1c2VkIGZvciBzZXJ2aWNlcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZS5cbiAqICAgVGhlICpkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgZmFpbCBpZiB0aGUgc2VydmljZSBjYW4ndCByZWFjaCBhIHN0ZWFkeSBzdGF0ZS4gSWYgeW91IHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIsIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgdHJhbnNpdGlvbiB0byBhIGZhaWxlZCBzdGF0ZSBhbmQgc3RvcCBsYXVuY2hpbmcgbmV3IHRhc2tzLiBJZiB5b3UgdXNlIHRoZSByb2xsYmFjayBvcHRpb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSb2xsaW5nIHVwZGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWVjcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXIge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBsb2dpYyBmb3IgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyBvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4iXX0=
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
export interface _AWS_VPCLATTICE_RESOURCEGATEWAY {
|
|
5
5
|
IpAddressType?: ("IPV4" | "IPV6" | "DUALSTACK");
|
|
6
6
|
VpcIdentifier: string;
|
|
7
|
+
/**
|
|
8
|
+
* The number of IPv4 addresses to allocate per ENI for the resource gateway
|
|
9
|
+
*/
|
|
10
|
+
Ipv4AddressesPerEni?: number;
|
|
7
11
|
Id?: string;
|
|
8
12
|
Arn?: string;
|
|
9
13
|
/**
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXZwY2xhdHRpY2UtcmVzb3VyY2VnYXRld2F5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXZwY2xhdHRpY2UtcmVzb3VyY2VnYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZXMgYSByZXNvdXJjZSBnYXRld2F5IGZvciBhIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19WUENMQVRUSUNFX1JFU09VUkNFR0FURVdBWSB7XG5JcEFkZHJlc3NUeXBlPzogKFwiSVBWNFwiIHwgXCJJUFY2XCIgfCBcIkRVQUxTVEFDS1wiKVxuVnBjSWRlbnRpZmllcjogc3RyaW5nXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSVB2NCBhZGRyZXNzZXMgdG8gYWxsb2NhdGUgcGVyIEVOSSBmb3IgdGhlIHJlc291cmNlIGdhdGV3YXlcbiAqL1xuSXB2NEFkZHJlc3Nlc1BlckVuaT86IG51bWJlclxuSWQ/OiBzdHJpbmdcbkFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2Ygb25lIG9yIG1vcmUgc3VibmV0cyBpbiB3aGljaCB0byBjcmVhdGUgYW4gZW5kcG9pbnQgbmV0d29yayBpbnRlcmZhY2UuXG4gKi9cblN1Ym5ldElkczogc3RyaW5nW11cbi8qKlxuICogVGhlIElEIG9mIG9uZSBvciBtb3JlIHNlY3VyaXR5IGdyb3VwcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZW5kcG9pbnQgbmV0d29yayBpbnRlcmZhY2UuXG4gKi9cblNlY3VyaXR5R3JvdXBJZHM/OiAoe1xuW2s6IHN0cmluZ106IHVua25vd25cbn0gJiBzdHJpbmcpW11cbi8qKlxuICogQG1pbkl0ZW1zIDBcbiAqIEBtYXhJdGVtcyA1MFxuICovXG5UYWdzPzogVGFnW11cbk5hbWU6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuVmFsdWU/OiBzdHJpbmdcbktleTogc3RyaW5nXG59XG4iXX0=
|