cdk8s-aws-cdk 0.0.5
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/.gitattributes +21 -0
- package/.jsii +4392 -0
- package/API.md +2204 -0
- package/LICENSE +202 -0
- package/README.md +201 -0
- package/changelog.md +2 -0
- package/examples/rds-db-instance/README.md +0 -0
- package/examples/rds-db-instance/cdk.out/RdsDBInstanceStack.assets.json +19 -0
- package/examples/rds-db-instance/cdk.out/RdsDBInstanceStack.template.json +86 -0
- package/examples/rds-db-instance/cdk.out/cdk.out +1 -0
- package/examples/rds-db-instance/cdk.out/manifest.json +230 -0
- package/examples/rds-db-instance/cdk.out/tree.json +171 -0
- package/examples/rds-db-instance/main.ts +136 -0
- package/lib/adapter.d.ts +37 -0
- package/lib/adapter.d.ts.map +1 -0
- package/lib/adapter.js +196 -0
- package/lib/chart.d.ts +19 -0
- package/lib/chart.d.ts.map +1 -0
- package/lib/chart.js +63 -0
- package/lib/imports/cloudcontrol.services.k8s.aws.d.ts +106 -0
- package/lib/imports/cloudcontrol.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/cloudcontrol.services.k8s.aws.js +92 -0
- package/lib/imports/dynamotables-dynamodb.services.k8s.aws.d.ts +430 -0
- package/lib/imports/dynamotables-dynamodb.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/dynamotables-dynamodb.services.k8s.aws.js +314 -0
- package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.d.ts +173 -0
- package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.js +156 -0
- package/lib/imports/fieldexports-services.k8s.aws.d.ts +159 -0
- package/lib/imports/fieldexports-services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/fieldexports-services.k8s.aws.js +151 -0
- package/lib/imports/iampolicies-iam.services.k8s.aws.d.ts +135 -0
- package/lib/imports/iampolicies-iam.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/iampolicies-iam.services.k8s.aws.js +109 -0
- package/lib/imports/iamroles-iam.services.k8s.aws.d.ts +143 -0
- package/lib/imports/iamroles-iam.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/iamroles-iam.services.k8s.aws.js +112 -0
- package/lib/imports/k8s.d.ts +18619 -0
- package/lib/imports/k8s.d.ts.map +1 -0
- package/lib/imports/k8s.js +14701 -0
- package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.d.ts +280 -0
- package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.js +183 -0
- package/lib/imports/lambdafunctions-lambda.services.k8s.aws.d.ts +343 -0
- package/lib/imports/lambdafunctions-lambda.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/lambdafunctions-lambda.services.k8s.aws.js +225 -0
- package/lib/imports/rdsdbinstances-rds.services.k8s.aws.d.ts +790 -0
- package/lib/imports/rdsdbinstances-rds.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/rdsdbinstances-rds.services.k8s.aws.js +217 -0
- package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.d.ts +114 -0
- package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.js +108 -0
- package/lib/imports/s3buckets-s3.services.k8s.aws.d.ts +2253 -0
- package/lib/imports/s3buckets-s3.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/s3buckets-s3.services.k8s.aws.js +1672 -0
- package/lib/imports/sfnmachines-sfn.services.k8s.aws.d.ts +203 -0
- package/lib/imports/sfnmachines-sfn.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/sfnmachines-sfn.services.k8s.aws.js +174 -0
- package/lib/imports/snstopics-sns.services.k8s.aws.d.ts +106 -0
- package/lib/imports/snstopics-sns.services.k8s.aws.d.ts.map +1 -0
- package/lib/imports/snstopics-sns.services.k8s.aws.js +110 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +16 -0
- package/lib/mappers/base.d.ts +23 -0
- package/lib/mappers/base.d.ts.map +1 -0
- package/lib/mappers/base.js +20 -0
- package/lib/mappers/ec2-security-group.d.ts +9 -0
- package/lib/mappers/ec2-security-group.d.ts.map +1 -0
- package/lib/mappers/ec2-security-group.js +33 -0
- package/lib/mappers/iam-policy.d.ts +9 -0
- package/lib/mappers/iam-policy.d.ts.map +1 -0
- package/lib/mappers/iam-policy.js +32 -0
- package/lib/mappers/iam-role.d.ts +9 -0
- package/lib/mappers/iam-role.d.ts.map +1 -0
- package/lib/mappers/iam-role.js +34 -0
- package/lib/mappers/index.d.ts +9 -0
- package/lib/mappers/index.d.ts.map +1 -0
- package/lib/mappers/index.js +21 -0
- package/lib/mappers/lambda-function.d.ts +9 -0
- package/lib/mappers/lambda-function.d.ts.map +1 -0
- package/lib/mappers/lambda-function.js +37 -0
- package/lib/mappers/rds-db-instance.d.ts +10 -0
- package/lib/mappers/rds-db-instance.d.ts.map +1 -0
- package/lib/mappers/rds-db-instance.js +65 -0
- package/lib/mappers/rds-db-subnet-group.d.ts +9 -0
- package/lib/mappers/rds-db-subnet-group.d.ts.map +1 -0
- package/lib/mappers/rds-db-subnet-group.js +34 -0
- package/lib/mappers/s3-bucket.d.ts +9 -0
- package/lib/mappers/s3-bucket.d.ts.map +1 -0
- package/lib/mappers/s3-bucket.js +53 -0
- package/package.json +129 -0
- package/releasetag.txt +1 -0
- package/version.txt +1 -0
|
@@ -0,0 +1,1672 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toJson_BucketSpecReplicationRulesFilterAndTags = exports.toJson_BucketSpecReplicationRulesDestinationReplicationTimeTime = exports.toJson_BucketSpecReplicationRulesDestinationMetricsEventThreshold = exports.toJson_BucketSpecNotificationTopicConfigurationsFilterKeyFilterRules = exports.toJson_BucketSpecNotificationQueueConfigurationsFilterKeyFilterRules = exports.toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKeyFilterRules = exports.toJson_BucketSpecLifecycleRulesFilterAndTags = exports.toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryptionSseKms = exports.toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestinationS3BucketDestination = exports.toJson_BucketSpecReplicationRulesSourceSelectionCriteriaSseKmsEncryptedObjects = exports.toJson_BucketSpecReplicationRulesSourceSelectionCriteriaReplicaModifications = exports.toJson_BucketSpecReplicationRulesFilterTag = exports.toJson_BucketSpecReplicationRulesFilterAnd = exports.toJson_BucketSpecReplicationRulesDestinationReplicationTime = exports.toJson_BucketSpecReplicationRulesDestinationMetrics = exports.toJson_BucketSpecReplicationRulesDestinationEncryptionConfiguration = exports.toJson_BucketSpecReplicationRulesDestinationAccessControlTranslation = exports.toJson_BucketSpecNotificationTopicConfigurationsFilterKey = exports.toJson_BucketSpecNotificationQueueConfigurationsFilterKey = exports.toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKey = exports.toJson_BucketSpecMetricsFilterAndTags = exports.toJson_BucketSpecLoggingLoggingEnabledTargetGrantsGrantee = exports.toJson_BucketSpecLifecycleRulesFilterTag = exports.toJson_BucketSpecLifecycleRulesFilterAnd = exports.toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryption = exports.toJson_BucketSpecIntelligentTieringFilterAndTags = exports.toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestination = exports.toJson_BucketSpecAnalyticsFilterAndTags = exports.toJson_BucketSpecWebsiteRoutingRulesRedirect = exports.toJson_BucketSpecWebsiteRoutingRulesCondition = exports.toJson_BucketSpecReplicationRulesSourceSelectionCriteria = exports.toJson_BucketSpecReplicationRulesFilter = exports.toJson_BucketSpecReplicationRulesExistingObjectReplication = exports.toJson_BucketSpecReplicationRulesDestination = exports.toJson_BucketSpecReplicationRulesDeleteMarkerReplication = exports.toJson_BucketSpecNotificationTopicConfigurationsFilter = exports.toJson_BucketSpecNotificationQueueConfigurationsFilter = exports.toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilter = exports.toJson_BucketSpecMetricsFilterTag = exports.toJson_BucketSpecMetricsFilterAnd = exports.toJson_BucketSpecLoggingLoggingEnabledTargetGrants = exports.toJson_BucketSpecLifecycleRulesTransitions = exports.toJson_BucketSpecLifecycleRulesNoncurrentVersionTransitions = exports.toJson_BucketSpecLifecycleRulesNoncurrentVersionExpiration = exports.toJson_BucketSpecLifecycleRulesFilter = exports.toJson_BucketSpecLifecycleRulesExpiration = exports.toJson_BucketSpecLifecycleRulesAbortIncompleteMultipartUpload = exports.toJson_BucketSpecInventoryDestinationS3BucketDestination = exports.toJson_BucketSpecIntelligentTieringFilterTag = exports.toJson_BucketSpecIntelligentTieringFilterAnd = exports.toJson_BucketSpecEncryptionRulesApplyServerSideEncryptionByDefault = exports.toJson_BucketSpecAnalyticsStorageClassAnalysisDataExport = exports.toJson_BucketSpecAnalyticsFilterTag = exports.toJson_BucketSpecAnalyticsFilterAnd = exports.toJson_BucketSpecWebsiteRoutingRules = exports.toJson_BucketSpecWebsiteRedirectAllRequestsTo = exports.toJson_BucketSpecWebsiteIndexDocument = exports.toJson_BucketSpecWebsiteErrorDocument = exports.toJson_BucketSpecTaggingTagSet = exports.toJson_BucketSpecReplicationRules = exports.toJson_BucketSpecOwnershipControlsRules = exports.toJson_BucketSpecNotificationTopicConfigurations = exports.toJson_BucketSpecNotificationQueueConfigurations = exports.toJson_BucketSpecNotificationLambdaFunctionConfigurations = exports.toJson_BucketSpecMetricsFilter = exports.toJson_BucketSpecLoggingLoggingEnabled = exports.toJson_BucketSpecLifecycleRules = exports.toJson_BucketSpecInventorySchedule = exports.toJson_BucketSpecInventoryFilter = exports.toJson_BucketSpecInventoryDestination = exports.toJson_BucketSpecIntelligentTieringTierings = exports.toJson_BucketSpecIntelligentTieringFilter = exports.toJson_BucketSpecEncryptionRules = exports.toJson_BucketSpecCorsCorsRules = exports.toJson_BucketSpecAnalyticsStorageClassAnalysis = exports.toJson_BucketSpecAnalyticsFilter = exports.toJson_BucketSpecWebsite = exports.toJson_BucketSpecVersioning = exports.toJson_BucketSpecTagging = exports.toJson_BucketSpecRequestPayment = exports.toJson_BucketSpecReplication = exports.toJson_BucketSpecPublicAccessBlock = exports.toJson_BucketSpecOwnershipControls = exports.toJson_BucketSpecNotification = exports.toJson_BucketSpecMetrics = exports.toJson_BucketSpecLogging = exports.toJson_BucketSpecLifecycle = exports.toJson_BucketSpecInventory = exports.toJson_BucketSpecIntelligentTiering = exports.toJson_BucketSpecEncryption = exports.toJson_BucketSpecCreateBucketConfiguration = exports.toJson_BucketSpecCors = exports.toJson_BucketSpecAnalytics = exports.toJson_BucketSpecAccelerate = exports.toJson_BucketSpec = exports.toJson_BucketProps = exports.Bucket = void 0;
|
|
4
|
+
// generated by cdk8s
|
|
5
|
+
const cdk8s_1 = require("cdk8s");
|
|
6
|
+
/**
|
|
7
|
+
* Bucket is the Schema for the Buckets API
|
|
8
|
+
*
|
|
9
|
+
* @schema Bucket
|
|
10
|
+
*/
|
|
11
|
+
class Bucket extends cdk8s_1.ApiObject {
|
|
12
|
+
/**
|
|
13
|
+
* Defines a "Bucket" API object
|
|
14
|
+
* @param scope the scope in which to define this object
|
|
15
|
+
* @param id a scope-local name for the object
|
|
16
|
+
* @param props initialization props
|
|
17
|
+
*/
|
|
18
|
+
constructor(scope, id, props = {}) {
|
|
19
|
+
super(scope, id, {
|
|
20
|
+
...Bucket.GVK,
|
|
21
|
+
...props,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Renders a Kubernetes manifest for "Bucket".
|
|
26
|
+
*
|
|
27
|
+
* This can be used to inline resource manifests inside other objects (e.g. as templates).
|
|
28
|
+
*
|
|
29
|
+
* @param props initialization props
|
|
30
|
+
*/
|
|
31
|
+
static manifest(props = {}) {
|
|
32
|
+
return {
|
|
33
|
+
...Bucket.GVK,
|
|
34
|
+
...toJson_BucketProps(props),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Renders the object to Kubernetes JSON.
|
|
39
|
+
*/
|
|
40
|
+
toJson() {
|
|
41
|
+
const resolved = super.toJson();
|
|
42
|
+
return {
|
|
43
|
+
...Bucket.GVK,
|
|
44
|
+
...toJson_BucketProps(resolved),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.Bucket = Bucket;
|
|
49
|
+
/**
|
|
50
|
+
* Returns the apiVersion and kind for "Bucket"
|
|
51
|
+
*/
|
|
52
|
+
Bucket.GVK = {
|
|
53
|
+
apiVersion: 's3.services.k8s.aws/v1alpha1',
|
|
54
|
+
kind: 'Bucket',
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Converts an object of type 'BucketProps' to JSON representation.
|
|
58
|
+
*/
|
|
59
|
+
/* eslint-disable max-len, quote-props */
|
|
60
|
+
function toJson_BucketProps(obj) {
|
|
61
|
+
if (obj === undefined) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
const result = {
|
|
65
|
+
'metadata': obj.metadata,
|
|
66
|
+
'spec': toJson_BucketSpec(obj.spec),
|
|
67
|
+
};
|
|
68
|
+
// filter undefined values
|
|
69
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
70
|
+
}
|
|
71
|
+
exports.toJson_BucketProps = toJson_BucketProps;
|
|
72
|
+
/**
|
|
73
|
+
* Converts an object of type 'BucketSpec' to JSON representation.
|
|
74
|
+
*/
|
|
75
|
+
/* eslint-disable max-len, quote-props */
|
|
76
|
+
function toJson_BucketSpec(obj) {
|
|
77
|
+
var _a, _b, _c, _d;
|
|
78
|
+
if (obj === undefined) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const result = {
|
|
82
|
+
'accelerate': toJson_BucketSpecAccelerate(obj.accelerate),
|
|
83
|
+
'acl': obj.acl,
|
|
84
|
+
'analytics': (_a = obj.analytics) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecAnalytics(y)),
|
|
85
|
+
'cors': toJson_BucketSpecCors(obj.cors),
|
|
86
|
+
'createBucketConfiguration': toJson_BucketSpecCreateBucketConfiguration(obj.createBucketConfiguration),
|
|
87
|
+
'encryption': toJson_BucketSpecEncryption(obj.encryption),
|
|
88
|
+
'grantFullControl': obj.grantFullControl,
|
|
89
|
+
'grantRead': obj.grantRead,
|
|
90
|
+
'grantReadACP': obj.grantReadAcp,
|
|
91
|
+
'grantWrite': obj.grantWrite,
|
|
92
|
+
'grantWriteACP': obj.grantWriteAcp,
|
|
93
|
+
'intelligentTiering': (_b = obj.intelligentTiering) === null || _b === void 0 ? void 0 : _b.map(y => toJson_BucketSpecIntelligentTiering(y)),
|
|
94
|
+
'inventory': (_c = obj.inventory) === null || _c === void 0 ? void 0 : _c.map(y => toJson_BucketSpecInventory(y)),
|
|
95
|
+
'lifecycle': toJson_BucketSpecLifecycle(obj.lifecycle),
|
|
96
|
+
'logging': toJson_BucketSpecLogging(obj.logging),
|
|
97
|
+
'metrics': (_d = obj.metrics) === null || _d === void 0 ? void 0 : _d.map(y => toJson_BucketSpecMetrics(y)),
|
|
98
|
+
'name': obj.name,
|
|
99
|
+
'notification': toJson_BucketSpecNotification(obj.notification),
|
|
100
|
+
'objectLockEnabledForBucket': obj.objectLockEnabledForBucket,
|
|
101
|
+
'ownershipControls': toJson_BucketSpecOwnershipControls(obj.ownershipControls),
|
|
102
|
+
'policy': obj.policy,
|
|
103
|
+
'publicAccessBlock': toJson_BucketSpecPublicAccessBlock(obj.publicAccessBlock),
|
|
104
|
+
'replication': toJson_BucketSpecReplication(obj.replication),
|
|
105
|
+
'requestPayment': toJson_BucketSpecRequestPayment(obj.requestPayment),
|
|
106
|
+
'tagging': toJson_BucketSpecTagging(obj.tagging),
|
|
107
|
+
'versioning': toJson_BucketSpecVersioning(obj.versioning),
|
|
108
|
+
'website': toJson_BucketSpecWebsite(obj.website),
|
|
109
|
+
};
|
|
110
|
+
// filter undefined values
|
|
111
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
112
|
+
}
|
|
113
|
+
exports.toJson_BucketSpec = toJson_BucketSpec;
|
|
114
|
+
/**
|
|
115
|
+
* Converts an object of type 'BucketSpecAccelerate' to JSON representation.
|
|
116
|
+
*/
|
|
117
|
+
/* eslint-disable max-len, quote-props */
|
|
118
|
+
function toJson_BucketSpecAccelerate(obj) {
|
|
119
|
+
if (obj === undefined) {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
const result = {
|
|
123
|
+
'status': obj.status,
|
|
124
|
+
};
|
|
125
|
+
// filter undefined values
|
|
126
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
127
|
+
}
|
|
128
|
+
exports.toJson_BucketSpecAccelerate = toJson_BucketSpecAccelerate;
|
|
129
|
+
/**
|
|
130
|
+
* Converts an object of type 'BucketSpecAnalytics' to JSON representation.
|
|
131
|
+
*/
|
|
132
|
+
/* eslint-disable max-len, quote-props */
|
|
133
|
+
function toJson_BucketSpecAnalytics(obj) {
|
|
134
|
+
if (obj === undefined) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
const result = {
|
|
138
|
+
'filter': toJson_BucketSpecAnalyticsFilter(obj.filter),
|
|
139
|
+
'id': obj.id,
|
|
140
|
+
'storageClassAnalysis': toJson_BucketSpecAnalyticsStorageClassAnalysis(obj.storageClassAnalysis),
|
|
141
|
+
};
|
|
142
|
+
// filter undefined values
|
|
143
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
144
|
+
}
|
|
145
|
+
exports.toJson_BucketSpecAnalytics = toJson_BucketSpecAnalytics;
|
|
146
|
+
/**
|
|
147
|
+
* Converts an object of type 'BucketSpecCors' to JSON representation.
|
|
148
|
+
*/
|
|
149
|
+
/* eslint-disable max-len, quote-props */
|
|
150
|
+
function toJson_BucketSpecCors(obj) {
|
|
151
|
+
var _a;
|
|
152
|
+
if (obj === undefined) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
const result = {
|
|
156
|
+
'corsRules': (_a = obj.corsRules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecCorsCorsRules(y)),
|
|
157
|
+
};
|
|
158
|
+
// filter undefined values
|
|
159
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
160
|
+
}
|
|
161
|
+
exports.toJson_BucketSpecCors = toJson_BucketSpecCors;
|
|
162
|
+
/**
|
|
163
|
+
* Converts an object of type 'BucketSpecCreateBucketConfiguration' to JSON representation.
|
|
164
|
+
*/
|
|
165
|
+
/* eslint-disable max-len, quote-props */
|
|
166
|
+
function toJson_BucketSpecCreateBucketConfiguration(obj) {
|
|
167
|
+
if (obj === undefined) {
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
const result = {
|
|
171
|
+
'locationConstraint': obj.locationConstraint,
|
|
172
|
+
};
|
|
173
|
+
// filter undefined values
|
|
174
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
175
|
+
}
|
|
176
|
+
exports.toJson_BucketSpecCreateBucketConfiguration = toJson_BucketSpecCreateBucketConfiguration;
|
|
177
|
+
/**
|
|
178
|
+
* Converts an object of type 'BucketSpecEncryption' to JSON representation.
|
|
179
|
+
*/
|
|
180
|
+
/* eslint-disable max-len, quote-props */
|
|
181
|
+
function toJson_BucketSpecEncryption(obj) {
|
|
182
|
+
var _a;
|
|
183
|
+
if (obj === undefined) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
const result = {
|
|
187
|
+
'rules': (_a = obj.rules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecEncryptionRules(y)),
|
|
188
|
+
};
|
|
189
|
+
// filter undefined values
|
|
190
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
191
|
+
}
|
|
192
|
+
exports.toJson_BucketSpecEncryption = toJson_BucketSpecEncryption;
|
|
193
|
+
/**
|
|
194
|
+
* Converts an object of type 'BucketSpecIntelligentTiering' to JSON representation.
|
|
195
|
+
*/
|
|
196
|
+
/* eslint-disable max-len, quote-props */
|
|
197
|
+
function toJson_BucketSpecIntelligentTiering(obj) {
|
|
198
|
+
var _a;
|
|
199
|
+
if (obj === undefined) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
const result = {
|
|
203
|
+
'filter': toJson_BucketSpecIntelligentTieringFilter(obj.filter),
|
|
204
|
+
'id': obj.id,
|
|
205
|
+
'status': obj.status,
|
|
206
|
+
'tierings': (_a = obj.tierings) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecIntelligentTieringTierings(y)),
|
|
207
|
+
};
|
|
208
|
+
// filter undefined values
|
|
209
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
210
|
+
}
|
|
211
|
+
exports.toJson_BucketSpecIntelligentTiering = toJson_BucketSpecIntelligentTiering;
|
|
212
|
+
/**
|
|
213
|
+
* Converts an object of type 'BucketSpecInventory' to JSON representation.
|
|
214
|
+
*/
|
|
215
|
+
/* eslint-disable max-len, quote-props */
|
|
216
|
+
function toJson_BucketSpecInventory(obj) {
|
|
217
|
+
var _a;
|
|
218
|
+
if (obj === undefined) {
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
const result = {
|
|
222
|
+
'destination': toJson_BucketSpecInventoryDestination(obj.destination),
|
|
223
|
+
'filter': toJson_BucketSpecInventoryFilter(obj.filter),
|
|
224
|
+
'id': obj.id,
|
|
225
|
+
'includedObjectVersions': obj.includedObjectVersions,
|
|
226
|
+
'isEnabled': obj.isEnabled,
|
|
227
|
+
'optionalFields': (_a = obj.optionalFields) === null || _a === void 0 ? void 0 : _a.map(y => y),
|
|
228
|
+
'schedule': toJson_BucketSpecInventorySchedule(obj.schedule),
|
|
229
|
+
};
|
|
230
|
+
// filter undefined values
|
|
231
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
232
|
+
}
|
|
233
|
+
exports.toJson_BucketSpecInventory = toJson_BucketSpecInventory;
|
|
234
|
+
/**
|
|
235
|
+
* Converts an object of type 'BucketSpecLifecycle' to JSON representation.
|
|
236
|
+
*/
|
|
237
|
+
/* eslint-disable max-len, quote-props */
|
|
238
|
+
function toJson_BucketSpecLifecycle(obj) {
|
|
239
|
+
var _a;
|
|
240
|
+
if (obj === undefined) {
|
|
241
|
+
return undefined;
|
|
242
|
+
}
|
|
243
|
+
const result = {
|
|
244
|
+
'rules': (_a = obj.rules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecLifecycleRules(y)),
|
|
245
|
+
};
|
|
246
|
+
// filter undefined values
|
|
247
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
248
|
+
}
|
|
249
|
+
exports.toJson_BucketSpecLifecycle = toJson_BucketSpecLifecycle;
|
|
250
|
+
/**
|
|
251
|
+
* Converts an object of type 'BucketSpecLogging' to JSON representation.
|
|
252
|
+
*/
|
|
253
|
+
/* eslint-disable max-len, quote-props */
|
|
254
|
+
function toJson_BucketSpecLogging(obj) {
|
|
255
|
+
if (obj === undefined) {
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
const result = {
|
|
259
|
+
'loggingEnabled': toJson_BucketSpecLoggingLoggingEnabled(obj.loggingEnabled),
|
|
260
|
+
};
|
|
261
|
+
// filter undefined values
|
|
262
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
263
|
+
}
|
|
264
|
+
exports.toJson_BucketSpecLogging = toJson_BucketSpecLogging;
|
|
265
|
+
/**
|
|
266
|
+
* Converts an object of type 'BucketSpecMetrics' to JSON representation.
|
|
267
|
+
*/
|
|
268
|
+
/* eslint-disable max-len, quote-props */
|
|
269
|
+
function toJson_BucketSpecMetrics(obj) {
|
|
270
|
+
if (obj === undefined) {
|
|
271
|
+
return undefined;
|
|
272
|
+
}
|
|
273
|
+
const result = {
|
|
274
|
+
'filter': toJson_BucketSpecMetricsFilter(obj.filter),
|
|
275
|
+
'id': obj.id,
|
|
276
|
+
};
|
|
277
|
+
// filter undefined values
|
|
278
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
279
|
+
}
|
|
280
|
+
exports.toJson_BucketSpecMetrics = toJson_BucketSpecMetrics;
|
|
281
|
+
/**
|
|
282
|
+
* Converts an object of type 'BucketSpecNotification' to JSON representation.
|
|
283
|
+
*/
|
|
284
|
+
/* eslint-disable max-len, quote-props */
|
|
285
|
+
function toJson_BucketSpecNotification(obj) {
|
|
286
|
+
var _a, _b, _c;
|
|
287
|
+
if (obj === undefined) {
|
|
288
|
+
return undefined;
|
|
289
|
+
}
|
|
290
|
+
const result = {
|
|
291
|
+
'lambdaFunctionConfigurations': (_a = obj.lambdaFunctionConfigurations) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecNotificationLambdaFunctionConfigurations(y)),
|
|
292
|
+
'queueConfigurations': (_b = obj.queueConfigurations) === null || _b === void 0 ? void 0 : _b.map(y => toJson_BucketSpecNotificationQueueConfigurations(y)),
|
|
293
|
+
'topicConfigurations': (_c = obj.topicConfigurations) === null || _c === void 0 ? void 0 : _c.map(y => toJson_BucketSpecNotificationTopicConfigurations(y)),
|
|
294
|
+
};
|
|
295
|
+
// filter undefined values
|
|
296
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
297
|
+
}
|
|
298
|
+
exports.toJson_BucketSpecNotification = toJson_BucketSpecNotification;
|
|
299
|
+
/**
|
|
300
|
+
* Converts an object of type 'BucketSpecOwnershipControls' to JSON representation.
|
|
301
|
+
*/
|
|
302
|
+
/* eslint-disable max-len, quote-props */
|
|
303
|
+
function toJson_BucketSpecOwnershipControls(obj) {
|
|
304
|
+
var _a;
|
|
305
|
+
if (obj === undefined) {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
const result = {
|
|
309
|
+
'rules': (_a = obj.rules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecOwnershipControlsRules(y)),
|
|
310
|
+
};
|
|
311
|
+
// filter undefined values
|
|
312
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
313
|
+
}
|
|
314
|
+
exports.toJson_BucketSpecOwnershipControls = toJson_BucketSpecOwnershipControls;
|
|
315
|
+
/**
|
|
316
|
+
* Converts an object of type 'BucketSpecPublicAccessBlock' to JSON representation.
|
|
317
|
+
*/
|
|
318
|
+
/* eslint-disable max-len, quote-props */
|
|
319
|
+
function toJson_BucketSpecPublicAccessBlock(obj) {
|
|
320
|
+
if (obj === undefined) {
|
|
321
|
+
return undefined;
|
|
322
|
+
}
|
|
323
|
+
const result = {
|
|
324
|
+
'blockPublicACLs': obj.blockPublicAcLs,
|
|
325
|
+
'blockPublicPolicy': obj.blockPublicPolicy,
|
|
326
|
+
'ignorePublicACLs': obj.ignorePublicAcLs,
|
|
327
|
+
'restrictPublicBuckets': obj.restrictPublicBuckets,
|
|
328
|
+
};
|
|
329
|
+
// filter undefined values
|
|
330
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
331
|
+
}
|
|
332
|
+
exports.toJson_BucketSpecPublicAccessBlock = toJson_BucketSpecPublicAccessBlock;
|
|
333
|
+
/**
|
|
334
|
+
* Converts an object of type 'BucketSpecReplication' to JSON representation.
|
|
335
|
+
*/
|
|
336
|
+
/* eslint-disable max-len, quote-props */
|
|
337
|
+
function toJson_BucketSpecReplication(obj) {
|
|
338
|
+
var _a;
|
|
339
|
+
if (obj === undefined) {
|
|
340
|
+
return undefined;
|
|
341
|
+
}
|
|
342
|
+
const result = {
|
|
343
|
+
'role': obj.role,
|
|
344
|
+
'rules': (_a = obj.rules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecReplicationRules(y)),
|
|
345
|
+
};
|
|
346
|
+
// filter undefined values
|
|
347
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
348
|
+
}
|
|
349
|
+
exports.toJson_BucketSpecReplication = toJson_BucketSpecReplication;
|
|
350
|
+
/**
|
|
351
|
+
* Converts an object of type 'BucketSpecRequestPayment' to JSON representation.
|
|
352
|
+
*/
|
|
353
|
+
/* eslint-disable max-len, quote-props */
|
|
354
|
+
function toJson_BucketSpecRequestPayment(obj) {
|
|
355
|
+
if (obj === undefined) {
|
|
356
|
+
return undefined;
|
|
357
|
+
}
|
|
358
|
+
const result = {
|
|
359
|
+
'payer': obj.payer,
|
|
360
|
+
};
|
|
361
|
+
// filter undefined values
|
|
362
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
363
|
+
}
|
|
364
|
+
exports.toJson_BucketSpecRequestPayment = toJson_BucketSpecRequestPayment;
|
|
365
|
+
/**
|
|
366
|
+
* Converts an object of type 'BucketSpecTagging' to JSON representation.
|
|
367
|
+
*/
|
|
368
|
+
/* eslint-disable max-len, quote-props */
|
|
369
|
+
function toJson_BucketSpecTagging(obj) {
|
|
370
|
+
var _a;
|
|
371
|
+
if (obj === undefined) {
|
|
372
|
+
return undefined;
|
|
373
|
+
}
|
|
374
|
+
const result = {
|
|
375
|
+
'tagSet': (_a = obj.tagSet) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecTaggingTagSet(y)),
|
|
376
|
+
};
|
|
377
|
+
// filter undefined values
|
|
378
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
379
|
+
}
|
|
380
|
+
exports.toJson_BucketSpecTagging = toJson_BucketSpecTagging;
|
|
381
|
+
/**
|
|
382
|
+
* Converts an object of type 'BucketSpecVersioning' to JSON representation.
|
|
383
|
+
*/
|
|
384
|
+
/* eslint-disable max-len, quote-props */
|
|
385
|
+
function toJson_BucketSpecVersioning(obj) {
|
|
386
|
+
if (obj === undefined) {
|
|
387
|
+
return undefined;
|
|
388
|
+
}
|
|
389
|
+
const result = {
|
|
390
|
+
'status': obj.status,
|
|
391
|
+
};
|
|
392
|
+
// filter undefined values
|
|
393
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
394
|
+
}
|
|
395
|
+
exports.toJson_BucketSpecVersioning = toJson_BucketSpecVersioning;
|
|
396
|
+
/**
|
|
397
|
+
* Converts an object of type 'BucketSpecWebsite' to JSON representation.
|
|
398
|
+
*/
|
|
399
|
+
/* eslint-disable max-len, quote-props */
|
|
400
|
+
function toJson_BucketSpecWebsite(obj) {
|
|
401
|
+
var _a;
|
|
402
|
+
if (obj === undefined) {
|
|
403
|
+
return undefined;
|
|
404
|
+
}
|
|
405
|
+
const result = {
|
|
406
|
+
'errorDocument': toJson_BucketSpecWebsiteErrorDocument(obj.errorDocument),
|
|
407
|
+
'indexDocument': toJson_BucketSpecWebsiteIndexDocument(obj.indexDocument),
|
|
408
|
+
'redirectAllRequestsTo': toJson_BucketSpecWebsiteRedirectAllRequestsTo(obj.redirectAllRequestsTo),
|
|
409
|
+
'routingRules': (_a = obj.routingRules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecWebsiteRoutingRules(y)),
|
|
410
|
+
};
|
|
411
|
+
// filter undefined values
|
|
412
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
413
|
+
}
|
|
414
|
+
exports.toJson_BucketSpecWebsite = toJson_BucketSpecWebsite;
|
|
415
|
+
/**
|
|
416
|
+
* Converts an object of type 'BucketSpecAnalyticsFilter' to JSON representation.
|
|
417
|
+
*/
|
|
418
|
+
/* eslint-disable max-len, quote-props */
|
|
419
|
+
function toJson_BucketSpecAnalyticsFilter(obj) {
|
|
420
|
+
if (obj === undefined) {
|
|
421
|
+
return undefined;
|
|
422
|
+
}
|
|
423
|
+
const result = {
|
|
424
|
+
'and': toJson_BucketSpecAnalyticsFilterAnd(obj.and),
|
|
425
|
+
'prefix': obj.prefix,
|
|
426
|
+
'tag': toJson_BucketSpecAnalyticsFilterTag(obj.tag),
|
|
427
|
+
};
|
|
428
|
+
// filter undefined values
|
|
429
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
430
|
+
}
|
|
431
|
+
exports.toJson_BucketSpecAnalyticsFilter = toJson_BucketSpecAnalyticsFilter;
|
|
432
|
+
/**
|
|
433
|
+
* Converts an object of type 'BucketSpecAnalyticsStorageClassAnalysis' to JSON representation.
|
|
434
|
+
*/
|
|
435
|
+
/* eslint-disable max-len, quote-props */
|
|
436
|
+
function toJson_BucketSpecAnalyticsStorageClassAnalysis(obj) {
|
|
437
|
+
if (obj === undefined) {
|
|
438
|
+
return undefined;
|
|
439
|
+
}
|
|
440
|
+
const result = {
|
|
441
|
+
'dataExport': toJson_BucketSpecAnalyticsStorageClassAnalysisDataExport(obj.dataExport),
|
|
442
|
+
};
|
|
443
|
+
// filter undefined values
|
|
444
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
445
|
+
}
|
|
446
|
+
exports.toJson_BucketSpecAnalyticsStorageClassAnalysis = toJson_BucketSpecAnalyticsStorageClassAnalysis;
|
|
447
|
+
/**
|
|
448
|
+
* Converts an object of type 'BucketSpecCorsCorsRules' to JSON representation.
|
|
449
|
+
*/
|
|
450
|
+
/* eslint-disable max-len, quote-props */
|
|
451
|
+
function toJson_BucketSpecCorsCorsRules(obj) {
|
|
452
|
+
var _a, _b, _c, _d;
|
|
453
|
+
if (obj === undefined) {
|
|
454
|
+
return undefined;
|
|
455
|
+
}
|
|
456
|
+
const result = {
|
|
457
|
+
'allowedHeaders': (_a = obj.allowedHeaders) === null || _a === void 0 ? void 0 : _a.map(y => y),
|
|
458
|
+
'allowedMethods': (_b = obj.allowedMethods) === null || _b === void 0 ? void 0 : _b.map(y => y),
|
|
459
|
+
'allowedOrigins': (_c = obj.allowedOrigins) === null || _c === void 0 ? void 0 : _c.map(y => y),
|
|
460
|
+
'exposeHeaders': (_d = obj.exposeHeaders) === null || _d === void 0 ? void 0 : _d.map(y => y),
|
|
461
|
+
'id': obj.id,
|
|
462
|
+
'maxAgeSeconds': obj.maxAgeSeconds,
|
|
463
|
+
};
|
|
464
|
+
// filter undefined values
|
|
465
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
466
|
+
}
|
|
467
|
+
exports.toJson_BucketSpecCorsCorsRules = toJson_BucketSpecCorsCorsRules;
|
|
468
|
+
/**
|
|
469
|
+
* Converts an object of type 'BucketSpecEncryptionRules' to JSON representation.
|
|
470
|
+
*/
|
|
471
|
+
/* eslint-disable max-len, quote-props */
|
|
472
|
+
function toJson_BucketSpecEncryptionRules(obj) {
|
|
473
|
+
if (obj === undefined) {
|
|
474
|
+
return undefined;
|
|
475
|
+
}
|
|
476
|
+
const result = {
|
|
477
|
+
'applyServerSideEncryptionByDefault': toJson_BucketSpecEncryptionRulesApplyServerSideEncryptionByDefault(obj.applyServerSideEncryptionByDefault),
|
|
478
|
+
'bucketKeyEnabled': obj.bucketKeyEnabled,
|
|
479
|
+
};
|
|
480
|
+
// filter undefined values
|
|
481
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
482
|
+
}
|
|
483
|
+
exports.toJson_BucketSpecEncryptionRules = toJson_BucketSpecEncryptionRules;
|
|
484
|
+
/**
|
|
485
|
+
* Converts an object of type 'BucketSpecIntelligentTieringFilter' to JSON representation.
|
|
486
|
+
*/
|
|
487
|
+
/* eslint-disable max-len, quote-props */
|
|
488
|
+
function toJson_BucketSpecIntelligentTieringFilter(obj) {
|
|
489
|
+
if (obj === undefined) {
|
|
490
|
+
return undefined;
|
|
491
|
+
}
|
|
492
|
+
const result = {
|
|
493
|
+
'and': toJson_BucketSpecIntelligentTieringFilterAnd(obj.and),
|
|
494
|
+
'prefix': obj.prefix,
|
|
495
|
+
'tag': toJson_BucketSpecIntelligentTieringFilterTag(obj.tag),
|
|
496
|
+
};
|
|
497
|
+
// filter undefined values
|
|
498
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
499
|
+
}
|
|
500
|
+
exports.toJson_BucketSpecIntelligentTieringFilter = toJson_BucketSpecIntelligentTieringFilter;
|
|
501
|
+
/**
|
|
502
|
+
* Converts an object of type 'BucketSpecIntelligentTieringTierings' to JSON representation.
|
|
503
|
+
*/
|
|
504
|
+
/* eslint-disable max-len, quote-props */
|
|
505
|
+
function toJson_BucketSpecIntelligentTieringTierings(obj) {
|
|
506
|
+
if (obj === undefined) {
|
|
507
|
+
return undefined;
|
|
508
|
+
}
|
|
509
|
+
const result = {
|
|
510
|
+
'accessTier': obj.accessTier,
|
|
511
|
+
'days': obj.days,
|
|
512
|
+
};
|
|
513
|
+
// filter undefined values
|
|
514
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
515
|
+
}
|
|
516
|
+
exports.toJson_BucketSpecIntelligentTieringTierings = toJson_BucketSpecIntelligentTieringTierings;
|
|
517
|
+
/**
|
|
518
|
+
* Converts an object of type 'BucketSpecInventoryDestination' to JSON representation.
|
|
519
|
+
*/
|
|
520
|
+
/* eslint-disable max-len, quote-props */
|
|
521
|
+
function toJson_BucketSpecInventoryDestination(obj) {
|
|
522
|
+
if (obj === undefined) {
|
|
523
|
+
return undefined;
|
|
524
|
+
}
|
|
525
|
+
const result = {
|
|
526
|
+
's3BucketDestination': toJson_BucketSpecInventoryDestinationS3BucketDestination(obj.s3BucketDestination),
|
|
527
|
+
};
|
|
528
|
+
// filter undefined values
|
|
529
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
530
|
+
}
|
|
531
|
+
exports.toJson_BucketSpecInventoryDestination = toJson_BucketSpecInventoryDestination;
|
|
532
|
+
/**
|
|
533
|
+
* Converts an object of type 'BucketSpecInventoryFilter' to JSON representation.
|
|
534
|
+
*/
|
|
535
|
+
/* eslint-disable max-len, quote-props */
|
|
536
|
+
function toJson_BucketSpecInventoryFilter(obj) {
|
|
537
|
+
if (obj === undefined) {
|
|
538
|
+
return undefined;
|
|
539
|
+
}
|
|
540
|
+
const result = {
|
|
541
|
+
'prefix': obj.prefix,
|
|
542
|
+
};
|
|
543
|
+
// filter undefined values
|
|
544
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
545
|
+
}
|
|
546
|
+
exports.toJson_BucketSpecInventoryFilter = toJson_BucketSpecInventoryFilter;
|
|
547
|
+
/**
|
|
548
|
+
* Converts an object of type 'BucketSpecInventorySchedule' to JSON representation.
|
|
549
|
+
*/
|
|
550
|
+
/* eslint-disable max-len, quote-props */
|
|
551
|
+
function toJson_BucketSpecInventorySchedule(obj) {
|
|
552
|
+
if (obj === undefined) {
|
|
553
|
+
return undefined;
|
|
554
|
+
}
|
|
555
|
+
const result = {
|
|
556
|
+
'frequency': obj.frequency,
|
|
557
|
+
};
|
|
558
|
+
// filter undefined values
|
|
559
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
560
|
+
}
|
|
561
|
+
exports.toJson_BucketSpecInventorySchedule = toJson_BucketSpecInventorySchedule;
|
|
562
|
+
/**
|
|
563
|
+
* Converts an object of type 'BucketSpecLifecycleRules' to JSON representation.
|
|
564
|
+
*/
|
|
565
|
+
/* eslint-disable max-len, quote-props */
|
|
566
|
+
function toJson_BucketSpecLifecycleRules(obj) {
|
|
567
|
+
var _a, _b;
|
|
568
|
+
if (obj === undefined) {
|
|
569
|
+
return undefined;
|
|
570
|
+
}
|
|
571
|
+
const result = {
|
|
572
|
+
'abortIncompleteMultipartUpload': toJson_BucketSpecLifecycleRulesAbortIncompleteMultipartUpload(obj.abortIncompleteMultipartUpload),
|
|
573
|
+
'expiration': toJson_BucketSpecLifecycleRulesExpiration(obj.expiration),
|
|
574
|
+
'filter': toJson_BucketSpecLifecycleRulesFilter(obj.filter),
|
|
575
|
+
'id': obj.id,
|
|
576
|
+
'noncurrentVersionExpiration': toJson_BucketSpecLifecycleRulesNoncurrentVersionExpiration(obj.noncurrentVersionExpiration),
|
|
577
|
+
'noncurrentVersionTransitions': (_a = obj.noncurrentVersionTransitions) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecLifecycleRulesNoncurrentVersionTransitions(y)),
|
|
578
|
+
'prefix': obj.prefix,
|
|
579
|
+
'status': obj.status,
|
|
580
|
+
'transitions': (_b = obj.transitions) === null || _b === void 0 ? void 0 : _b.map(y => toJson_BucketSpecLifecycleRulesTransitions(y)),
|
|
581
|
+
};
|
|
582
|
+
// filter undefined values
|
|
583
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
584
|
+
}
|
|
585
|
+
exports.toJson_BucketSpecLifecycleRules = toJson_BucketSpecLifecycleRules;
|
|
586
|
+
/**
|
|
587
|
+
* Converts an object of type 'BucketSpecLoggingLoggingEnabled' to JSON representation.
|
|
588
|
+
*/
|
|
589
|
+
/* eslint-disable max-len, quote-props */
|
|
590
|
+
function toJson_BucketSpecLoggingLoggingEnabled(obj) {
|
|
591
|
+
var _a;
|
|
592
|
+
if (obj === undefined) {
|
|
593
|
+
return undefined;
|
|
594
|
+
}
|
|
595
|
+
const result = {
|
|
596
|
+
'targetBucket': obj.targetBucket,
|
|
597
|
+
'targetGrants': (_a = obj.targetGrants) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecLoggingLoggingEnabledTargetGrants(y)),
|
|
598
|
+
'targetPrefix': obj.targetPrefix,
|
|
599
|
+
};
|
|
600
|
+
// filter undefined values
|
|
601
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
602
|
+
}
|
|
603
|
+
exports.toJson_BucketSpecLoggingLoggingEnabled = toJson_BucketSpecLoggingLoggingEnabled;
|
|
604
|
+
/**
|
|
605
|
+
* Converts an object of type 'BucketSpecMetricsFilter' to JSON representation.
|
|
606
|
+
*/
|
|
607
|
+
/* eslint-disable max-len, quote-props */
|
|
608
|
+
function toJson_BucketSpecMetricsFilter(obj) {
|
|
609
|
+
if (obj === undefined) {
|
|
610
|
+
return undefined;
|
|
611
|
+
}
|
|
612
|
+
const result = {
|
|
613
|
+
'accessPointARN': obj.accessPointArn,
|
|
614
|
+
'and': toJson_BucketSpecMetricsFilterAnd(obj.and),
|
|
615
|
+
'prefix': obj.prefix,
|
|
616
|
+
'tag': toJson_BucketSpecMetricsFilterTag(obj.tag),
|
|
617
|
+
};
|
|
618
|
+
// filter undefined values
|
|
619
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
620
|
+
}
|
|
621
|
+
exports.toJson_BucketSpecMetricsFilter = toJson_BucketSpecMetricsFilter;
|
|
622
|
+
/**
|
|
623
|
+
* Converts an object of type 'BucketSpecNotificationLambdaFunctionConfigurations' to JSON representation.
|
|
624
|
+
*/
|
|
625
|
+
/* eslint-disable max-len, quote-props */
|
|
626
|
+
function toJson_BucketSpecNotificationLambdaFunctionConfigurations(obj) {
|
|
627
|
+
var _a;
|
|
628
|
+
if (obj === undefined) {
|
|
629
|
+
return undefined;
|
|
630
|
+
}
|
|
631
|
+
const result = {
|
|
632
|
+
'events': (_a = obj.events) === null || _a === void 0 ? void 0 : _a.map(y => y),
|
|
633
|
+
'filter': toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilter(obj.filter),
|
|
634
|
+
'id': obj.id,
|
|
635
|
+
'lambdaFunctionARN': obj.lambdaFunctionArn,
|
|
636
|
+
};
|
|
637
|
+
// filter undefined values
|
|
638
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
639
|
+
}
|
|
640
|
+
exports.toJson_BucketSpecNotificationLambdaFunctionConfigurations = toJson_BucketSpecNotificationLambdaFunctionConfigurations;
|
|
641
|
+
/**
|
|
642
|
+
* Converts an object of type 'BucketSpecNotificationQueueConfigurations' to JSON representation.
|
|
643
|
+
*/
|
|
644
|
+
/* eslint-disable max-len, quote-props */
|
|
645
|
+
function toJson_BucketSpecNotificationQueueConfigurations(obj) {
|
|
646
|
+
var _a;
|
|
647
|
+
if (obj === undefined) {
|
|
648
|
+
return undefined;
|
|
649
|
+
}
|
|
650
|
+
const result = {
|
|
651
|
+
'events': (_a = obj.events) === null || _a === void 0 ? void 0 : _a.map(y => y),
|
|
652
|
+
'filter': toJson_BucketSpecNotificationQueueConfigurationsFilter(obj.filter),
|
|
653
|
+
'id': obj.id,
|
|
654
|
+
'queueARN': obj.queueArn,
|
|
655
|
+
};
|
|
656
|
+
// filter undefined values
|
|
657
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
658
|
+
}
|
|
659
|
+
exports.toJson_BucketSpecNotificationQueueConfigurations = toJson_BucketSpecNotificationQueueConfigurations;
|
|
660
|
+
/**
|
|
661
|
+
* Converts an object of type 'BucketSpecNotificationTopicConfigurations' to JSON representation.
|
|
662
|
+
*/
|
|
663
|
+
/* eslint-disable max-len, quote-props */
|
|
664
|
+
function toJson_BucketSpecNotificationTopicConfigurations(obj) {
|
|
665
|
+
var _a;
|
|
666
|
+
if (obj === undefined) {
|
|
667
|
+
return undefined;
|
|
668
|
+
}
|
|
669
|
+
const result = {
|
|
670
|
+
'events': (_a = obj.events) === null || _a === void 0 ? void 0 : _a.map(y => y),
|
|
671
|
+
'filter': toJson_BucketSpecNotificationTopicConfigurationsFilter(obj.filter),
|
|
672
|
+
'id': obj.id,
|
|
673
|
+
'topicARN': obj.topicArn,
|
|
674
|
+
};
|
|
675
|
+
// filter undefined values
|
|
676
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
677
|
+
}
|
|
678
|
+
exports.toJson_BucketSpecNotificationTopicConfigurations = toJson_BucketSpecNotificationTopicConfigurations;
|
|
679
|
+
/**
|
|
680
|
+
* Converts an object of type 'BucketSpecOwnershipControlsRules' to JSON representation.
|
|
681
|
+
*/
|
|
682
|
+
/* eslint-disable max-len, quote-props */
|
|
683
|
+
function toJson_BucketSpecOwnershipControlsRules(obj) {
|
|
684
|
+
if (obj === undefined) {
|
|
685
|
+
return undefined;
|
|
686
|
+
}
|
|
687
|
+
const result = {
|
|
688
|
+
'objectOwnership': obj.objectOwnership,
|
|
689
|
+
};
|
|
690
|
+
// filter undefined values
|
|
691
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
692
|
+
}
|
|
693
|
+
exports.toJson_BucketSpecOwnershipControlsRules = toJson_BucketSpecOwnershipControlsRules;
|
|
694
|
+
/**
|
|
695
|
+
* Converts an object of type 'BucketSpecReplicationRules' to JSON representation.
|
|
696
|
+
*/
|
|
697
|
+
/* eslint-disable max-len, quote-props */
|
|
698
|
+
function toJson_BucketSpecReplicationRules(obj) {
|
|
699
|
+
if (obj === undefined) {
|
|
700
|
+
return undefined;
|
|
701
|
+
}
|
|
702
|
+
const result = {
|
|
703
|
+
'deleteMarkerReplication': toJson_BucketSpecReplicationRulesDeleteMarkerReplication(obj.deleteMarkerReplication),
|
|
704
|
+
'destination': toJson_BucketSpecReplicationRulesDestination(obj.destination),
|
|
705
|
+
'existingObjectReplication': toJson_BucketSpecReplicationRulesExistingObjectReplication(obj.existingObjectReplication),
|
|
706
|
+
'filter': toJson_BucketSpecReplicationRulesFilter(obj.filter),
|
|
707
|
+
'id': obj.id,
|
|
708
|
+
'prefix': obj.prefix,
|
|
709
|
+
'priority': obj.priority,
|
|
710
|
+
'sourceSelectionCriteria': toJson_BucketSpecReplicationRulesSourceSelectionCriteria(obj.sourceSelectionCriteria),
|
|
711
|
+
'status': obj.status,
|
|
712
|
+
};
|
|
713
|
+
// filter undefined values
|
|
714
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
715
|
+
}
|
|
716
|
+
exports.toJson_BucketSpecReplicationRules = toJson_BucketSpecReplicationRules;
|
|
717
|
+
/**
|
|
718
|
+
* Converts an object of type 'BucketSpecTaggingTagSet' to JSON representation.
|
|
719
|
+
*/
|
|
720
|
+
/* eslint-disable max-len, quote-props */
|
|
721
|
+
function toJson_BucketSpecTaggingTagSet(obj) {
|
|
722
|
+
if (obj === undefined) {
|
|
723
|
+
return undefined;
|
|
724
|
+
}
|
|
725
|
+
const result = {
|
|
726
|
+
'key': obj.key,
|
|
727
|
+
'value': obj.value,
|
|
728
|
+
};
|
|
729
|
+
// filter undefined values
|
|
730
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
731
|
+
}
|
|
732
|
+
exports.toJson_BucketSpecTaggingTagSet = toJson_BucketSpecTaggingTagSet;
|
|
733
|
+
/**
|
|
734
|
+
* Converts an object of type 'BucketSpecWebsiteErrorDocument' to JSON representation.
|
|
735
|
+
*/
|
|
736
|
+
/* eslint-disable max-len, quote-props */
|
|
737
|
+
function toJson_BucketSpecWebsiteErrorDocument(obj) {
|
|
738
|
+
if (obj === undefined) {
|
|
739
|
+
return undefined;
|
|
740
|
+
}
|
|
741
|
+
const result = {
|
|
742
|
+
'key': obj.key,
|
|
743
|
+
};
|
|
744
|
+
// filter undefined values
|
|
745
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
746
|
+
}
|
|
747
|
+
exports.toJson_BucketSpecWebsiteErrorDocument = toJson_BucketSpecWebsiteErrorDocument;
|
|
748
|
+
/**
|
|
749
|
+
* Converts an object of type 'BucketSpecWebsiteIndexDocument' to JSON representation.
|
|
750
|
+
*/
|
|
751
|
+
/* eslint-disable max-len, quote-props */
|
|
752
|
+
function toJson_BucketSpecWebsiteIndexDocument(obj) {
|
|
753
|
+
if (obj === undefined) {
|
|
754
|
+
return undefined;
|
|
755
|
+
}
|
|
756
|
+
const result = {
|
|
757
|
+
'suffix': obj.suffix,
|
|
758
|
+
};
|
|
759
|
+
// filter undefined values
|
|
760
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
761
|
+
}
|
|
762
|
+
exports.toJson_BucketSpecWebsiteIndexDocument = toJson_BucketSpecWebsiteIndexDocument;
|
|
763
|
+
/**
|
|
764
|
+
* Converts an object of type 'BucketSpecWebsiteRedirectAllRequestsTo' to JSON representation.
|
|
765
|
+
*/
|
|
766
|
+
/* eslint-disable max-len, quote-props */
|
|
767
|
+
function toJson_BucketSpecWebsiteRedirectAllRequestsTo(obj) {
|
|
768
|
+
if (obj === undefined) {
|
|
769
|
+
return undefined;
|
|
770
|
+
}
|
|
771
|
+
const result = {
|
|
772
|
+
'hostName': obj.hostName,
|
|
773
|
+
'protocol': obj.protocol,
|
|
774
|
+
};
|
|
775
|
+
// filter undefined values
|
|
776
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
777
|
+
}
|
|
778
|
+
exports.toJson_BucketSpecWebsiteRedirectAllRequestsTo = toJson_BucketSpecWebsiteRedirectAllRequestsTo;
|
|
779
|
+
/**
|
|
780
|
+
* Converts an object of type 'BucketSpecWebsiteRoutingRules' to JSON representation.
|
|
781
|
+
*/
|
|
782
|
+
/* eslint-disable max-len, quote-props */
|
|
783
|
+
function toJson_BucketSpecWebsiteRoutingRules(obj) {
|
|
784
|
+
if (obj === undefined) {
|
|
785
|
+
return undefined;
|
|
786
|
+
}
|
|
787
|
+
const result = {
|
|
788
|
+
'condition': toJson_BucketSpecWebsiteRoutingRulesCondition(obj.condition),
|
|
789
|
+
'redirect': toJson_BucketSpecWebsiteRoutingRulesRedirect(obj.redirect),
|
|
790
|
+
};
|
|
791
|
+
// filter undefined values
|
|
792
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
793
|
+
}
|
|
794
|
+
exports.toJson_BucketSpecWebsiteRoutingRules = toJson_BucketSpecWebsiteRoutingRules;
|
|
795
|
+
/**
|
|
796
|
+
* Converts an object of type 'BucketSpecAnalyticsFilterAnd' to JSON representation.
|
|
797
|
+
*/
|
|
798
|
+
/* eslint-disable max-len, quote-props */
|
|
799
|
+
function toJson_BucketSpecAnalyticsFilterAnd(obj) {
|
|
800
|
+
var _a;
|
|
801
|
+
if (obj === undefined) {
|
|
802
|
+
return undefined;
|
|
803
|
+
}
|
|
804
|
+
const result = {
|
|
805
|
+
'prefix': obj.prefix,
|
|
806
|
+
'tags': (_a = obj.tags) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecAnalyticsFilterAndTags(y)),
|
|
807
|
+
};
|
|
808
|
+
// filter undefined values
|
|
809
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
810
|
+
}
|
|
811
|
+
exports.toJson_BucketSpecAnalyticsFilterAnd = toJson_BucketSpecAnalyticsFilterAnd;
|
|
812
|
+
/**
|
|
813
|
+
* Converts an object of type 'BucketSpecAnalyticsFilterTag' to JSON representation.
|
|
814
|
+
*/
|
|
815
|
+
/* eslint-disable max-len, quote-props */
|
|
816
|
+
function toJson_BucketSpecAnalyticsFilterTag(obj) {
|
|
817
|
+
if (obj === undefined) {
|
|
818
|
+
return undefined;
|
|
819
|
+
}
|
|
820
|
+
const result = {
|
|
821
|
+
'key': obj.key,
|
|
822
|
+
'value': obj.value,
|
|
823
|
+
};
|
|
824
|
+
// filter undefined values
|
|
825
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
826
|
+
}
|
|
827
|
+
exports.toJson_BucketSpecAnalyticsFilterTag = toJson_BucketSpecAnalyticsFilterTag;
|
|
828
|
+
/**
|
|
829
|
+
* Converts an object of type 'BucketSpecAnalyticsStorageClassAnalysisDataExport' to JSON representation.
|
|
830
|
+
*/
|
|
831
|
+
/* eslint-disable max-len, quote-props */
|
|
832
|
+
function toJson_BucketSpecAnalyticsStorageClassAnalysisDataExport(obj) {
|
|
833
|
+
if (obj === undefined) {
|
|
834
|
+
return undefined;
|
|
835
|
+
}
|
|
836
|
+
const result = {
|
|
837
|
+
'destination': toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestination(obj.destination),
|
|
838
|
+
'outputSchemaVersion': obj.outputSchemaVersion,
|
|
839
|
+
};
|
|
840
|
+
// filter undefined values
|
|
841
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
842
|
+
}
|
|
843
|
+
exports.toJson_BucketSpecAnalyticsStorageClassAnalysisDataExport = toJson_BucketSpecAnalyticsStorageClassAnalysisDataExport;
|
|
844
|
+
/**
|
|
845
|
+
* Converts an object of type 'BucketSpecEncryptionRulesApplyServerSideEncryptionByDefault' to JSON representation.
|
|
846
|
+
*/
|
|
847
|
+
/* eslint-disable max-len, quote-props */
|
|
848
|
+
function toJson_BucketSpecEncryptionRulesApplyServerSideEncryptionByDefault(obj) {
|
|
849
|
+
if (obj === undefined) {
|
|
850
|
+
return undefined;
|
|
851
|
+
}
|
|
852
|
+
const result = {
|
|
853
|
+
'kmsMasterKeyID': obj.kmsMasterKeyId,
|
|
854
|
+
'sseAlgorithm': obj.sseAlgorithm,
|
|
855
|
+
};
|
|
856
|
+
// filter undefined values
|
|
857
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
858
|
+
}
|
|
859
|
+
exports.toJson_BucketSpecEncryptionRulesApplyServerSideEncryptionByDefault = toJson_BucketSpecEncryptionRulesApplyServerSideEncryptionByDefault;
|
|
860
|
+
/**
|
|
861
|
+
* Converts an object of type 'BucketSpecIntelligentTieringFilterAnd' to JSON representation.
|
|
862
|
+
*/
|
|
863
|
+
/* eslint-disable max-len, quote-props */
|
|
864
|
+
function toJson_BucketSpecIntelligentTieringFilterAnd(obj) {
|
|
865
|
+
var _a;
|
|
866
|
+
if (obj === undefined) {
|
|
867
|
+
return undefined;
|
|
868
|
+
}
|
|
869
|
+
const result = {
|
|
870
|
+
'prefix': obj.prefix,
|
|
871
|
+
'tags': (_a = obj.tags) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecIntelligentTieringFilterAndTags(y)),
|
|
872
|
+
};
|
|
873
|
+
// filter undefined values
|
|
874
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
875
|
+
}
|
|
876
|
+
exports.toJson_BucketSpecIntelligentTieringFilterAnd = toJson_BucketSpecIntelligentTieringFilterAnd;
|
|
877
|
+
/**
|
|
878
|
+
* Converts an object of type 'BucketSpecIntelligentTieringFilterTag' to JSON representation.
|
|
879
|
+
*/
|
|
880
|
+
/* eslint-disable max-len, quote-props */
|
|
881
|
+
function toJson_BucketSpecIntelligentTieringFilterTag(obj) {
|
|
882
|
+
if (obj === undefined) {
|
|
883
|
+
return undefined;
|
|
884
|
+
}
|
|
885
|
+
const result = {
|
|
886
|
+
'key': obj.key,
|
|
887
|
+
'value': obj.value,
|
|
888
|
+
};
|
|
889
|
+
// filter undefined values
|
|
890
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
891
|
+
}
|
|
892
|
+
exports.toJson_BucketSpecIntelligentTieringFilterTag = toJson_BucketSpecIntelligentTieringFilterTag;
|
|
893
|
+
/**
|
|
894
|
+
* Converts an object of type 'BucketSpecInventoryDestinationS3BucketDestination' to JSON representation.
|
|
895
|
+
*/
|
|
896
|
+
/* eslint-disable max-len, quote-props */
|
|
897
|
+
function toJson_BucketSpecInventoryDestinationS3BucketDestination(obj) {
|
|
898
|
+
if (obj === undefined) {
|
|
899
|
+
return undefined;
|
|
900
|
+
}
|
|
901
|
+
const result = {
|
|
902
|
+
'accountID': obj.accountId,
|
|
903
|
+
'bucket': obj.bucket,
|
|
904
|
+
'encryption': toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryption(obj.encryption),
|
|
905
|
+
'format': obj.format,
|
|
906
|
+
'prefix': obj.prefix,
|
|
907
|
+
};
|
|
908
|
+
// filter undefined values
|
|
909
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
910
|
+
}
|
|
911
|
+
exports.toJson_BucketSpecInventoryDestinationS3BucketDestination = toJson_BucketSpecInventoryDestinationS3BucketDestination;
|
|
912
|
+
/**
|
|
913
|
+
* Converts an object of type 'BucketSpecLifecycleRulesAbortIncompleteMultipartUpload' to JSON representation.
|
|
914
|
+
*/
|
|
915
|
+
/* eslint-disable max-len, quote-props */
|
|
916
|
+
function toJson_BucketSpecLifecycleRulesAbortIncompleteMultipartUpload(obj) {
|
|
917
|
+
if (obj === undefined) {
|
|
918
|
+
return undefined;
|
|
919
|
+
}
|
|
920
|
+
const result = {
|
|
921
|
+
'daysAfterInitiation': obj.daysAfterInitiation,
|
|
922
|
+
};
|
|
923
|
+
// filter undefined values
|
|
924
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
925
|
+
}
|
|
926
|
+
exports.toJson_BucketSpecLifecycleRulesAbortIncompleteMultipartUpload = toJson_BucketSpecLifecycleRulesAbortIncompleteMultipartUpload;
|
|
927
|
+
/**
|
|
928
|
+
* Converts an object of type 'BucketSpecLifecycleRulesExpiration' to JSON representation.
|
|
929
|
+
*/
|
|
930
|
+
/* eslint-disable max-len, quote-props */
|
|
931
|
+
function toJson_BucketSpecLifecycleRulesExpiration(obj) {
|
|
932
|
+
var _a;
|
|
933
|
+
if (obj === undefined) {
|
|
934
|
+
return undefined;
|
|
935
|
+
}
|
|
936
|
+
const result = {
|
|
937
|
+
'date': (_a = obj.date) === null || _a === void 0 ? void 0 : _a.toISOString(),
|
|
938
|
+
'days': obj.days,
|
|
939
|
+
'expiredObjectDeleteMarker': obj.expiredObjectDeleteMarker,
|
|
940
|
+
};
|
|
941
|
+
// filter undefined values
|
|
942
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
943
|
+
}
|
|
944
|
+
exports.toJson_BucketSpecLifecycleRulesExpiration = toJson_BucketSpecLifecycleRulesExpiration;
|
|
945
|
+
/**
|
|
946
|
+
* Converts an object of type 'BucketSpecLifecycleRulesFilter' to JSON representation.
|
|
947
|
+
*/
|
|
948
|
+
/* eslint-disable max-len, quote-props */
|
|
949
|
+
function toJson_BucketSpecLifecycleRulesFilter(obj) {
|
|
950
|
+
if (obj === undefined) {
|
|
951
|
+
return undefined;
|
|
952
|
+
}
|
|
953
|
+
const result = {
|
|
954
|
+
'and': toJson_BucketSpecLifecycleRulesFilterAnd(obj.and),
|
|
955
|
+
'prefix': obj.prefix,
|
|
956
|
+
'tag': toJson_BucketSpecLifecycleRulesFilterTag(obj.tag),
|
|
957
|
+
};
|
|
958
|
+
// filter undefined values
|
|
959
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
960
|
+
}
|
|
961
|
+
exports.toJson_BucketSpecLifecycleRulesFilter = toJson_BucketSpecLifecycleRulesFilter;
|
|
962
|
+
/**
|
|
963
|
+
* Converts an object of type 'BucketSpecLifecycleRulesNoncurrentVersionExpiration' to JSON representation.
|
|
964
|
+
*/
|
|
965
|
+
/* eslint-disable max-len, quote-props */
|
|
966
|
+
function toJson_BucketSpecLifecycleRulesNoncurrentVersionExpiration(obj) {
|
|
967
|
+
if (obj === undefined) {
|
|
968
|
+
return undefined;
|
|
969
|
+
}
|
|
970
|
+
const result = {
|
|
971
|
+
'noncurrentDays': obj.noncurrentDays,
|
|
972
|
+
};
|
|
973
|
+
// filter undefined values
|
|
974
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
975
|
+
}
|
|
976
|
+
exports.toJson_BucketSpecLifecycleRulesNoncurrentVersionExpiration = toJson_BucketSpecLifecycleRulesNoncurrentVersionExpiration;
|
|
977
|
+
/**
|
|
978
|
+
* Converts an object of type 'BucketSpecLifecycleRulesNoncurrentVersionTransitions' to JSON representation.
|
|
979
|
+
*/
|
|
980
|
+
/* eslint-disable max-len, quote-props */
|
|
981
|
+
function toJson_BucketSpecLifecycleRulesNoncurrentVersionTransitions(obj) {
|
|
982
|
+
if (obj === undefined) {
|
|
983
|
+
return undefined;
|
|
984
|
+
}
|
|
985
|
+
const result = {
|
|
986
|
+
'noncurrentDays': obj.noncurrentDays,
|
|
987
|
+
'storageClass': obj.storageClass,
|
|
988
|
+
};
|
|
989
|
+
// filter undefined values
|
|
990
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
991
|
+
}
|
|
992
|
+
exports.toJson_BucketSpecLifecycleRulesNoncurrentVersionTransitions = toJson_BucketSpecLifecycleRulesNoncurrentVersionTransitions;
|
|
993
|
+
/**
|
|
994
|
+
* Converts an object of type 'BucketSpecLifecycleRulesTransitions' to JSON representation.
|
|
995
|
+
*/
|
|
996
|
+
/* eslint-disable max-len, quote-props */
|
|
997
|
+
function toJson_BucketSpecLifecycleRulesTransitions(obj) {
|
|
998
|
+
var _a;
|
|
999
|
+
if (obj === undefined) {
|
|
1000
|
+
return undefined;
|
|
1001
|
+
}
|
|
1002
|
+
const result = {
|
|
1003
|
+
'date': (_a = obj.date) === null || _a === void 0 ? void 0 : _a.toISOString(),
|
|
1004
|
+
'days': obj.days,
|
|
1005
|
+
'storageClass': obj.storageClass,
|
|
1006
|
+
};
|
|
1007
|
+
// filter undefined values
|
|
1008
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1009
|
+
}
|
|
1010
|
+
exports.toJson_BucketSpecLifecycleRulesTransitions = toJson_BucketSpecLifecycleRulesTransitions;
|
|
1011
|
+
/**
|
|
1012
|
+
* Converts an object of type 'BucketSpecLoggingLoggingEnabledTargetGrants' to JSON representation.
|
|
1013
|
+
*/
|
|
1014
|
+
/* eslint-disable max-len, quote-props */
|
|
1015
|
+
function toJson_BucketSpecLoggingLoggingEnabledTargetGrants(obj) {
|
|
1016
|
+
if (obj === undefined) {
|
|
1017
|
+
return undefined;
|
|
1018
|
+
}
|
|
1019
|
+
const result = {
|
|
1020
|
+
'grantee': toJson_BucketSpecLoggingLoggingEnabledTargetGrantsGrantee(obj.grantee),
|
|
1021
|
+
'permission': obj.permission,
|
|
1022
|
+
};
|
|
1023
|
+
// filter undefined values
|
|
1024
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1025
|
+
}
|
|
1026
|
+
exports.toJson_BucketSpecLoggingLoggingEnabledTargetGrants = toJson_BucketSpecLoggingLoggingEnabledTargetGrants;
|
|
1027
|
+
/**
|
|
1028
|
+
* Converts an object of type 'BucketSpecMetricsFilterAnd' to JSON representation.
|
|
1029
|
+
*/
|
|
1030
|
+
/* eslint-disable max-len, quote-props */
|
|
1031
|
+
function toJson_BucketSpecMetricsFilterAnd(obj) {
|
|
1032
|
+
var _a;
|
|
1033
|
+
if (obj === undefined) {
|
|
1034
|
+
return undefined;
|
|
1035
|
+
}
|
|
1036
|
+
const result = {
|
|
1037
|
+
'accessPointARN': obj.accessPointArn,
|
|
1038
|
+
'prefix': obj.prefix,
|
|
1039
|
+
'tags': (_a = obj.tags) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecMetricsFilterAndTags(y)),
|
|
1040
|
+
};
|
|
1041
|
+
// filter undefined values
|
|
1042
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1043
|
+
}
|
|
1044
|
+
exports.toJson_BucketSpecMetricsFilterAnd = toJson_BucketSpecMetricsFilterAnd;
|
|
1045
|
+
/**
|
|
1046
|
+
* Converts an object of type 'BucketSpecMetricsFilterTag' to JSON representation.
|
|
1047
|
+
*/
|
|
1048
|
+
/* eslint-disable max-len, quote-props */
|
|
1049
|
+
function toJson_BucketSpecMetricsFilterTag(obj) {
|
|
1050
|
+
if (obj === undefined) {
|
|
1051
|
+
return undefined;
|
|
1052
|
+
}
|
|
1053
|
+
const result = {
|
|
1054
|
+
'key': obj.key,
|
|
1055
|
+
'value': obj.value,
|
|
1056
|
+
};
|
|
1057
|
+
// filter undefined values
|
|
1058
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1059
|
+
}
|
|
1060
|
+
exports.toJson_BucketSpecMetricsFilterTag = toJson_BucketSpecMetricsFilterTag;
|
|
1061
|
+
/**
|
|
1062
|
+
* Converts an object of type 'BucketSpecNotificationLambdaFunctionConfigurationsFilter' to JSON representation.
|
|
1063
|
+
*/
|
|
1064
|
+
/* eslint-disable max-len, quote-props */
|
|
1065
|
+
function toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilter(obj) {
|
|
1066
|
+
if (obj === undefined) {
|
|
1067
|
+
return undefined;
|
|
1068
|
+
}
|
|
1069
|
+
const result = {
|
|
1070
|
+
'key': toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKey(obj.key),
|
|
1071
|
+
};
|
|
1072
|
+
// filter undefined values
|
|
1073
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1074
|
+
}
|
|
1075
|
+
exports.toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilter = toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilter;
|
|
1076
|
+
/**
|
|
1077
|
+
* Converts an object of type 'BucketSpecNotificationQueueConfigurationsFilter' to JSON representation.
|
|
1078
|
+
*/
|
|
1079
|
+
/* eslint-disable max-len, quote-props */
|
|
1080
|
+
function toJson_BucketSpecNotificationQueueConfigurationsFilter(obj) {
|
|
1081
|
+
if (obj === undefined) {
|
|
1082
|
+
return undefined;
|
|
1083
|
+
}
|
|
1084
|
+
const result = {
|
|
1085
|
+
'key': toJson_BucketSpecNotificationQueueConfigurationsFilterKey(obj.key),
|
|
1086
|
+
};
|
|
1087
|
+
// filter undefined values
|
|
1088
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1089
|
+
}
|
|
1090
|
+
exports.toJson_BucketSpecNotificationQueueConfigurationsFilter = toJson_BucketSpecNotificationQueueConfigurationsFilter;
|
|
1091
|
+
/**
|
|
1092
|
+
* Converts an object of type 'BucketSpecNotificationTopicConfigurationsFilter' to JSON representation.
|
|
1093
|
+
*/
|
|
1094
|
+
/* eslint-disable max-len, quote-props */
|
|
1095
|
+
function toJson_BucketSpecNotificationTopicConfigurationsFilter(obj) {
|
|
1096
|
+
if (obj === undefined) {
|
|
1097
|
+
return undefined;
|
|
1098
|
+
}
|
|
1099
|
+
const result = {
|
|
1100
|
+
'key': toJson_BucketSpecNotificationTopicConfigurationsFilterKey(obj.key),
|
|
1101
|
+
};
|
|
1102
|
+
// filter undefined values
|
|
1103
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1104
|
+
}
|
|
1105
|
+
exports.toJson_BucketSpecNotificationTopicConfigurationsFilter = toJson_BucketSpecNotificationTopicConfigurationsFilter;
|
|
1106
|
+
/**
|
|
1107
|
+
* Converts an object of type 'BucketSpecReplicationRulesDeleteMarkerReplication' to JSON representation.
|
|
1108
|
+
*/
|
|
1109
|
+
/* eslint-disable max-len, quote-props */
|
|
1110
|
+
function toJson_BucketSpecReplicationRulesDeleteMarkerReplication(obj) {
|
|
1111
|
+
if (obj === undefined) {
|
|
1112
|
+
return undefined;
|
|
1113
|
+
}
|
|
1114
|
+
const result = {
|
|
1115
|
+
'status': obj.status,
|
|
1116
|
+
};
|
|
1117
|
+
// filter undefined values
|
|
1118
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1119
|
+
}
|
|
1120
|
+
exports.toJson_BucketSpecReplicationRulesDeleteMarkerReplication = toJson_BucketSpecReplicationRulesDeleteMarkerReplication;
|
|
1121
|
+
/**
|
|
1122
|
+
* Converts an object of type 'BucketSpecReplicationRulesDestination' to JSON representation.
|
|
1123
|
+
*/
|
|
1124
|
+
/* eslint-disable max-len, quote-props */
|
|
1125
|
+
function toJson_BucketSpecReplicationRulesDestination(obj) {
|
|
1126
|
+
if (obj === undefined) {
|
|
1127
|
+
return undefined;
|
|
1128
|
+
}
|
|
1129
|
+
const result = {
|
|
1130
|
+
'accessControlTranslation': toJson_BucketSpecReplicationRulesDestinationAccessControlTranslation(obj.accessControlTranslation),
|
|
1131
|
+
'account': obj.account,
|
|
1132
|
+
'bucket': obj.bucket,
|
|
1133
|
+
'encryptionConfiguration': toJson_BucketSpecReplicationRulesDestinationEncryptionConfiguration(obj.encryptionConfiguration),
|
|
1134
|
+
'metrics': toJson_BucketSpecReplicationRulesDestinationMetrics(obj.metrics),
|
|
1135
|
+
'replicationTime': toJson_BucketSpecReplicationRulesDestinationReplicationTime(obj.replicationTime),
|
|
1136
|
+
'storageClass': obj.storageClass,
|
|
1137
|
+
};
|
|
1138
|
+
// filter undefined values
|
|
1139
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1140
|
+
}
|
|
1141
|
+
exports.toJson_BucketSpecReplicationRulesDestination = toJson_BucketSpecReplicationRulesDestination;
|
|
1142
|
+
/**
|
|
1143
|
+
* Converts an object of type 'BucketSpecReplicationRulesExistingObjectReplication' to JSON representation.
|
|
1144
|
+
*/
|
|
1145
|
+
/* eslint-disable max-len, quote-props */
|
|
1146
|
+
function toJson_BucketSpecReplicationRulesExistingObjectReplication(obj) {
|
|
1147
|
+
if (obj === undefined) {
|
|
1148
|
+
return undefined;
|
|
1149
|
+
}
|
|
1150
|
+
const result = {
|
|
1151
|
+
'status': obj.status,
|
|
1152
|
+
};
|
|
1153
|
+
// filter undefined values
|
|
1154
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1155
|
+
}
|
|
1156
|
+
exports.toJson_BucketSpecReplicationRulesExistingObjectReplication = toJson_BucketSpecReplicationRulesExistingObjectReplication;
|
|
1157
|
+
/**
|
|
1158
|
+
* Converts an object of type 'BucketSpecReplicationRulesFilter' to JSON representation.
|
|
1159
|
+
*/
|
|
1160
|
+
/* eslint-disable max-len, quote-props */
|
|
1161
|
+
function toJson_BucketSpecReplicationRulesFilter(obj) {
|
|
1162
|
+
if (obj === undefined) {
|
|
1163
|
+
return undefined;
|
|
1164
|
+
}
|
|
1165
|
+
const result = {
|
|
1166
|
+
'and': toJson_BucketSpecReplicationRulesFilterAnd(obj.and),
|
|
1167
|
+
'prefix': obj.prefix,
|
|
1168
|
+
'tag': toJson_BucketSpecReplicationRulesFilterTag(obj.tag),
|
|
1169
|
+
};
|
|
1170
|
+
// filter undefined values
|
|
1171
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1172
|
+
}
|
|
1173
|
+
exports.toJson_BucketSpecReplicationRulesFilter = toJson_BucketSpecReplicationRulesFilter;
|
|
1174
|
+
/**
|
|
1175
|
+
* Converts an object of type 'BucketSpecReplicationRulesSourceSelectionCriteria' to JSON representation.
|
|
1176
|
+
*/
|
|
1177
|
+
/* eslint-disable max-len, quote-props */
|
|
1178
|
+
function toJson_BucketSpecReplicationRulesSourceSelectionCriteria(obj) {
|
|
1179
|
+
if (obj === undefined) {
|
|
1180
|
+
return undefined;
|
|
1181
|
+
}
|
|
1182
|
+
const result = {
|
|
1183
|
+
'replicaModifications': toJson_BucketSpecReplicationRulesSourceSelectionCriteriaReplicaModifications(obj.replicaModifications),
|
|
1184
|
+
'sseKMSEncryptedObjects': toJson_BucketSpecReplicationRulesSourceSelectionCriteriaSseKmsEncryptedObjects(obj.sseKmsEncryptedObjects),
|
|
1185
|
+
};
|
|
1186
|
+
// filter undefined values
|
|
1187
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1188
|
+
}
|
|
1189
|
+
exports.toJson_BucketSpecReplicationRulesSourceSelectionCriteria = toJson_BucketSpecReplicationRulesSourceSelectionCriteria;
|
|
1190
|
+
/**
|
|
1191
|
+
* Converts an object of type 'BucketSpecWebsiteRoutingRulesCondition' to JSON representation.
|
|
1192
|
+
*/
|
|
1193
|
+
/* eslint-disable max-len, quote-props */
|
|
1194
|
+
function toJson_BucketSpecWebsiteRoutingRulesCondition(obj) {
|
|
1195
|
+
if (obj === undefined) {
|
|
1196
|
+
return undefined;
|
|
1197
|
+
}
|
|
1198
|
+
const result = {
|
|
1199
|
+
'httpErrorCodeReturnedEquals': obj.httpErrorCodeReturnedEquals,
|
|
1200
|
+
'keyPrefixEquals': obj.keyPrefixEquals,
|
|
1201
|
+
};
|
|
1202
|
+
// filter undefined values
|
|
1203
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1204
|
+
}
|
|
1205
|
+
exports.toJson_BucketSpecWebsiteRoutingRulesCondition = toJson_BucketSpecWebsiteRoutingRulesCondition;
|
|
1206
|
+
/**
|
|
1207
|
+
* Converts an object of type 'BucketSpecWebsiteRoutingRulesRedirect' to JSON representation.
|
|
1208
|
+
*/
|
|
1209
|
+
/* eslint-disable max-len, quote-props */
|
|
1210
|
+
function toJson_BucketSpecWebsiteRoutingRulesRedirect(obj) {
|
|
1211
|
+
if (obj === undefined) {
|
|
1212
|
+
return undefined;
|
|
1213
|
+
}
|
|
1214
|
+
const result = {
|
|
1215
|
+
'hostName': obj.hostName,
|
|
1216
|
+
'httpRedirectCode': obj.httpRedirectCode,
|
|
1217
|
+
'protocol': obj.protocol,
|
|
1218
|
+
'replaceKeyPrefixWith': obj.replaceKeyPrefixWith,
|
|
1219
|
+
'replaceKeyWith': obj.replaceKeyWith,
|
|
1220
|
+
};
|
|
1221
|
+
// filter undefined values
|
|
1222
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1223
|
+
}
|
|
1224
|
+
exports.toJson_BucketSpecWebsiteRoutingRulesRedirect = toJson_BucketSpecWebsiteRoutingRulesRedirect;
|
|
1225
|
+
/**
|
|
1226
|
+
* Converts an object of type 'BucketSpecAnalyticsFilterAndTags' to JSON representation.
|
|
1227
|
+
*/
|
|
1228
|
+
/* eslint-disable max-len, quote-props */
|
|
1229
|
+
function toJson_BucketSpecAnalyticsFilterAndTags(obj) {
|
|
1230
|
+
if (obj === undefined) {
|
|
1231
|
+
return undefined;
|
|
1232
|
+
}
|
|
1233
|
+
const result = {
|
|
1234
|
+
'key': obj.key,
|
|
1235
|
+
'value': obj.value,
|
|
1236
|
+
};
|
|
1237
|
+
// filter undefined values
|
|
1238
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1239
|
+
}
|
|
1240
|
+
exports.toJson_BucketSpecAnalyticsFilterAndTags = toJson_BucketSpecAnalyticsFilterAndTags;
|
|
1241
|
+
/**
|
|
1242
|
+
* Converts an object of type 'BucketSpecAnalyticsStorageClassAnalysisDataExportDestination' to JSON representation.
|
|
1243
|
+
*/
|
|
1244
|
+
/* eslint-disable max-len, quote-props */
|
|
1245
|
+
function toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestination(obj) {
|
|
1246
|
+
if (obj === undefined) {
|
|
1247
|
+
return undefined;
|
|
1248
|
+
}
|
|
1249
|
+
const result = {
|
|
1250
|
+
's3BucketDestination': toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestinationS3BucketDestination(obj.s3BucketDestination),
|
|
1251
|
+
};
|
|
1252
|
+
// filter undefined values
|
|
1253
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1254
|
+
}
|
|
1255
|
+
exports.toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestination = toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestination;
|
|
1256
|
+
/**
|
|
1257
|
+
* Converts an object of type 'BucketSpecIntelligentTieringFilterAndTags' to JSON representation.
|
|
1258
|
+
*/
|
|
1259
|
+
/* eslint-disable max-len, quote-props */
|
|
1260
|
+
function toJson_BucketSpecIntelligentTieringFilterAndTags(obj) {
|
|
1261
|
+
if (obj === undefined) {
|
|
1262
|
+
return undefined;
|
|
1263
|
+
}
|
|
1264
|
+
const result = {
|
|
1265
|
+
'key': obj.key,
|
|
1266
|
+
'value': obj.value,
|
|
1267
|
+
};
|
|
1268
|
+
// filter undefined values
|
|
1269
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1270
|
+
}
|
|
1271
|
+
exports.toJson_BucketSpecIntelligentTieringFilterAndTags = toJson_BucketSpecIntelligentTieringFilterAndTags;
|
|
1272
|
+
/**
|
|
1273
|
+
* Converts an object of type 'BucketSpecInventoryDestinationS3BucketDestinationEncryption' to JSON representation.
|
|
1274
|
+
*/
|
|
1275
|
+
/* eslint-disable max-len, quote-props */
|
|
1276
|
+
function toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryption(obj) {
|
|
1277
|
+
if (obj === undefined) {
|
|
1278
|
+
return undefined;
|
|
1279
|
+
}
|
|
1280
|
+
const result = {
|
|
1281
|
+
'sseKMS': toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryptionSseKms(obj.sseKms),
|
|
1282
|
+
};
|
|
1283
|
+
// filter undefined values
|
|
1284
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1285
|
+
}
|
|
1286
|
+
exports.toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryption = toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryption;
|
|
1287
|
+
/**
|
|
1288
|
+
* Converts an object of type 'BucketSpecLifecycleRulesFilterAnd' to JSON representation.
|
|
1289
|
+
*/
|
|
1290
|
+
/* eslint-disable max-len, quote-props */
|
|
1291
|
+
function toJson_BucketSpecLifecycleRulesFilterAnd(obj) {
|
|
1292
|
+
var _a;
|
|
1293
|
+
if (obj === undefined) {
|
|
1294
|
+
return undefined;
|
|
1295
|
+
}
|
|
1296
|
+
const result = {
|
|
1297
|
+
'prefix': obj.prefix,
|
|
1298
|
+
'tags': (_a = obj.tags) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecLifecycleRulesFilterAndTags(y)),
|
|
1299
|
+
};
|
|
1300
|
+
// filter undefined values
|
|
1301
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1302
|
+
}
|
|
1303
|
+
exports.toJson_BucketSpecLifecycleRulesFilterAnd = toJson_BucketSpecLifecycleRulesFilterAnd;
|
|
1304
|
+
/**
|
|
1305
|
+
* Converts an object of type 'BucketSpecLifecycleRulesFilterTag' to JSON representation.
|
|
1306
|
+
*/
|
|
1307
|
+
/* eslint-disable max-len, quote-props */
|
|
1308
|
+
function toJson_BucketSpecLifecycleRulesFilterTag(obj) {
|
|
1309
|
+
if (obj === undefined) {
|
|
1310
|
+
return undefined;
|
|
1311
|
+
}
|
|
1312
|
+
const result = {
|
|
1313
|
+
'key': obj.key,
|
|
1314
|
+
'value': obj.value,
|
|
1315
|
+
};
|
|
1316
|
+
// filter undefined values
|
|
1317
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1318
|
+
}
|
|
1319
|
+
exports.toJson_BucketSpecLifecycleRulesFilterTag = toJson_BucketSpecLifecycleRulesFilterTag;
|
|
1320
|
+
/**
|
|
1321
|
+
* Converts an object of type 'BucketSpecLoggingLoggingEnabledTargetGrantsGrantee' to JSON representation.
|
|
1322
|
+
*/
|
|
1323
|
+
/* eslint-disable max-len, quote-props */
|
|
1324
|
+
function toJson_BucketSpecLoggingLoggingEnabledTargetGrantsGrantee(obj) {
|
|
1325
|
+
if (obj === undefined) {
|
|
1326
|
+
return undefined;
|
|
1327
|
+
}
|
|
1328
|
+
const result = {
|
|
1329
|
+
'displayName': obj.displayName,
|
|
1330
|
+
'emailAddress': obj.emailAddress,
|
|
1331
|
+
'id': obj.id,
|
|
1332
|
+
'type_': obj.type,
|
|
1333
|
+
'uRI': obj.uRi,
|
|
1334
|
+
};
|
|
1335
|
+
// filter undefined values
|
|
1336
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1337
|
+
}
|
|
1338
|
+
exports.toJson_BucketSpecLoggingLoggingEnabledTargetGrantsGrantee = toJson_BucketSpecLoggingLoggingEnabledTargetGrantsGrantee;
|
|
1339
|
+
/**
|
|
1340
|
+
* Converts an object of type 'BucketSpecMetricsFilterAndTags' to JSON representation.
|
|
1341
|
+
*/
|
|
1342
|
+
/* eslint-disable max-len, quote-props */
|
|
1343
|
+
function toJson_BucketSpecMetricsFilterAndTags(obj) {
|
|
1344
|
+
if (obj === undefined) {
|
|
1345
|
+
return undefined;
|
|
1346
|
+
}
|
|
1347
|
+
const result = {
|
|
1348
|
+
'key': obj.key,
|
|
1349
|
+
'value': obj.value,
|
|
1350
|
+
};
|
|
1351
|
+
// filter undefined values
|
|
1352
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1353
|
+
}
|
|
1354
|
+
exports.toJson_BucketSpecMetricsFilterAndTags = toJson_BucketSpecMetricsFilterAndTags;
|
|
1355
|
+
/**
|
|
1356
|
+
* Converts an object of type 'BucketSpecNotificationLambdaFunctionConfigurationsFilterKey' to JSON representation.
|
|
1357
|
+
*/
|
|
1358
|
+
/* eslint-disable max-len, quote-props */
|
|
1359
|
+
function toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKey(obj) {
|
|
1360
|
+
var _a;
|
|
1361
|
+
if (obj === undefined) {
|
|
1362
|
+
return undefined;
|
|
1363
|
+
}
|
|
1364
|
+
const result = {
|
|
1365
|
+
'filterRules': (_a = obj.filterRules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKeyFilterRules(y)),
|
|
1366
|
+
};
|
|
1367
|
+
// filter undefined values
|
|
1368
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1369
|
+
}
|
|
1370
|
+
exports.toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKey = toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKey;
|
|
1371
|
+
/**
|
|
1372
|
+
* Converts an object of type 'BucketSpecNotificationQueueConfigurationsFilterKey' to JSON representation.
|
|
1373
|
+
*/
|
|
1374
|
+
/* eslint-disable max-len, quote-props */
|
|
1375
|
+
function toJson_BucketSpecNotificationQueueConfigurationsFilterKey(obj) {
|
|
1376
|
+
var _a;
|
|
1377
|
+
if (obj === undefined) {
|
|
1378
|
+
return undefined;
|
|
1379
|
+
}
|
|
1380
|
+
const result = {
|
|
1381
|
+
'filterRules': (_a = obj.filterRules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecNotificationQueueConfigurationsFilterKeyFilterRules(y)),
|
|
1382
|
+
};
|
|
1383
|
+
// filter undefined values
|
|
1384
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1385
|
+
}
|
|
1386
|
+
exports.toJson_BucketSpecNotificationQueueConfigurationsFilterKey = toJson_BucketSpecNotificationQueueConfigurationsFilterKey;
|
|
1387
|
+
/**
|
|
1388
|
+
* Converts an object of type 'BucketSpecNotificationTopicConfigurationsFilterKey' to JSON representation.
|
|
1389
|
+
*/
|
|
1390
|
+
/* eslint-disable max-len, quote-props */
|
|
1391
|
+
function toJson_BucketSpecNotificationTopicConfigurationsFilterKey(obj) {
|
|
1392
|
+
var _a;
|
|
1393
|
+
if (obj === undefined) {
|
|
1394
|
+
return undefined;
|
|
1395
|
+
}
|
|
1396
|
+
const result = {
|
|
1397
|
+
'filterRules': (_a = obj.filterRules) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecNotificationTopicConfigurationsFilterKeyFilterRules(y)),
|
|
1398
|
+
};
|
|
1399
|
+
// filter undefined values
|
|
1400
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1401
|
+
}
|
|
1402
|
+
exports.toJson_BucketSpecNotificationTopicConfigurationsFilterKey = toJson_BucketSpecNotificationTopicConfigurationsFilterKey;
|
|
1403
|
+
/**
|
|
1404
|
+
* Converts an object of type 'BucketSpecReplicationRulesDestinationAccessControlTranslation' to JSON representation.
|
|
1405
|
+
*/
|
|
1406
|
+
/* eslint-disable max-len, quote-props */
|
|
1407
|
+
function toJson_BucketSpecReplicationRulesDestinationAccessControlTranslation(obj) {
|
|
1408
|
+
if (obj === undefined) {
|
|
1409
|
+
return undefined;
|
|
1410
|
+
}
|
|
1411
|
+
const result = {
|
|
1412
|
+
'owner': obj.owner,
|
|
1413
|
+
};
|
|
1414
|
+
// filter undefined values
|
|
1415
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1416
|
+
}
|
|
1417
|
+
exports.toJson_BucketSpecReplicationRulesDestinationAccessControlTranslation = toJson_BucketSpecReplicationRulesDestinationAccessControlTranslation;
|
|
1418
|
+
/**
|
|
1419
|
+
* Converts an object of type 'BucketSpecReplicationRulesDestinationEncryptionConfiguration' to JSON representation.
|
|
1420
|
+
*/
|
|
1421
|
+
/* eslint-disable max-len, quote-props */
|
|
1422
|
+
function toJson_BucketSpecReplicationRulesDestinationEncryptionConfiguration(obj) {
|
|
1423
|
+
if (obj === undefined) {
|
|
1424
|
+
return undefined;
|
|
1425
|
+
}
|
|
1426
|
+
const result = {
|
|
1427
|
+
'replicaKMSKeyID': obj.replicaKmsKeyId,
|
|
1428
|
+
};
|
|
1429
|
+
// filter undefined values
|
|
1430
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1431
|
+
}
|
|
1432
|
+
exports.toJson_BucketSpecReplicationRulesDestinationEncryptionConfiguration = toJson_BucketSpecReplicationRulesDestinationEncryptionConfiguration;
|
|
1433
|
+
/**
|
|
1434
|
+
* Converts an object of type 'BucketSpecReplicationRulesDestinationMetrics' to JSON representation.
|
|
1435
|
+
*/
|
|
1436
|
+
/* eslint-disable max-len, quote-props */
|
|
1437
|
+
function toJson_BucketSpecReplicationRulesDestinationMetrics(obj) {
|
|
1438
|
+
if (obj === undefined) {
|
|
1439
|
+
return undefined;
|
|
1440
|
+
}
|
|
1441
|
+
const result = {
|
|
1442
|
+
'eventThreshold': toJson_BucketSpecReplicationRulesDestinationMetricsEventThreshold(obj.eventThreshold),
|
|
1443
|
+
'status': obj.status,
|
|
1444
|
+
};
|
|
1445
|
+
// filter undefined values
|
|
1446
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1447
|
+
}
|
|
1448
|
+
exports.toJson_BucketSpecReplicationRulesDestinationMetrics = toJson_BucketSpecReplicationRulesDestinationMetrics;
|
|
1449
|
+
/**
|
|
1450
|
+
* Converts an object of type 'BucketSpecReplicationRulesDestinationReplicationTime' to JSON representation.
|
|
1451
|
+
*/
|
|
1452
|
+
/* eslint-disable max-len, quote-props */
|
|
1453
|
+
function toJson_BucketSpecReplicationRulesDestinationReplicationTime(obj) {
|
|
1454
|
+
if (obj === undefined) {
|
|
1455
|
+
return undefined;
|
|
1456
|
+
}
|
|
1457
|
+
const result = {
|
|
1458
|
+
'status': obj.status,
|
|
1459
|
+
'time': toJson_BucketSpecReplicationRulesDestinationReplicationTimeTime(obj.time),
|
|
1460
|
+
};
|
|
1461
|
+
// filter undefined values
|
|
1462
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1463
|
+
}
|
|
1464
|
+
exports.toJson_BucketSpecReplicationRulesDestinationReplicationTime = toJson_BucketSpecReplicationRulesDestinationReplicationTime;
|
|
1465
|
+
/**
|
|
1466
|
+
* Converts an object of type 'BucketSpecReplicationRulesFilterAnd' to JSON representation.
|
|
1467
|
+
*/
|
|
1468
|
+
/* eslint-disable max-len, quote-props */
|
|
1469
|
+
function toJson_BucketSpecReplicationRulesFilterAnd(obj) {
|
|
1470
|
+
var _a;
|
|
1471
|
+
if (obj === undefined) {
|
|
1472
|
+
return undefined;
|
|
1473
|
+
}
|
|
1474
|
+
const result = {
|
|
1475
|
+
'prefix': obj.prefix,
|
|
1476
|
+
'tags': (_a = obj.tags) === null || _a === void 0 ? void 0 : _a.map(y => toJson_BucketSpecReplicationRulesFilterAndTags(y)),
|
|
1477
|
+
};
|
|
1478
|
+
// filter undefined values
|
|
1479
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1480
|
+
}
|
|
1481
|
+
exports.toJson_BucketSpecReplicationRulesFilterAnd = toJson_BucketSpecReplicationRulesFilterAnd;
|
|
1482
|
+
/**
|
|
1483
|
+
* Converts an object of type 'BucketSpecReplicationRulesFilterTag' to JSON representation.
|
|
1484
|
+
*/
|
|
1485
|
+
/* eslint-disable max-len, quote-props */
|
|
1486
|
+
function toJson_BucketSpecReplicationRulesFilterTag(obj) {
|
|
1487
|
+
if (obj === undefined) {
|
|
1488
|
+
return undefined;
|
|
1489
|
+
}
|
|
1490
|
+
const result = {
|
|
1491
|
+
'key': obj.key,
|
|
1492
|
+
'value': obj.value,
|
|
1493
|
+
};
|
|
1494
|
+
// filter undefined values
|
|
1495
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1496
|
+
}
|
|
1497
|
+
exports.toJson_BucketSpecReplicationRulesFilterTag = toJson_BucketSpecReplicationRulesFilterTag;
|
|
1498
|
+
/**
|
|
1499
|
+
* Converts an object of type 'BucketSpecReplicationRulesSourceSelectionCriteriaReplicaModifications' to JSON representation.
|
|
1500
|
+
*/
|
|
1501
|
+
/* eslint-disable max-len, quote-props */
|
|
1502
|
+
function toJson_BucketSpecReplicationRulesSourceSelectionCriteriaReplicaModifications(obj) {
|
|
1503
|
+
if (obj === undefined) {
|
|
1504
|
+
return undefined;
|
|
1505
|
+
}
|
|
1506
|
+
const result = {
|
|
1507
|
+
'status': obj.status,
|
|
1508
|
+
};
|
|
1509
|
+
// filter undefined values
|
|
1510
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1511
|
+
}
|
|
1512
|
+
exports.toJson_BucketSpecReplicationRulesSourceSelectionCriteriaReplicaModifications = toJson_BucketSpecReplicationRulesSourceSelectionCriteriaReplicaModifications;
|
|
1513
|
+
/**
|
|
1514
|
+
* Converts an object of type 'BucketSpecReplicationRulesSourceSelectionCriteriaSseKmsEncryptedObjects' to JSON representation.
|
|
1515
|
+
*/
|
|
1516
|
+
/* eslint-disable max-len, quote-props */
|
|
1517
|
+
function toJson_BucketSpecReplicationRulesSourceSelectionCriteriaSseKmsEncryptedObjects(obj) {
|
|
1518
|
+
if (obj === undefined) {
|
|
1519
|
+
return undefined;
|
|
1520
|
+
}
|
|
1521
|
+
const result = {
|
|
1522
|
+
'status': obj.status,
|
|
1523
|
+
};
|
|
1524
|
+
// filter undefined values
|
|
1525
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1526
|
+
}
|
|
1527
|
+
exports.toJson_BucketSpecReplicationRulesSourceSelectionCriteriaSseKmsEncryptedObjects = toJson_BucketSpecReplicationRulesSourceSelectionCriteriaSseKmsEncryptedObjects;
|
|
1528
|
+
/**
|
|
1529
|
+
* Converts an object of type 'BucketSpecAnalyticsStorageClassAnalysisDataExportDestinationS3BucketDestination' to JSON representation.
|
|
1530
|
+
*/
|
|
1531
|
+
/* eslint-disable max-len, quote-props */
|
|
1532
|
+
function toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestinationS3BucketDestination(obj) {
|
|
1533
|
+
if (obj === undefined) {
|
|
1534
|
+
return undefined;
|
|
1535
|
+
}
|
|
1536
|
+
const result = {
|
|
1537
|
+
'bucket': obj.bucket,
|
|
1538
|
+
'bucketAccountID': obj.bucketAccountId,
|
|
1539
|
+
'format': obj.format,
|
|
1540
|
+
'prefix': obj.prefix,
|
|
1541
|
+
};
|
|
1542
|
+
// filter undefined values
|
|
1543
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1544
|
+
}
|
|
1545
|
+
exports.toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestinationS3BucketDestination = toJson_BucketSpecAnalyticsStorageClassAnalysisDataExportDestinationS3BucketDestination;
|
|
1546
|
+
/**
|
|
1547
|
+
* Converts an object of type 'BucketSpecInventoryDestinationS3BucketDestinationEncryptionSseKms' to JSON representation.
|
|
1548
|
+
*/
|
|
1549
|
+
/* eslint-disable max-len, quote-props */
|
|
1550
|
+
function toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryptionSseKms(obj) {
|
|
1551
|
+
if (obj === undefined) {
|
|
1552
|
+
return undefined;
|
|
1553
|
+
}
|
|
1554
|
+
const result = {
|
|
1555
|
+
'keyID': obj.keyId,
|
|
1556
|
+
};
|
|
1557
|
+
// filter undefined values
|
|
1558
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1559
|
+
}
|
|
1560
|
+
exports.toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryptionSseKms = toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryptionSseKms;
|
|
1561
|
+
/**
|
|
1562
|
+
* Converts an object of type 'BucketSpecLifecycleRulesFilterAndTags' to JSON representation.
|
|
1563
|
+
*/
|
|
1564
|
+
/* eslint-disable max-len, quote-props */
|
|
1565
|
+
function toJson_BucketSpecLifecycleRulesFilterAndTags(obj) {
|
|
1566
|
+
if (obj === undefined) {
|
|
1567
|
+
return undefined;
|
|
1568
|
+
}
|
|
1569
|
+
const result = {
|
|
1570
|
+
'key': obj.key,
|
|
1571
|
+
'value': obj.value,
|
|
1572
|
+
};
|
|
1573
|
+
// filter undefined values
|
|
1574
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1575
|
+
}
|
|
1576
|
+
exports.toJson_BucketSpecLifecycleRulesFilterAndTags = toJson_BucketSpecLifecycleRulesFilterAndTags;
|
|
1577
|
+
/**
|
|
1578
|
+
* Converts an object of type 'BucketSpecNotificationLambdaFunctionConfigurationsFilterKeyFilterRules' to JSON representation.
|
|
1579
|
+
*/
|
|
1580
|
+
/* eslint-disable max-len, quote-props */
|
|
1581
|
+
function toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKeyFilterRules(obj) {
|
|
1582
|
+
if (obj === undefined) {
|
|
1583
|
+
return undefined;
|
|
1584
|
+
}
|
|
1585
|
+
const result = {
|
|
1586
|
+
'name': obj.name,
|
|
1587
|
+
'value': obj.value,
|
|
1588
|
+
};
|
|
1589
|
+
// filter undefined values
|
|
1590
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1591
|
+
}
|
|
1592
|
+
exports.toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKeyFilterRules = toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKeyFilterRules;
|
|
1593
|
+
/**
|
|
1594
|
+
* Converts an object of type 'BucketSpecNotificationQueueConfigurationsFilterKeyFilterRules' to JSON representation.
|
|
1595
|
+
*/
|
|
1596
|
+
/* eslint-disable max-len, quote-props */
|
|
1597
|
+
function toJson_BucketSpecNotificationQueueConfigurationsFilterKeyFilterRules(obj) {
|
|
1598
|
+
if (obj === undefined) {
|
|
1599
|
+
return undefined;
|
|
1600
|
+
}
|
|
1601
|
+
const result = {
|
|
1602
|
+
'name': obj.name,
|
|
1603
|
+
'value': obj.value,
|
|
1604
|
+
};
|
|
1605
|
+
// filter undefined values
|
|
1606
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1607
|
+
}
|
|
1608
|
+
exports.toJson_BucketSpecNotificationQueueConfigurationsFilterKeyFilterRules = toJson_BucketSpecNotificationQueueConfigurationsFilterKeyFilterRules;
|
|
1609
|
+
/**
|
|
1610
|
+
* Converts an object of type 'BucketSpecNotificationTopicConfigurationsFilterKeyFilterRules' to JSON representation.
|
|
1611
|
+
*/
|
|
1612
|
+
/* eslint-disable max-len, quote-props */
|
|
1613
|
+
function toJson_BucketSpecNotificationTopicConfigurationsFilterKeyFilterRules(obj) {
|
|
1614
|
+
if (obj === undefined) {
|
|
1615
|
+
return undefined;
|
|
1616
|
+
}
|
|
1617
|
+
const result = {
|
|
1618
|
+
'name': obj.name,
|
|
1619
|
+
'value': obj.value,
|
|
1620
|
+
};
|
|
1621
|
+
// filter undefined values
|
|
1622
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1623
|
+
}
|
|
1624
|
+
exports.toJson_BucketSpecNotificationTopicConfigurationsFilterKeyFilterRules = toJson_BucketSpecNotificationTopicConfigurationsFilterKeyFilterRules;
|
|
1625
|
+
/**
|
|
1626
|
+
* Converts an object of type 'BucketSpecReplicationRulesDestinationMetricsEventThreshold' to JSON representation.
|
|
1627
|
+
*/
|
|
1628
|
+
/* eslint-disable max-len, quote-props */
|
|
1629
|
+
function toJson_BucketSpecReplicationRulesDestinationMetricsEventThreshold(obj) {
|
|
1630
|
+
if (obj === undefined) {
|
|
1631
|
+
return undefined;
|
|
1632
|
+
}
|
|
1633
|
+
const result = {
|
|
1634
|
+
'minutes': obj.minutes,
|
|
1635
|
+
};
|
|
1636
|
+
// filter undefined values
|
|
1637
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1638
|
+
}
|
|
1639
|
+
exports.toJson_BucketSpecReplicationRulesDestinationMetricsEventThreshold = toJson_BucketSpecReplicationRulesDestinationMetricsEventThreshold;
|
|
1640
|
+
/**
|
|
1641
|
+
* Converts an object of type 'BucketSpecReplicationRulesDestinationReplicationTimeTime' to JSON representation.
|
|
1642
|
+
*/
|
|
1643
|
+
/* eslint-disable max-len, quote-props */
|
|
1644
|
+
function toJson_BucketSpecReplicationRulesDestinationReplicationTimeTime(obj) {
|
|
1645
|
+
if (obj === undefined) {
|
|
1646
|
+
return undefined;
|
|
1647
|
+
}
|
|
1648
|
+
const result = {
|
|
1649
|
+
'minutes': obj.minutes,
|
|
1650
|
+
};
|
|
1651
|
+
// filter undefined values
|
|
1652
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1653
|
+
}
|
|
1654
|
+
exports.toJson_BucketSpecReplicationRulesDestinationReplicationTimeTime = toJson_BucketSpecReplicationRulesDestinationReplicationTimeTime;
|
|
1655
|
+
/**
|
|
1656
|
+
* Converts an object of type 'BucketSpecReplicationRulesFilterAndTags' to JSON representation.
|
|
1657
|
+
*/
|
|
1658
|
+
/* eslint-disable max-len, quote-props */
|
|
1659
|
+
function toJson_BucketSpecReplicationRulesFilterAndTags(obj) {
|
|
1660
|
+
if (obj === undefined) {
|
|
1661
|
+
return undefined;
|
|
1662
|
+
}
|
|
1663
|
+
const result = {
|
|
1664
|
+
'key': obj.key,
|
|
1665
|
+
'value': obj.value,
|
|
1666
|
+
};
|
|
1667
|
+
// filter undefined values
|
|
1668
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1669
|
+
}
|
|
1670
|
+
exports.toJson_BucketSpecReplicationRulesFilterAndTags = toJson_BucketSpecReplicationRulesFilterAndTags;
|
|
1671
|
+
/* eslint-enable max-len, quote-props */
|
|
1672
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczNidWNrZXRzLXMzLnNlcnZpY2VzLms4cy5hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wb3J0cy9zM2J1Y2tldHMtczMuc2VydmljZXMuazhzLmF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQkFBcUI7QUFDckIsaUNBQXVFO0FBSXZFOzs7O0dBSUc7QUFDSCxNQUFhLE1BQU8sU0FBUSxpQkFBUztJQXVCbkM7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFxQixFQUFFO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxNQUFNLENBQUMsR0FBRztZQUNiLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUF6QkQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFxQixFQUFFO1FBQzVDLE9BQU87WUFDTCxHQUFHLE1BQU0sQ0FBQyxHQUFHO1lBQ2IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFlRDs7T0FFRztJQUNJLE1BQU07UUFDWCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEMsT0FBTztZQUNMLEdBQUcsTUFBTSxDQUFDLEdBQUc7WUFDYixHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztTQUNoQyxDQUFDO0lBQ0osQ0FBQzs7QUE5Q0gsd0JBK0NDO0FBOUNDOztHQUVHO0FBQ29CLFVBQUcsR0FBcUI7SUFDN0MsVUFBVSxFQUFFLDhCQUE4QjtJQUMxQyxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7QUErREo7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0Isa0JBQWtCLENBQUMsR0FBNEI7SUFDN0QsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7S0FBRTtJQUM1QyxNQUFN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QUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBUkQsd0dBUUM7QUFDRCx3Q0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmF0ZWQgYnkgY2RrOHNcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBpT2JqZWN0TWV0YWRhdGEsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIEJ1Y2tldCBpcyB0aGUgU2NoZW1hIGZvciB0aGUgQnVja2V0cyBBUElcbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFxuICovXG5leHBvcnQgY2xhc3MgQnVja2V0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiQnVja2V0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzMy5zZXJ2aWNlcy5rOHMuYXdzL3YxYWxwaGExJyxcbiAgICBraW5kOiAnQnVja2V0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiQnVja2V0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEJ1Y2tldFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5CdWNrZXQuR1ZLLFxuICAgICAgLi4udG9Kc29uX0J1Y2tldFByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkJ1Y2tldFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVja2V0UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uQnVja2V0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5CdWNrZXQuR1ZLLFxuICAgICAgLi4udG9Kc29uX0J1Y2tldFByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQnVja2V0IGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBCdWNrZXRzIEFQSVxuICpcbiAqIEBzY2hlbWEgQnVja2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0UHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEJ1Y2tldFNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBCdWNrZXQuXG4gICAqIEluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9uLCBhIEJ1Y2tldCBpcyBhIHJlc291cmNlLiBBbiBBbWF6b24gUzMgYnVja2V0IG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLCBhbmQgdGhlIG5hbWVzcGFjZSBpcyBzaGFyZWQgYnkgYWxsIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBCdWNrZXRTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRQcm9wcyhvYmo6IEJ1Y2tldFByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fQnVja2V0U3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQnVja2V0U3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIEJ1Y2tldC5cbiAqIEluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9uLCBhIEJ1Y2tldCBpcyBhIHJlc291cmNlLiBBbiBBbWF6b24gUzMgYnVja2V0IG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLCBhbmQgdGhlIG5hbWVzcGFjZSBpcyBzaGFyZWQgYnkgYWxsIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlYyB7XG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHRyYW5zZmVyIGFjY2VsZXJhdGlvbiBzdGF0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2FjY2VsZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGFjY2VsZXJhdGU/OiBCdWNrZXRTcGVjQWNjZWxlcmF0ZTtcblxuICAvKipcbiAgICogVGhlIGNhbm5lZCBBQ0wgdG8gYXBwbHkgdG8gdGhlIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2FjbFxuICAgKi9cbiAgcmVhZG9ubHkgYWNsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjYW5hbHl0aWNzXG4gICAqL1xuICByZWFkb25seSBhbmFseXRpY3M/OiBCdWNrZXRTcGVjQW5hbHl0aWNzW107XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRW5hYmxpbmcgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2NvcnMuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjY29yc1xuICAgKi9cbiAgcmVhZG9ubHkgY29ycz86IEJ1Y2tldFNwZWNDb3JzO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24/OiBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlLWVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2VuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBCdWNrZXRTcGVjRW5jcnlwdGlvbjtcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdGhlIHJlYWQsIHdyaXRlLCByZWFkIEFDUCwgYW5kIHdyaXRlIEFDUCBwZXJtaXNzaW9ucyBvbiB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRGdWxsQ29udHJvbFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRGdWxsQ29udHJvbD86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gbGlzdCB0aGUgb2JqZWN0cyBpbiB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRSZWFkXG4gICAqL1xuICByZWFkb25seSBncmFudFJlYWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBncmFudGVlIHRvIHJlYWQgdGhlIGJ1Y2tldCBBQ0wuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNncmFudFJlYWRBQ1BcbiAgICovXG4gIHJlYWRvbmx5IGdyYW50UmVhZEFjcD86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gY3JlYXRlIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuXG4gICAqIEZvciB0aGUgYnVja2V0IGFuZCBvYmplY3Qgb3duZXJzIG9mIGV4aXN0aW5nIG9iamVjdHMsIGFsc28gYWxsb3dzIGRlbGV0aW9ucyBhbmQgb3ZlcndyaXRlcyBvZiB0aG9zZSBvYmplY3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRXcml0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRXcml0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gd3JpdGUgdGhlIEFDTCBmb3IgdGhlIGFwcGxpY2FibGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRXcml0ZUFDUFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRXcml0ZUFjcD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2ludGVsbGlnZW50VGllcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgaW50ZWxsaWdlbnRUaWVyaW5nPzogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjaW52ZW50b3J5XG4gICAqL1xuICByZWFkb25seSBpbnZlbnRvcnk/OiBCdWNrZXRTcGVjSW52ZW50b3J5W107XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgbGlmZWN5Y2xlIHJ1bGVzLiBZb3UgY2FuIGFkZCBhcyBtYW55IGFzIDEsMDAwIHJ1bGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbGlmZWN5Y2xlXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGU/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIGxvZ2dpbmcgc3RhdHVzIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbG9nZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZz86IEJ1Y2tldFNwZWNMb2dnaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljcz86IEJ1Y2tldFNwZWNNZXRyaWNzW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBidWNrZXQgdG8gY3JlYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1Y2tldC4gSWYgdGhpcyBlbGVtZW50IGlzIGVtcHR5LCBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb2ZmIGZvciB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbm90aWZpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb24/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCBTMyBPYmplY3QgTG9jayB0byBiZSBlbmFibGVkIGZvciB0aGUgbmV3IGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI29iamVjdExvY2tFbmFibGVkRm9yQnVja2V0XG4gICAqL1xuICByZWFkb25seSBvYmplY3RMb2NrRW5hYmxlZEZvckJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBPd25lcnNoaXBDb250cm9scyAoQnVja2V0T3duZXJQcmVmZXJyZWQgb3IgT2JqZWN0V3JpdGVyKSB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoaXMgQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI293bmVyc2hpcENvbnRyb2xzXG4gICAqL1xuICByZWFkb25seSBvd25lcnNoaXBDb250cm9scz86IEJ1Y2tldFNwZWNPd25lcnNoaXBDb250cm9scztcblxuICAvKipcbiAgICogVGhlIGJ1Y2tldCBwb2xpY3kgYXMgYSBKU09OIGRvY3VtZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjcG9saWN5XG4gICAqL1xuICByZWFkb25seSBwb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBQdWJsaWNBY2Nlc3NCbG9jayBjb25maWd1cmF0aW9uIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhpcyBBbWF6b24gUzMgYnVja2V0LiBZb3UgY2FuIGVuYWJsZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIGFueSBjb21iaW5hdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlbiBBbWF6b24gUzMgY29uc2lkZXJzIGEgYnVja2V0IG9yIG9iamVjdCBwdWJsaWMsIHNlZSBUaGUgTWVhbmluZyBvZiBcIlB1YmxpY1wiIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9hY2Nlc3MtY29udHJvbC1ibG9jay1wdWJsaWMtYWNjZXNzLmh0bWwjYWNjZXNzLWNvbnRyb2wtYmxvY2stcHVibGljLWFjY2Vzcy1wb2xpY3ktc3RhdHVzKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNwdWJsaWNBY2Nlc3NCbG9ja1xuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWNjZXNzQmxvY2s/OiBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2s7XG5cbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIGZvciByZXBsaWNhdGlvbiBydWxlcy4gWW91IGNhbiBhZGQgdXAgdG8gMSwwMDAgcnVsZXMuIFRoZSBtYXhpbXVtIHNpemUgb2YgYSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGlzIDIgTUIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNyZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb247XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgUGF5ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNyZXF1ZXN0UGF5bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFBheW1lbnQ/OiBCdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQ7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgdGhlIFRhZ1NldCBhbmQgVGFnIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjdGFnZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGFnZ2luZz86IEJ1Y2tldFNwZWNUYWdnaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHZlcnNpb25pbmcgc3RhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyN2ZXJzaW9uaW5nXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uaW5nPzogQnVja2V0U3BlY1ZlcnNpb25pbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyN3ZWJzaXRlXG4gICAqL1xuICByZWFkb25seSB3ZWJzaXRlPzogQnVja2V0U3BlY1dlYnNpdGU7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlYyhvYmo6IEJ1Y2tldFNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY2NlbGVyYXRlJzogdG9Kc29uX0J1Y2tldFNwZWNBY2NlbGVyYXRlKG9iai5hY2NlbGVyYXRlKSxcbiAgICAnYWNsJzogb2JqLmFjbCxcbiAgICAnYW5hbHl0aWNzJzogb2JqLmFuYWx5dGljcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3MoeSkpLFxuICAgICdjb3JzJzogdG9Kc29uX0J1Y2tldFNwZWNDb3JzKG9iai5jb3JzKSxcbiAgICAnY3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbihvYmouY3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiksXG4gICAgJ2VuY3J5cHRpb24nOiB0b0pzb25fQnVja2V0U3BlY0VuY3J5cHRpb24ob2JqLmVuY3J5cHRpb24pLFxuICAgICdncmFudEZ1bGxDb250cm9sJzogb2JqLmdyYW50RnVsbENvbnRyb2wsXG4gICAgJ2dyYW50UmVhZCc6IG9iai5ncmFudFJlYWQsXG4gICAgJ2dyYW50UmVhZEFDUCc6IG9iai5ncmFudFJlYWRBY3AsXG4gICAgJ2dyYW50V3JpdGUnOiBvYmouZ3JhbnRXcml0ZSxcbiAgICAnZ3JhbnRXcml0ZUFDUCc6IG9iai5ncmFudFdyaXRlQWNwLFxuICAgICdpbnRlbGxpZ2VudFRpZXJpbmcnOiBvYmouaW50ZWxsaWdlbnRUaWVyaW5nPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyh5KSksXG4gICAgJ2ludmVudG9yeSc6IG9iai5pbnZlbnRvcnk/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5KHkpKSxcbiAgICAnbGlmZWN5Y2xlJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGUob2JqLmxpZmVjeWNsZSksXG4gICAgJ2xvZ2dpbmcnOiB0b0pzb25fQnVja2V0U3BlY0xvZ2dpbmcob2JqLmxvZ2dpbmcpLFxuICAgICdtZXRyaWNzJzogb2JqLm1ldHJpY3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljcyh5KSksXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbm90aWZpY2F0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb24ob2JqLm5vdGlmaWNhdGlvbiksXG4gICAgJ29iamVjdExvY2tFbmFibGVkRm9yQnVja2V0Jzogb2JqLm9iamVjdExvY2tFbmFibGVkRm9yQnVja2V0LFxuICAgICdvd25lcnNoaXBDb250cm9scyc6IHRvSnNvbl9CdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMob2JqLm93bmVyc2hpcENvbnRyb2xzKSxcbiAgICAncG9saWN5Jzogb2JqLnBvbGljeSxcbiAgICAncHVibGljQWNjZXNzQmxvY2snOiB0b0pzb25fQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrKG9iai5wdWJsaWNBY2Nlc3NCbG9jayksXG4gICAgJ3JlcGxpY2F0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvbihvYmoucmVwbGljYXRpb24pLFxuICAgICdyZXF1ZXN0UGF5bWVudCc6IHRvSnNvbl9CdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQob2JqLnJlcXVlc3RQYXltZW50KSxcbiAgICAndGFnZ2luZyc6IHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZyhvYmoudGFnZ2luZyksXG4gICAgJ3ZlcnNpb25pbmcnOiB0b0pzb25fQnVja2V0U3BlY1ZlcnNpb25pbmcob2JqLnZlcnNpb25pbmcpLFxuICAgICd3ZWJzaXRlJzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlKG9iai53ZWJzaXRlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHRyYW5zZmVyIGFjY2VsZXJhdGlvbiBzdGF0ZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBY2NlbGVyYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FjY2VsZXJhdGUge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQWNjZWxlcmF0ZSNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQWNjZWxlcmF0ZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FjY2VsZXJhdGUob2JqOiBCdWNrZXRTcGVjQWNjZWxlcmF0ZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbnkgYW5hbHlzZXMgZm9yIHRoZSBhbmFseXRpY3MgZmlsdGVyIG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsdGVyIHVzZWQgdG8gZGVzY3JpYmUgYSBzZXQgb2Ygb2JqZWN0cyBmb3IgYW5hbHlzZXMuIEEgZmlsdGVyIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBwcmVmaXgsIG9uZSB0YWcsIG9yIG9uZSBjb25qdW5jdGlvbiAoQW5hbHl0aWNzQW5kT3BlcmF0b3IpLiBJZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQsIGFsbCBvYmplY3RzIHdpbGwgYmUgY29uc2lkZXJlZCBpbiBhbnkgYW5hbHlzaXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljcyNmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcj86IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljcyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBkYXRhIHJlbGF0ZWQgdG8gYWNjZXNzIHBhdHRlcm5zIHRvIGJlIGNvbGxlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gYW5hbHl6ZSB0aGUgdHJhZGVvZmZzIGJldHdlZW4gZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3NlcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzI3N0b3JhZ2VDbGFzc0FuYWx5c2lzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3NBbmFseXNpcz86IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzKG9iajogQnVja2V0U3BlY0FuYWx5dGljcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnc3RvcmFnZUNsYXNzQW5hbHlzaXMnOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzKG9iai5zdG9yYWdlQ2xhc3NBbmFseXNpcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBjcm9zcy1vcmlnaW4gYWNjZXNzIGNvbmZpZ3VyYXRpb24gZm9yIG9iamVjdHMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBFbmFibGluZyBDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvY29ycy5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQ29yc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNDb3JzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnMjY29yc1J1bGVzXG4gICAqL1xuICByZWFkb25seSBjb3JzUnVsZXM/OiBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNDb3JzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQ29ycyhvYmo6IEJ1Y2tldFNwZWNDb3JzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY29yc1J1bGVzJzogb2JqLmNvcnNSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNDb3JzQ29yc1J1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNDcmVhdGVCdWNrZXRDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiNsb2NhdGlvbkNvbnN0cmFpbnRcbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uQ29uc3RyYWludD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24ob2JqOiBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2xvY2F0aW9uQ29uc3RyYWludCc6IG9iai5sb2NhdGlvbkNvbnN0cmFpbnQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlLWVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0VuY3J5cHRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjRW5jcnlwdGlvbiNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uKG9iajogQnVja2V0U3BlY0VuY3J5cHRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBjb25maWd1cmF0aW9uIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICogRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIHN0b3JhZ2UgY2xhc3MsIHNlZSBTdG9yYWdlIGNsYXNzIGZvciBhdXRvbWF0aWNhbGx5IG9wdGltaXppbmcgZnJlcXVlbnRseSBhbmQgaW5mcmVxdWVudGx5IGFjY2Vzc2VkIG9iamVjdHMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3N0b3JhZ2UtY2xhc3MtaW50cm8uaHRtbCNzYy1keW5hbWljLWRhdGEtYWNjZXNzKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nIHtcbiAgLyoqXG4gICAqIFRoZSBGaWx0ZXIgaXMgdXNlZCB0byBpZGVudGlmeSBvYmplY3RzIHRoYXQgdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgY29uZmlndXJhdGlvbiBhcHBsaWVzIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyN0aWVyaW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgdGllcmluZ3M/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nVGllcmluZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgICAndGllcmluZ3MnOiBvYmoudGllcmluZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nVGllcmluZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24gZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgR0VUIEJ1Y2tldCBpbnZlbnRvcnkgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRHRVRJbnZlbnRvcnlDb25maWcuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnkge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgY29uZmlndXJhdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5I2Rlc3RpbmF0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbj86IEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIGludmVudG9yeSBmaWx0ZXIuIFRoZSBpbnZlbnRvcnkgb25seSBpbmNsdWRlcyBvYmplY3RzIHRoYXQgbWVldCB0aGUgZmlsdGVyJ3MgY3JpdGVyaWEuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcj86IEJ1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNpbmNsdWRlZE9iamVjdFZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlZE9iamVjdFZlcnNpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnkjaXNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnkjb3B0aW9uYWxGaWVsZHNcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsRmllbGRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgc2NoZWR1bGUgZm9yIGdlbmVyYXRpbmcgaW52ZW50b3J5IHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNzY2hlZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBCdWNrZXRTcGVjSW52ZW50b3J5U2NoZWR1bGU7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0ludmVudG9yeScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeShvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb24ob2JqLmRlc3RpbmF0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXIob2JqLmZpbHRlciksXG4gICAgJ2lkJzogb2JqLmlkLFxuICAgICdpbmNsdWRlZE9iamVjdFZlcnNpb25zJzogb2JqLmluY2x1ZGVkT2JqZWN0VmVyc2lvbnMsXG4gICAgJ2lzRW5hYmxlZCc6IG9iai5pc0VuYWJsZWQsXG4gICAgJ29wdGlvbmFsRmllbGRzJzogb2JqLm9wdGlvbmFsRmllbGRzPy5tYXAoeSA9PiB5KSxcbiAgICAnc2NoZWR1bGUnOiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeVNjaGVkdWxlKG9iai5zY2hlZHVsZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBsaWZlY3ljbGUgcnVsZXMuIFlvdSBjYW4gYWRkIGFzIG1hbnkgYXMgMSwwMDAgcnVsZXMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGUjcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZShvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBsb2dnaW5nIHN0YXR1cyBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xvZ2dpbmcge1xuICAvKipcbiAgICogRGVzY3JpYmVzIHdoZXJlIGxvZ3MgYXJlIHN0b3JlZCBhbmQgdGhlIHByZWZpeCB0aGF0IEFtYXpvbiBTMyBhc3NpZ25zIHRvIGFsbCBsb2cgb2JqZWN0IGtleXMgZm9yIGEgYnVja2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBVVCBCdWNrZXQgbG9nZ2luZyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVGxvZ2dpbmcuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nI2xvZ2dpbmdFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nRW5hYmxlZD86IEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQ7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xvZ2dpbmcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nKG9iajogQnVja2V0U3BlY0xvZ2dpbmcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdsb2dnaW5nRW5hYmxlZCc6IHRvSnNvbl9CdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkKG9iai5sb2dnaW5nRW5hYmxlZCksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ2xvdWRXYXRjaCByZXF1ZXN0IG1ldHJpY3MgKHNwZWNpZmllZCBieSB0aGUgbWV0cmljcyBjb25maWd1cmF0aW9uIElEKSBmcm9tIGFuIEFtYXpvbiBTMyBidWNrZXQuIElmIHlvdSdyZSB1cGRhdGluZyBhbiBleGlzdGluZyBtZXRyaWNzIGNvbmZpZ3VyYXRpb24sIG5vdGUgdGhhdCB0aGlzIGlzIGEgZnVsbCByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgbWV0cmljcyBjb25maWd1cmF0aW9uLiBJZiB5b3UgZG9uJ3QgaW5jbHVkZSB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8ga2VlcCwgdGhleSBhcmUgZXJhc2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFB1dEJ1Y2tldE1ldHJpY3NDb25maWd1cmF0aW9uIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUTWV0cmljQ29uZmlndXJhdGlvbi5odG1sKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3Mge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZpbHRlci4gVGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbiBvbmx5IGluY2x1ZGVzIG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS4gQSBmaWx0ZXIgbXVzdCBiZSBhIHByZWZpeCwgYW4gb2JqZWN0IHRhZywgYW4gYWNjZXNzIHBvaW50IEFSTiwgb3IgYSBjb25qdW5jdGlvbiAoTWV0cmljc0FuZE9wZXJhdG9yKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQdXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvbiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvQVBJX1B1dEJ1Y2tldE1ldHJpY3NDb25maWd1cmF0aW9uLmh0bWwpLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY01ldHJpY3NGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3MjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNNZXRyaWNzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljcyhvYmo6IEJ1Y2tldFNwZWNNZXRyaWNzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1Y2tldC4gSWYgdGhpcyBlbGVtZW50IGlzIGVtcHR5LCBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb2ZmIGZvciB0aGUgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uI2xhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb24jcXVldWVDb25maWd1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcXVldWVDb25maWd1cmF0aW9ucz86IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbiN0b3BpY0NvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSB0b3BpY0NvbmZpZ3VyYXRpb25zPzogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2xhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMnOiBvYmoubGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zKHkpKSxcbiAgICAncXVldWVDb25maWd1cmF0aW9ucyc6IG9iai5xdWV1ZUNvbmZpZ3VyYXRpb25zPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnMoeSkpLFxuICAgICd0b3BpY0NvbmZpZ3VyYXRpb25zJzogb2JqLnRvcGljQ29uZmlndXJhdGlvbnM/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9ucyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIE93bmVyc2hpcENvbnRyb2xzIChCdWNrZXRPd25lclByZWZlcnJlZCBvciBPYmplY3RXcml0ZXIpIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhpcyBBbWF6b24gUzMgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IEJ1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMob2JqOiBCdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgUHVibGljQWNjZXNzQmxvY2sgY29uZmlndXJhdGlvbiB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoaXMgQW1hem9uIFMzIGJ1Y2tldC4gWW91IGNhbiBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBhbnkgY29tYmluYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoZW4gQW1hem9uIFMzIGNvbnNpZGVycyBhIGJ1Y2tldCBvciBvYmplY3QgcHVibGljLCBzZWUgVGhlIE1lYW5pbmcgb2YgXCJQdWJsaWNcIiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvYWNjZXNzLWNvbnRyb2wtYmxvY2stcHVibGljLWFjY2Vzcy5odG1sI2FjY2Vzcy1jb250cm9sLWJsb2NrLXB1YmxpYy1hY2Nlc3MtcG9saWN5LXN0YXR1cykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrI2Jsb2NrUHVibGljQUNMc1xuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tQdWJsaWNBY0xzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2sjYmxvY2tQdWJsaWNQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrUHVibGljUG9saWN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2sjaWdub3JlUHVibGljQUNMc1xuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlUHVibGljQWNMcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrI3Jlc3RyaWN0UHVibGljQnVja2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzdHJpY3RQdWJsaWNCdWNrZXRzPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2snIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNQdWJsaWNBY2Nlc3NCbG9jayhvYmo6IEJ1Y2tldFNwZWNQdWJsaWNBY2Nlc3NCbG9jayB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Jsb2NrUHVibGljQUNMcyc6IG9iai5ibG9ja1B1YmxpY0FjTHMsXG4gICAgJ2Jsb2NrUHVibGljUG9saWN5Jzogb2JqLmJsb2NrUHVibGljUG9saWN5LFxuICAgICdpZ25vcmVQdWJsaWNBQ0xzJzogb2JqLmlnbm9yZVB1YmxpY0FjTHMsXG4gICAgJ3Jlc3RyaWN0UHVibGljQnVja2V0cyc6IG9iai5yZXN0cmljdFB1YmxpY0J1Y2tldHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgZm9yIHJlcGxpY2F0aW9uIHJ1bGVzLiBZb3UgY2FuIGFkZCB1cCB0byAxLDAwMCBydWxlcy4gVGhlIG1heGltdW0gc2l6ZSBvZiBhIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gaXMgMiBNQi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiNyb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncm9sZSc6IG9iai5yb2xlLFxuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIFBheWVyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50I3BheWVyXG4gICAqL1xuICByZWFkb25seSBwYXllcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXF1ZXN0UGF5bWVudChvYmo6IEJ1Y2tldFNwZWNSZXF1ZXN0UGF5bWVudCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3BheWVyJzogb2JqLnBheWVyLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIFRhZ1NldCBhbmQgVGFnIGVsZW1lbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjVGFnZ2luZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNUYWdnaW5nI3RhZ1NldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFnU2V0PzogQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXRbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjVGFnZ2luZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1RhZ2dpbmcob2JqOiBCdWNrZXRTcGVjVGFnZ2luZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RhZ1NldCc6IG9iai50YWdTZXQ/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldCh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBzZXR0aW5nIHRoZSB2ZXJzaW9uaW5nIHN0YXRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1ZlcnNpb25pbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjVmVyc2lvbmluZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNWZXJzaW9uaW5nI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNWZXJzaW9uaW5nJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjVmVyc2lvbmluZyhvYmo6IEJ1Y2tldFNwZWNWZXJzaW9uaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHRoZSByZXF1ZXN0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjZXJyb3JEb2N1bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JEb2N1bWVudD86IEJ1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudDtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgU3VmZml4IGVsZW1lbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjaW5kZXhEb2N1bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhEb2N1bWVudD86IEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSByZWRpcmVjdCBiZWhhdmlvciBvZiBhbGwgcmVxdWVzdHMgdG8gYSB3ZWJzaXRlIGVuZHBvaW50IG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjcmVkaXJlY3RBbGxSZXF1ZXN0c1RvXG4gICAqL1xuICByZWFkb25seSByZWRpcmVjdEFsbFJlcXVlc3RzVG8/OiBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjV2Vic2l0ZSNyb3V0aW5nUnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRpbmdSdWxlcz86IEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1dlYnNpdGUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlKG9iajogQnVja2V0U3BlY1dlYnNpdGUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlcnJvckRvY3VtZW50JzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudChvYmouZXJyb3JEb2N1bWVudCksXG4gICAgJ2luZGV4RG9jdW1lbnQnOiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVJbmRleERvY3VtZW50KG9iai5pbmRleERvY3VtZW50KSxcbiAgICAncmVkaXJlY3RBbGxSZXF1ZXN0c1RvJzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvKG9iai5yZWRpcmVjdEFsbFJlcXVlc3RzVG8pLFxuICAgICdyb3V0aW5nUnVsZXMnOiBvYmoucm91dGluZ1J1bGVzPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBmaWx0ZXIgdXNlZCB0byBkZXNjcmliZSBhIHNldCBvZiBvYmplY3RzIGZvciBhbmFseXNlcy4gQSBmaWx0ZXIgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHByZWZpeCwgb25lIHRhZywgb3Igb25lIGNvbmp1bmN0aW9uIChBbmFseXRpY3NBbmRPcGVyYXRvcikuIElmIG5vIGZpbHRlciBpcyBwcm92aWRlZCwgYWxsIG9iamVjdHMgd2lsbCBiZSBjb25zaWRlcmVkIGluIGFueSBhbmFseXNpcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyIHtcbiAgLyoqXG4gICAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcyBpbiBhbnkgY29tYmluYXRpb24sIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXIob2JqOiBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYW5kJzogdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBkYXRhIHJlbGF0ZWQgdG8gYWNjZXNzIHBhdHRlcm5zIHRvIGJlIGNvbGxlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gYW5hbHl6ZSB0aGUgdHJhZGVvZmZzIGJldHdlZW4gZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3NlcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyB7XG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIGRhdGEgcmVsYXRlZCB0byB0aGUgc3RvcmFnZSBjbGFzcyBhbmFseXNpcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBmb3IgZXhwb3J0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyNkYXRhRXhwb3J0XG4gICAqL1xuICByZWFkb25seSBkYXRhRXhwb3J0PzogQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydDtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2RhdGFFeHBvcnQnOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydChvYmouZGF0YUV4cG9ydCksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGEgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBydWxlIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnNDb3JzUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRIZWFkZXJzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkSGVhZGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRNZXRob2RzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRPcmlnaW5zXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkT3JpZ2lucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2V4cG9zZUhlYWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGV4cG9zZUhlYWRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnNDb3JzUnVsZXMjbWF4QWdlU2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4QWdlU2Vjb25kcz86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0NvcnNDb3JzUnVsZXMob2JqOiBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FsbG93ZWRIZWFkZXJzJzogb2JqLmFsbG93ZWRIZWFkZXJzPy5tYXAoeSA9PiB5KSxcbiAgICAnYWxsb3dlZE1ldGhvZHMnOiBvYmouYWxsb3dlZE1ldGhvZHM/Lm1hcCh5ID0+IHkpLFxuICAgICdhbGxvd2VkT3JpZ2lucyc6IG9iai5hbGxvd2VkT3JpZ2lucz8ubWFwKHkgPT4geSksXG4gICAgJ2V4cG9zZUhlYWRlcnMnOiBvYmouZXhwb3NlSGVhZGVycz8ubWFwKHkgPT4geSksXG4gICAgJ2lkJzogb2JqLmlkLFxuICAgICdtYXhBZ2VTZWNvbmRzJzogb2JqLm1heEFnZVNlY29uZHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzIHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHRvIGFwcGx5IHRvIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuIElmIGEgUFVUIE9iamVjdCByZXF1ZXN0IGRvZXNuJ3Qgc3BlY2lmeSBhbnkgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgdGhpcyBkZWZhdWx0IGVuY3J5cHRpb24gd2lsbCBiZSBhcHBsaWVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBVVCBCdWNrZXQgZW5jcnlwdGlvbiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVGVuY3J5cHRpb24uaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMjYXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdD86IEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMjYnVja2V0S2V5RW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0S2V5RW5hYmxlZD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlcyhvYmo6IEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0JzogdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KG9iai5hcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KSxcbiAgICAnYnVja2V0S2V5RW5hYmxlZCc6IG9iai5idWNrZXRLZXlFbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBGaWx0ZXIgaXMgdXNlZCB0byBpZGVudGlmeSBvYmplY3RzIHRoYXQgdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgY29uZmlndXJhdGlvbiBhcHBsaWVzIHRvLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIHNwZWNpZnlpbmcgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBmaWx0ZXJzLiBUaGUgZmlsdGVycyBkZXRlcm1pbmUgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIob2JqOiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYW5kJzogdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIHN0b3JhZ2UgY2xhc3MgaXMgZGVzaWduZWQgdG8gb3B0aW1pemUgc3RvcmFnZSBjb3N0cyBieSBhdXRvbWF0aWNhbGx5IG1vdmluZyBkYXRhIHRvIHRoZSBtb3N0IGNvc3QtZWZmZWN0aXZlIHN0b3JhZ2UgYWNjZXNzIHRpZXIsIHdpdGhvdXQgYWRkaXRpb25hbCBvcGVyYXRpb25hbCBvdmVyaGVhZC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyNhY2Nlc3NUaWVyXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NUaWVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyNkYXlzXG4gICAqL1xuICByZWFkb25seSBkYXlzPzogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1RpZXJpbmdzKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1RpZXJpbmdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWNjZXNzVGllcic6IG9iai5hY2Nlc3NUaWVyLFxuICAgICdkYXlzJzogb2JqLmRheXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgY29uZmlndXJhdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBDb250YWlucyB0aGUgYnVja2V0IG5hbWUsIGZpbGUgZm9ybWF0LCBidWNrZXQgb3duZXIgKG9wdGlvbmFsKSwgYW5kIHByZWZpeCAob3B0aW9uYWwpIHdoZXJlIGludmVudG9yeSByZXN1bHRzIGFyZSBwdWJsaXNoZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uI3MzQnVja2V0RGVzdGluYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzQnVja2V0RGVzdGluYXRpb24/OiBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnczNCdWNrZXREZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uKG9iai5zM0J1Y2tldERlc3RpbmF0aW9uKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgYW4gaW52ZW50b3J5IGZpbHRlci4gVGhlIGludmVudG9yeSBvbmx5IGluY2x1ZGVzIG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeUZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyKG9iajogQnVja2V0U3BlY0ludmVudG9yeUZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBzY2hlZHVsZSBmb3IgZ2VuZXJhdGluZyBpbnZlbnRvcnkgcmVzdWx0cy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSNmcmVxdWVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGZyZXF1ZW5jeT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW52ZW50b3J5U2NoZWR1bGUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZShvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZyZXF1ZW5jeSc6IG9iai5mcmVxdWVuY3ksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBsaWZlY3ljbGUgcnVsZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkYXlzIHNpbmNlIHRoZSBpbml0aWF0aW9uIG9mIGFuIGluY29tcGxldGUgbXVsdGlwYXJ0IHVwbG9hZCB0aGF0IEFtYXpvbiBTMyB3aWxsIHdhaXQgYmVmb3JlIHBlcm1hbmVudGx5IHJlbW92aW5nIGFsbCBwYXJ0cyBvZiB0aGUgdXBsb2FkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEFib3J0aW5nIEluY29tcGxldGUgTXVsdGlwYXJ0IFVwbG9hZHMgVXNpbmcgYSBCdWNrZXQgTGlmZWN5Y2xlIFBvbGljeSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbXB1b3ZlcnZpZXcuaHRtbCNtcHUtYWJvcnQtaW5jb21wbGV0ZS1tcHUtbGlmZWN5Y2xlLWNvbmZpZykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNhYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRcbiAgICovXG4gIHJlYWRvbmx5IGFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZD86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0Fib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZDtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNleHBpcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBleHBpcmF0aW9uPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRXhwaXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIEZpbHRlciBpcyB1c2VkIHRvIGlkZW50aWZ5IG9iamVjdHMgdGhhdCBhIExpZmVjeWNsZSBSdWxlIGFwcGxpZXMgdG8uIEEgRmlsdGVyIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBvZiBQcmVmaXgsIFRhZywgb3IgQW5kIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZW4gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgZXhwaXJlLiBVcG9uIGV4cGlyYXRpb24sIEFtYXpvbiBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucy4gWW91IHNldCB0aGlzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGFjdGlvbiBvbiBhIGJ1Y2tldCB0aGF0IGhhcyB2ZXJzaW9uaW5nIGVuYWJsZWQgKG9yIHN1c3BlbmRlZCkgdG8gcmVxdWVzdCB0aGF0IEFtYXpvbiBTMyBkZWxldGUgbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgYXQgYSBzcGVjaWZpYyBwZXJpb2QgaW4gdGhlIG9iamVjdCdzIGxpZmV0aW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbj86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjbm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyN0cmFuc2l0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdGlvbnM/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNUcmFuc2l0aW9uc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0Fib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZChvYmouYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkKSxcbiAgICAnZXhwaXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uKG9iai5leHBpcmF0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlcihvYmouZmlsdGVyKSxcbiAgICAnaWQnOiBvYmouaWQsXG4gICAgJ25vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb24ob2JqLm5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbiksXG4gICAgJ25vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMnOiBvYmoubm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMoeSkpLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICAgICd0cmFuc2l0aW9ucyc6IG9iai50cmFuc2l0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEZXNjcmliZXMgd2hlcmUgbG9ncyBhcmUgc3RvcmVkIGFuZCB0aGUgcHJlZml4IHRoYXQgQW1hem9uIFMzIGFzc2lnbnMgdG8gYWxsIGxvZyBvYmplY3Qga2V5cyBmb3IgYSBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUFVUIEJ1Y2tldCBsb2dnaW5nIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUbG9nZ2luZy5odG1sKSBpbiB0aGUgQW1hem9uIFMzIEFQSSBSZWZlcmVuY2UuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQjdGFyZ2V0QnVja2V0XG4gICAqL1xuICByZWFkb25seSB0YXJnZXRCdWNrZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZCN0YXJnZXRHcmFudHNcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyYW50cz86IEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkI3RhcmdldFByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UHJlZml4Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndGFyZ2V0QnVja2V0Jzogb2JqLnRhcmdldEJ1Y2tldCxcbiAgICAndGFyZ2V0R3JhbnRzJzogb2JqLnRhcmdldEdyYW50cz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMoeSkpLFxuICAgICd0YXJnZXRQcmVmaXgnOiBvYmoudGFyZ2V0UHJlZml4LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIG1ldHJpY3MgY29uZmlndXJhdGlvbiBmaWx0ZXIuIFRoZSBtZXRyaWNzIGNvbmZpZ3VyYXRpb24gb25seSBpbmNsdWRlcyBvYmplY3RzIHRoYXQgbWVldCB0aGUgZmlsdGVyJ3MgY3JpdGVyaWEuIEEgZmlsdGVyIG11c3QgYmUgYSBwcmVmaXgsIGFuIG9iamVjdCB0YWcsIGFuIGFjY2VzcyBwb2ludCBBUk4sIG9yIGEgY29uanVuY3Rpb24gKE1ldHJpY3NBbmRPcGVyYXRvcikuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUHV0QnVja2V0TWV0cmljc0NvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL0FQSV9QdXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvbi5odG1sKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciNhY2Nlc3NQb2ludEFSTlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzUG9pbnRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcywgYW5kIGFuIG9iamVjdCBtdXN0IG1hdGNoIGFsbCBvZiB0aGUgcHJlZGljYXRlcyBpbiBvcmRlciBmb3IgdGhlIGZpbHRlciB0byBhcHBseS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc1BvaW50QVJOJzogb2JqLmFjY2Vzc1BvaW50QXJuLFxuICAgICdhbmQnOiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyhvYmoudGFnKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgY29uZmlndXJhdGlvbiBmb3IgTGFtYmRhIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMjZXZlbnRzXG4gICAqL1xuICByZWFkb25seSBldmVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIG9iamVjdCBrZXkgbmFtZSBmaWx0ZXJpbmcgcnVsZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBrZXkgbmFtZSBmaWx0ZXJpbmcsIHNlZSBDb25maWd1cmluZyBFdmVudCBOb3RpZmljYXRpb25zIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGNvbmZpZ3VyYXRpb25zIGluIGEgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIElmIHlvdSBkb24ndCBwcm92aWRlIG9uZSwgQW1hem9uIFMzIHdpbGwgYXNzaWduIGFuIElELlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9ucyNsYW1iZGFGdW5jdGlvbkFSTlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb25Bcm4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdldmVudHMnOiBvYmouZXZlbnRzPy5tYXAoeSA9PiB5KSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnbGFtYmRhRnVuY3Rpb25BUk4nOiBvYmoubGFtYmRhRnVuY3Rpb25Bcm4sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBwdWJsaXNoaW5nIG1lc3NhZ2VzIHRvIGFuIEFtYXpvbiBTaW1wbGUgUXVldWUgU2VydmljZSAoQW1hem9uIFNRUykgcXVldWUgd2hlbiBBbWF6b24gUzMgZGV0ZWN0cyBzcGVjaWZpZWQgZXZlbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zI2V2ZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBvYmplY3Qga2V5IG5hbWUgZmlsdGVyaW5nIHJ1bGVzLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQga2V5IG5hbWUgZmlsdGVyaW5nLCBzZWUgQ29uZmlndXJpbmcgRXZlbnQgTm90aWZpY2F0aW9ucyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvTm90aWZpY2F0aW9uSG93VG8uaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBjb25maWd1cmF0aW9ucyBpbiBhIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uLiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBvbmUsIEFtYXpvbiBTMyB3aWxsIGFzc2lnbiBhbiBJRC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnMjcXVldWVBUk5cbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlQXJuPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyhvYmo6IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZXZlbnRzJzogb2JqLmV2ZW50cz8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcihvYmouZmlsdGVyKSxcbiAgICAnaWQnOiBvYmouaWQsXG4gICAgJ3F1ZXVlQVJOJzogb2JqLnF1ZXVlQXJuLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uIGZvciBwdWJsaWNhdGlvbiBvZiBtZXNzYWdlcyB0byBhbiBBbWF6b24gU2ltcGxlIE5vdGlmaWNhdGlvbiBTZXJ2aWNlIChBbWF6b24gU05TKSB0b3BpYyB3aGVuIEFtYXpvbiBTMyBkZXRlY3RzIHNwZWNpZmllZCBldmVudHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMjZXZlbnRzXG4gICAqL1xuICByZWFkb25seSBldmVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIG9iamVjdCBrZXkgbmFtZSBmaWx0ZXJpbmcgcnVsZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBrZXkgbmFtZSBmaWx0ZXJpbmcsIHNlZSBDb25maWd1cmluZyBFdmVudCBOb3RpZmljYXRpb25zIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGNvbmZpZ3VyYXRpb25zIGluIGEgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIElmIHlvdSBkb24ndCBwcm92aWRlIG9uZSwgQW1hem9uIFMzIHdpbGwgYXNzaWduIGFuIElELlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9ucyN0b3BpY0FSTlxuICAgKi9cbiAgcmVhZG9ubHkgdG9waWNBcm4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdldmVudHMnOiBvYmouZXZlbnRzPy5tYXAoeSA9PiB5KSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAndG9waWNBUk4nOiBvYmoudG9waWNBcm4sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIGNvbnRhaW5lciBlbGVtZW50IGZvciBhbiBvd25lcnNoaXAgY29udHJvbCBydWxlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHNSdWxlcyB7XG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIGVsZW1lbnQgZm9yIG9iamVjdCBvd25lcnNoaXAgZm9yIGEgYnVja2V0J3Mgb3duZXJzaGlwIGNvbnRyb2xzLlxuICAgKiBCdWNrZXRPd25lclByZWZlcnJlZCAtIE9iamVjdHMgdXBsb2FkZWQgdG8gdGhlIGJ1Y2tldCBjaGFuZ2Ugb3duZXJzaGlwIHRvIHRoZSBidWNrZXQgb3duZXIgaWYgdGhlIG9iamVjdHMgYXJlIHVwbG9hZGVkIHdpdGggdGhlIGJ1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wgY2FubmVkIEFDTC5cbiAgICogT2JqZWN0V3JpdGVyIC0gVGhlIHVwbG9hZGluZyBhY2NvdW50IHdpbGwgb3duIHRoZSBvYmplY3QgaWYgdGhlIG9iamVjdCBpcyB1cGxvYWRlZCB3aXRoIHRoZSBidWNrZXQtb3duZXItZnVsbC1jb250cm9sIGNhbm5lZCBBQ0wuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMjb2JqZWN0T3duZXJzaGlwXG4gICAqL1xuICByZWFkb25seSBvYmplY3RPd25lcnNoaXA/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzKG9iajogQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvYmplY3RPd25lcnNoaXAnOiBvYmoub2JqZWN0T3duZXJzaGlwLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB3aGljaCBBbWF6b24gUzMgb2JqZWN0cyB0byByZXBsaWNhdGUgYW5kIHdoZXJlIHRvIHN0b3JlIHRoZSByZXBsaWNhcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHJlcGxpY2F0ZXMgZGVsZXRlIG1hcmtlcnMuIElmIHlvdSBzcGVjaWZ5IGEgRmlsdGVyIGluIHlvdXIgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgeW91IG11c3QgYWxzbyBpbmNsdWRlIGEgRGVsZXRlTWFya2VyUmVwbGljYXRpb24gZWxlbWVudC4gSWYgeW91ciBGaWx0ZXIgaW5jbHVkZXMgYSBUYWcgZWxlbWVudCwgdGhlIERlbGV0ZU1hcmtlclJlcGxpY2F0aW9uIFN0YXR1cyBtdXN0IGJlIHNldCB0byBEaXNhYmxlZCwgYmVjYXVzZSBBbWF6b24gUzMgZG9lcyBub3Qgc3VwcG9ydCByZXBsaWNhdGluZyBkZWxldGUgbWFya2VycyBmb3IgdGFnLWJhc2VkIHJ1bGVzLiBGb3IgYW4gZXhhbXBsZSBjb25maWd1cmF0aW9uLCBzZWUgQmFzaWMgUnVsZSBDb25maWd1cmF0aW9uIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tY29uZmlnLW1pbi1ydWxlLWNvbmZpZykuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlbGV0ZSBtYXJrZXIgcmVwbGljYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2RlbGV0ZS1tYXJrZXItcmVwbGljYXRpb24uaHRtbCkuXG4gICAqIElmIHlvdSBhcmUgdXNpbmcgYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCBBbWF6b24gUzMgaGFuZGxlcyByZXBsaWNhdGlvbiBvZiBkZWxldGUgbWFya2VycyBkaWZmZXJlbnRseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tYmFja3dhcmQtY29tcGF0LWNvbnNpZGVyYXRpb25zKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNkZWxldGVNYXJrZXJSZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlTWFya2VyUmVwbGljYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0RlbGV0ZU1hcmtlclJlcGxpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCBhbmFseXNpcyBvciBjb25maWd1cmF0aW9uIHJlc3VsdHMgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQgYW5kIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNkZXN0aW5hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIHJlcGxpY2F0ZSBleGlzdGluZyBzb3VyY2UgYnVja2V0IG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVwbGljYXRpbmcgRXhpc3RpbmcgT2JqZWN0cyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvcmVwbGljYXRpb24td2hhdC1pcy1pc25vdC1yZXBsaWNhdGVkLmh0bWwjZXhpc3Rpbmctb2JqZWN0LXJlcGxpY2F0aW9uKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMjZXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbj86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbjtcblxuICAvKipcbiAgICogQSBmaWx0ZXIgdGhhdCBpZGVudGlmaWVzIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcmVwbGljYXRpb24gcnVsZSBhcHBsaWVzLiBBIEZpbHRlciBtdXN0IHNwZWNpZnkgZXhhY3RseSBvbmUgUHJlZml4LCBUYWcsIG9yIGFuIEFuZCBjaGlsZCBlbGVtZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3ByaW9yaXR5XG4gICAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBjb250YWluZXIgdGhhdCBkZXNjcmliZXMgYWRkaXRpb25hbCBmaWx0ZXJzIGZvciBpZGVudGlmeWluZyB0aGUgc291cmNlIG9iamVjdHMgdGhhdCB5b3Ugd2FudCB0byByZXBsaWNhdGUuIFlvdSBjYW4gY2hvb3NlIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSByZXBsaWNhdGlvbiBvZiB0aGVzZSBvYmplY3RzLiBDdXJyZW50bHksIEFtYXpvbiBTMyBzdXBwb3J0cyBvbmx5IHRoZSBmaWx0ZXIgdGhhdCB5b3UgY2FuIHNwZWNpZnkgZm9yIG9iamVjdHMgY3JlYXRlZCB3aXRoIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdXNpbmcgYSBjdXN0b21lciBtYW5hZ2VkIGtleSBzdG9yZWQgaW4gQW1hem9uIFdlYiBTZXJ2aWNlcyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChTU0UtS01TKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNzb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlU2VsZWN0aW9uQ3JpdGVyaWE/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyhvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVsZXRlTWFya2VyUmVwbGljYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbihvYmouZGVsZXRlTWFya2VyUmVwbGljYXRpb24pLFxuICAgICdkZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uKG9iai5kZXN0aW5hdGlvbiksXG4gICAgJ2V4aXN0aW5nT2JqZWN0UmVwbGljYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKG9iai5leGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAncHJpb3JpdHknOiBvYmoucHJpb3JpdHksXG4gICAgJ3NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEob2JqLnNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhKSxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNUYWdnaW5nVGFnU2V0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXQja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXQjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNUYWdnaW5nVGFnU2V0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldChvYmo6IEJ1Y2tldFNwZWNUYWdnaW5nVGFnU2V0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIGVycm9yIGluZm9ybWF0aW9uLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50I2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50KG9iajogQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHRoZSBTdWZmaXggZWxlbWVudC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCNzdWZmaXhcbiAgICovXG4gIHJlYWRvbmx5IHN1ZmZpeD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZUluZGV4RG9jdW1lbnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudChvYmo6IEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N1ZmZpeCc6IG9iai5zdWZmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSByZWRpcmVjdCBiZWhhdmlvciBvZiBhbGwgcmVxdWVzdHMgdG8gYSB3ZWJzaXRlIGVuZHBvaW50IG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUb1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSZWRpcmVjdEFsbFJlcXVlc3RzVG8jaG9zdE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGhvc3ROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvI3Byb3RvY29sXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSZWRpcmVjdEFsbFJlcXVlc3RzVG8ob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2hvc3ROYW1lJzogb2JqLmhvc3ROYW1lLFxuICAgICdwcm90b2NvbCc6IG9iai5wcm90b2NvbCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHJlZGlyZWN0IGJlaGF2aW9yIGFuZCB3aGVuIGEgcmVkaXJlY3QgaXMgYXBwbGllZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcm91dGluZyBydWxlcywgc2VlIENvbmZpZ3VyaW5nIGFkdmFuY2VkIGNvbmRpdGlvbmFsIHJlZGlyZWN0cyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvaG93LXRvLXBhZ2UtcmVkaXJlY3QuaHRtbCNhZHZhbmNlZC1jb25kaXRpb25hbC1yZWRpcmVjdHMpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGRlc2NyaWJpbmcgYSBjb25kaXRpb24gdGhhdCBtdXN0IGJlIG1ldCBmb3IgdGhlIHNwZWNpZmllZCByZWRpcmVjdCB0byBhcHBseS4gRm9yIGV4YW1wbGUsIDEuIElmIHJlcXVlc3QgaXMgZm9yIHBhZ2VzIGluIHRoZSAvZG9jcyBmb2xkZXIsIHJlZGlyZWN0IHRvIHRoZSAvZG9jdW1lbnRzIGZvbGRlci4gMi4gSWYgcmVxdWVzdCByZXN1bHRzIGluIEhUVFAgZXJyb3IgNHh4LCByZWRpcmVjdCByZXF1ZXN0IHRvIGFub3RoZXIgaG9zdCB3aGVyZSB5b3UgbWlnaHQgcHJvY2VzcyB0aGUgZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMjY29uZGl0aW9uXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyByZXF1ZXN0cyBhcmUgcmVkaXJlY3RlZC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLCB5b3UgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgZXJyb3IgY29kZSB0byByZXR1cm4uXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMjcmVkaXJlY3RcbiAgICovXG4gIHJlYWRvbmx5IHJlZGlyZWN0PzogQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdDtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2NvbmRpdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbihvYmouY29uZGl0aW9uKSxcbiAgICAncmVkaXJlY3QnOiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdChvYmoucmVkaXJlY3QpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcyBpbiBhbnkgY29tYmluYXRpb24sIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQjcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCN0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kKG9iajogQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZ3MnOiBvYmoudGFncz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJUYWcja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGRhdGEgcmVsYXRlZCB0byB0aGUgc3RvcmFnZSBjbGFzcyBhbmFseXNpcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBmb3IgZXhwb3J0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQge1xuICAvKipcbiAgICogV2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydCNkZXN0aW5hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydCNvdXRwdXRTY2hlbWFWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRTY2hlbWFWZXJzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQob2JqOiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVzdGluYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uKG9iai5kZXN0aW5hdGlvbiksXG4gICAgJ291dHB1dFNjaGVtYVZlcnNpb24nOiBvYmoub3V0cHV0U2NoZW1hVmVyc2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIGRlZmF1bHQgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0byBhcHBseSB0byBuZXcgb2JqZWN0cyBpbiB0aGUgYnVja2V0LiBJZiBhIFBVVCBPYmplY3QgcmVxdWVzdCBkb2Vzbid0IHNwZWNpZnkgYW55IHNlcnZlci1zaWRlIGVuY3J5cHRpb24sIHRoaXMgZGVmYXVsdCBlbmNyeXB0aW9uIHdpbGwgYmUgYXBwbGllZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQVVQgQnVja2V0IGVuY3J5cHRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRQVVRlbmNyeXB0aW9uLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgQVBJIFJlZmVyZW5jZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzQXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdCNrbXNNYXN0ZXJLZXlJRFxuICAgKi9cbiAgcmVhZG9ubHkga21zTWFzdGVyS2V5SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQjc3NlQWxnb3JpdGhtXG4gICAqL1xuICByZWFkb25seSBzc2VBbGdvcml0aG0/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KG9iajogQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrbXNNYXN0ZXJLZXlJRCc6IG9iai5rbXNNYXN0ZXJLZXlJZCxcbiAgICAnc3NlQWxnb3JpdGhtJzogb2JqLnNzZUFsZ29yaXRobSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIGZpbHRlcnMuIFRoZSBmaWx0ZXJzIGRldGVybWluZSB0aGUgc3Vic2V0IG9mIG9iamVjdHMgdG8gd2hpY2ggdGhlIHJ1bGUgYXBwbGllcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kI3RhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFnc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQob2JqOiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAndGFncyc6IG9iai50YWdzPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJUYWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclRhZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBidWNrZXQgbmFtZSwgZmlsZSBmb3JtYXQsIGJ1Y2tldCBvd25lciAob3B0aW9uYWwpLCBhbmQgcHJlZml4IChvcHRpb25hbCkgd2hlcmUgaW52ZW50b3J5IHJlc3VsdHMgYXJlIHB1Ymxpc2hlZC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNhY2NvdW50SURcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI2J1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyB0aGUgdHlwZSBvZiBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHVzZWQgdG8gZW5jcnlwdCB0aGUgaW52ZW50b3J5IHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNmb3JtYXRcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24ob2JqOiBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWNjb3VudElEJzogb2JqLmFjY291bnRJZCxcbiAgICAnYnVja2V0Jzogb2JqLmJ1Y2tldCxcbiAgICAnZW5jcnlwdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvbihvYmouZW5jcnlwdGlvbiksXG4gICAgJ2Zvcm1hdCc6IG9iai5mb3JtYXQsXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkYXlzIHNpbmNlIHRoZSBpbml0aWF0aW9uIG9mIGFuIGluY29tcGxldGUgbXVsdGlwYXJ0IHVwbG9hZCB0aGF0IEFtYXpvbiBTMyB3aWxsIHdhaXQgYmVmb3JlIHBlcm1hbmVudGx5IHJlbW92aW5nIGFsbCBwYXJ0cyBvZiB0aGUgdXBsb2FkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEFib3J0aW5nIEluY29tcGxldGUgTXVsdGlwYXJ0IFVwbG9hZHMgVXNpbmcgYSBCdWNrZXQgTGlmZWN5Y2xlIFBvbGljeSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbXB1b3ZlcnZpZXcuaHRtbCNtcHUtYWJvcnQtaW5jb21wbGV0ZS1tcHUtbGlmZWN5Y2xlLWNvbmZpZykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkI2RheXNBZnRlckluaXRpYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRheXNBZnRlckluaXRpYXRpb24/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXlzQWZ0ZXJJbml0aWF0aW9uJzogb2JqLmRheXNBZnRlckluaXRpYXRpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRXhwaXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uI2RhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGU/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24jZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgZGF5cz86IG51bWJlcjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uI2V4cGlyZWRPYmplY3REZWxldGVNYXJrZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4cGlyZWRPYmplY3REZWxldGVNYXJrZXI/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24ob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGF0ZSc6IG9iai5kYXRlPy50b0lTT1N0cmluZygpLFxuICAgICdkYXlzJzogb2JqLmRheXMsXG4gICAgJ2V4cGlyZWRPYmplY3REZWxldGVNYXJrZXInOiBvYmouZXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlcixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgRmlsdGVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgb2JqZWN0cyB0aGF0IGEgTGlmZWN5Y2xlIFJ1bGUgYXBwbGllcyB0by4gQSBGaWx0ZXIgbXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIFByZWZpeCwgVGFnLCBvciBBbmQgc3BlY2lmaWVkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyIHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgdXNlZCBpbiBhIExpZmVjeWNsZSBSdWxlIEZpbHRlciB0byBhcHBseSBhIGxvZ2ljYWwgQU5EIHRvIHR3byBvciBtb3JlIHByZWRpY2F0ZXMuIFRoZSBMaWZlY3ljbGUgUnVsZSB3aWxsIGFwcGx5IHRvIGFueSBvYmplY3QgbWF0Y2hpbmcgYWxsIG9mIHRoZSBwcmVkaWNhdGVzIGNvbmZpZ3VyZWQgaW5zaWRlIHRoZSBBbmQgb3BlcmF0b3IuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyI2FuZFxuICAgKi9cbiAgcmVhZG9ubHkgYW5kPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciN0YWdcbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlcihvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FuZCc6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJUYWcob2JqLnRhZyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHdoZW4gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgZXhwaXJlLiBVcG9uIGV4cGlyYXRpb24sIEFtYXpvbiBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucy4gWW91IHNldCB0aGlzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGFjdGlvbiBvbiBhIGJ1Y2tldCB0aGF0IGhhcyB2ZXJzaW9uaW5nIGVuYWJsZWQgKG9yIHN1c3BlbmRlZCkgdG8gcmVxdWVzdCB0aGF0IEFtYXpvbiBTMyBkZWxldGUgbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgYXQgYSBzcGVjaWZpYyBwZXJpb2QgaW4gdGhlIG9iamVjdCdzIGxpZmV0aW1lLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uI25vbmN1cnJlbnREYXlzXG4gICAqL1xuICByZWFkb25seSBub25jdXJyZW50RGF5cz86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbihvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25vbmN1cnJlbnREYXlzJzogb2JqLm5vbmN1cnJlbnREYXlzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIHRyYW5zaXRpb24gcnVsZSB0aGF0IGRlc2NyaWJlcyB3aGVuIG5vbmN1cnJlbnQgb2JqZWN0cyB0cmFuc2l0aW9uIHRvIHRoZSBTVEFOREFSRF9JQSwgT05FWk9ORV9JQSwgSU5URUxMSUdFTlRfVElFUklORywgR0xBQ0lFUiwgb3IgREVFUF9BUkNISVZFIHN0b3JhZ2UgY2xhc3MuIElmIHlvdXIgYnVja2V0IGlzIHZlcnNpb25pbmctZW5hYmxlZCAob3IgdmVyc2lvbmluZyBpcyBzdXNwZW5kZWQpLCB5b3UgY2FuIHNldCB0aGlzIGFjdGlvbiB0byByZXF1ZXN0IHRoYXQgQW1hem9uIFMzIHRyYW5zaXRpb24gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgdG8gdGhlIFNUQU5EQVJEX0lBLCBPTkVaT05FX0lBLCBJTlRFTExJR0VOVF9USUVSSU5HLCBHTEFDSUVSLCBvciBERUVQX0FSQ0hJVkUgc3RvcmFnZSBjbGFzcyBhdCBhIHNwZWNpZmljIHBlcmlvZCBpbiB0aGUgb2JqZWN0J3MgbGlmZXRpbWUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMjbm9uY3VycmVudERheXNcbiAgICovXG4gIHJlYWRvbmx5IG5vbmN1cnJlbnREYXlzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMjc3RvcmFnZUNsYXNzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3M/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucyhvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdub25jdXJyZW50RGF5cyc6IG9iai5ub25jdXJyZW50RGF5cyxcbiAgICAnc3RvcmFnZUNsYXNzJzogb2JqLnN0b3JhZ2VDbGFzcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hlbiBhbiBvYmplY3QgdHJhbnNpdGlvbnMgdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIFMzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIHJ1bGVzLCBzZWUgVHJhbnNpdGlvbmluZyBPYmplY3RzIFVzaW5nIEFtYXpvbiBTMyBMaWZlY3ljbGUgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2xpZmVjeWNsZS10cmFuc2l0aW9uLWdlbmVyYWwtY29uc2lkZXJhdGlvbnMuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNUcmFuc2l0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zI2RhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGU/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zI2RheXNcbiAgICovXG4gIHJlYWRvbmx5IGRheXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMjc3RvcmFnZUNsYXNzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3M/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXRlJzogb2JqLmRhdGU/LnRvSVNPU3RyaW5nKCksXG4gICAgJ2RheXMnOiBvYmouZGF5cyxcbiAgICAnc3RvcmFnZUNsYXNzJzogb2JqLnN0b3JhZ2VDbGFzcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGdyYW50aW5nIGluZm9ybWF0aW9uLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMge1xuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgcGVyc29uIGJlaW5nIGdyYW50ZWQgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50cyNncmFudGVlXG4gICAqL1xuICByZWFkb25seSBncmFudGVlPzogQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50cyNwZXJtaXNzaW9uXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZ3JhbnRlZSc6IHRvSnNvbl9CdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZShvYmouZ3JhbnRlZSksXG4gICAgJ3Blcm1pc3Npb24nOiBvYmoucGVybWlzc2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbmp1bmN0aW9uIChsb2dpY2FsIEFORCkgb2YgcHJlZGljYXRlcywgd2hpY2ggaXMgdXNlZCBpbiBldmFsdWF0aW5nIGEgbWV0cmljcyBmaWx0ZXIuIFRoZSBvcGVyYXRvciBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHByZWRpY2F0ZXMsIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgaW4gb3JkZXIgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQjYWNjZXNzUG9pbnRBUk5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc1BvaW50QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kI3RhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQob2JqOiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc1BvaW50QVJOJzogb2JqLmFjY2Vzc1BvaW50QXJuLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICd0YWdzJzogb2JqLnRhZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgcmVwbGljYXRlcyBkZWxldGUgbWFya2Vycy4gSWYgeW91IHNwZWNpZnkgYSBGaWx0ZXIgaW4geW91ciByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgYSBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbiBlbGVtZW50LiBJZiB5b3VyIEZpbHRlciBpbmNsdWRlcyBhIFRhZyBlbGVtZW50LCB0aGUgRGVsZXRlTWFya2VyUmVwbGljYXRpb24gU3RhdHVzIG11c3QgYmUgc2V0IHRvIERpc2FibGVkLCBiZWNhdXNlIEFtYXpvbiBTMyBkb2VzIG5vdCBzdXBwb3J0IHJlcGxpY2F0aW5nIGRlbGV0ZSBtYXJrZXJzIGZvciB0YWctYmFzZWQgcnVsZXMuIEZvciBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3JlcGxpY2F0aW9uLWFkZC1jb25maWcuaHRtbCNyZXBsaWNhdGlvbi1jb25maWctbWluLXJ1bGUtY29uZmlnKS5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlbGV0ZSBtYXJrZXIgcmVwbGljYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2RlbGV0ZS1tYXJrZXItcmVwbGljYXRpb24uaHRtbCkuXG4gKiBJZiB5b3UgYXJlIHVzaW5nIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgQW1hem9uIFMzIGhhbmRsZXMgcmVwbGljYXRpb24gb2YgZGVsZXRlIG1hcmtlcnMgZGlmZmVyZW50bHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQmFja3dhcmQgQ29tcGF0aWJpbGl0eSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvcmVwbGljYXRpb24tYWRkLWNvbmZpZy5odG1sI3JlcGxpY2F0aW9uLWJhY2t3YXJkLWNvbXBhdC1jb25zaWRlcmF0aW9ucykuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0RlbGV0ZU1hcmtlclJlcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVsZXRlTWFya2VyUmVwbGljYXRpb24jc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbihvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVsZXRlTWFya2VyUmVwbGljYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0byBwdWJsaXNoIGFuYWx5c2lzIG9yIGNvbmZpZ3VyYXRpb24gcmVzdWx0cyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBhbmQgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFjY2VzcyBjb250cm9sIGZvciByZXBsaWNhcy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2FjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbkFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2FjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldD86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGVuY3J5cHRpb24tcmVsYXRlZCBpbmZvcm1hdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGEgZGVzdGluYXRpb24gZm9yIHJlcGxpY2F0ZWQgb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2VuY3J5cHRpb25Db25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBjb250YWluZXIgc3BlY2lmeWluZyByZXBsaWNhdGlvbiBtZXRyaWNzLXJlbGF0ZWQgc2V0dGluZ3MgZW5hYmxpbmcgcmVwbGljYXRpb24gbWV0cmljcyBhbmQgZXZlbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb24jbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljcz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSByZWxhdGVkIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgd2hldGhlciBTMyBSVEMgaXMgZW5hYmxlZCBhbmQgdGhlIHRpbWUgd2hlbiBhbGwgb2JqZWN0cyBhbmQgb3BlcmF0aW9ucyBvbiBvYmplY3RzIG11c3QgYmUgcmVwbGljYXRlZC4gTXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBhIE1ldHJpY3MgYmxvY2suXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNyZXBsaWNhdGlvblRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uVGltZT86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNzdG9yYWdlQ2xhc3NcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VDbGFzcz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uKG9iai5hY2Nlc3NDb250cm9sVHJhbnNsYXRpb24pLFxuICAgICdhY2NvdW50Jzogb2JqLmFjY291bnQsXG4gICAgJ2J1Y2tldCc6IG9iai5idWNrZXQsXG4gICAgJ2VuY3J5cHRpb25Db25maWd1cmF0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbihvYmouZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pLFxuICAgICdtZXRyaWNzJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzKG9iai5tZXRyaWNzKSxcbiAgICAncmVwbGljYXRpb25UaW1lJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWUob2JqLnJlcGxpY2F0aW9uVGltZSksXG4gICAgJ3N0b3JhZ2VDbGFzcyc6IG9iai5zdG9yYWdlQ2xhc3MsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byByZXBsaWNhdGUgZXhpc3Rpbmcgc291cmNlIGJ1Y2tldCBvYmplY3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlcGxpY2F0aW5nIEV4aXN0aW5nIE9iamVjdHMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3JlcGxpY2F0aW9uLXdoYXQtaXMtaXNub3QtcmVwbGljYXRlZC5odG1sI2V4aXN0aW5nLW9iamVjdC1yZXBsaWNhdGlvbikgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGZpbHRlciB0aGF0IGlkZW50aWZpZXMgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSByZXBsaWNhdGlvbiBydWxlIGFwcGxpZXMuIEEgRmlsdGVyIG11c3Qgc3BlY2lmeSBleGFjdGx5IG9uZSBQcmVmaXgsIFRhZywgb3IgYW4gQW5kIGNoaWxkIGVsZW1lbnQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyIHtcbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHJ1bGUgZmlsdGVycy4gVGhlIGZpbHRlcnMgZGV0ZXJtaW5lIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiBUaGlzIGVsZW1lbnQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbHRlci5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICogSWYgeW91IHNwZWNpZnkgYm90aCBhIFByZWZpeCBhbmQgYSBUYWcgZmlsdGVyLCB3cmFwIHRoZXNlIGZpbHRlcnMgaW4gICAgYW4gQW5kIHRhZy5cbiAgICogKiBJZiB5b3Ugc3BlY2lmeSBhIGZpbHRlciBiYXNlZCBvbiBtdWx0aXBsZSB0YWdzLCB3cmFwIHRoZSBUYWcgZWxlbWVudHMgICAgaW4gYW4gQW5kIHRhZy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FuZCc6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZChvYmouYW5kKSxcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAndGFnJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIHRoYXQgZGVzY3JpYmVzIGFkZGl0aW9uYWwgZmlsdGVycyBmb3IgaWRlbnRpZnlpbmcgdGhlIHNvdXJjZSBvYmplY3RzIHRoYXQgeW91IHdhbnQgdG8gcmVwbGljYXRlLiBZb3UgY2FuIGNob29zZSB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcmVwbGljYXRpb24gb2YgdGhlc2Ugb2JqZWN0cy4gQ3VycmVudGx5LCBBbWF6b24gUzMgc3VwcG9ydHMgb25seSB0aGUgZmlsdGVyIHRoYXQgeW91IGNhbiBzcGVjaWZ5IGZvciBvYmplY3RzIGNyZWF0ZWQgd2l0aCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHVzaW5nIGEgY3VzdG9tZXIgbWFuYWdlZCBrZXkgc3RvcmVkIGluIEFtYXpvbiBXZWIgU2VydmljZXMgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoU1NFLUtNUykuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYSB7XG4gIC8qKlxuICAgKiBBIGZpbHRlciB0aGF0IHlvdSBjYW4gc3BlY2lmeSBmb3Igc2VsZWN0aW9uIGZvciBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLiBBbWF6b24gUzMgZG9lc24ndCByZXBsaWNhdGUgcmVwbGljYSBtb2RpZmljYXRpb25zIGJ5IGRlZmF1bHQuIEluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uICh3aGVuIEZpbHRlciBpcyBzcGVjaWZpZWQpLCB5b3UgY2FuIHNwZWNpZnkgdGhpcyBlbGVtZW50IGFuZCBzZXQgdGhlIHN0YXR1cyB0byBFbmFibGVkIHRvIHJlcGxpY2F0ZSBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLlxuICAgKiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgRmlsdGVyIGVsZW1lbnQsIEFtYXpvbiBTMyBhc3N1bWVzIHRoYXQgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGVhcmxpZXIgdmVyc2lvbiwgVjEuIEluIHRoZSBlYXJsaWVyIHZlcnNpb24sIHRoaXMgZWxlbWVudCBpcyBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhI3JlcGxpY2FNb2RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhTW9kaWZpY2F0aW9ucz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFSZXBsaWNhTW9kaWZpY2F0aW9ucztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGZpbHRlciBpbmZvcm1hdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBvZiBTMyBvYmplY3RzIGVuY3J5cHRlZCB3aXRoIEFtYXpvbiBXZWIgU2VydmljZXMgS01TLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEjc3NlS01TRW5jcnlwdGVkT2JqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgc3NlS21zRW5jcnlwdGVkT2JqZWN0cz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFTc2VLbXNFbmNyeXB0ZWRPYmplY3RzO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVwbGljYU1vZGlmaWNhdGlvbnMnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVJlcGxpY2FNb2RpZmljYXRpb25zKG9iai5yZXBsaWNhTW9kaWZpY2F0aW9ucyksXG4gICAgJ3NzZUtNU0VuY3J5cHRlZE9iamVjdHMnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMob2JqLnNzZUttc0VuY3J5cHRlZE9iamVjdHMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBkZXNjcmliaW5nIGEgY29uZGl0aW9uIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoZSBzcGVjaWZpZWQgcmVkaXJlY3QgdG8gYXBwbHkuIEZvciBleGFtcGxlLCAxLiBJZiByZXF1ZXN0IGlzIGZvciBwYWdlcyBpbiB0aGUgL2RvY3MgZm9sZGVyLCByZWRpcmVjdCB0byB0aGUgL2RvY3VtZW50cyBmb2xkZXIuIDIuIElmIHJlcXVlc3QgcmVzdWx0cyBpbiBIVFRQIGVycm9yIDR4eCwgcmVkaXJlY3QgcmVxdWVzdCB0byBhbm90aGVyIGhvc3Qgd2hlcmUgeW91IG1pZ2h0IHByb2Nlc3MgdGhlIGVycm9yLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNDb25kaXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uI2h0dHBFcnJvckNvZGVSZXR1cm5lZEVxdWFsc1xuICAgKi9cbiAgcmVhZG9ubHkgaHR0cEVycm9yQ29kZVJldHVybmVkRXF1YWxzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uI2tleVByZWZpeEVxdWFsc1xuICAgKi9cbiAgcmVhZG9ubHkga2V5UHJlZml4RXF1YWxzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbihvYmo6IEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaHR0cEVycm9yQ29kZVJldHVybmVkRXF1YWxzJzogb2JqLmh0dHBFcnJvckNvZGVSZXR1cm5lZEVxdWFscyxcbiAgICAna2V5UHJlZml4RXF1YWxzJzogb2JqLmtleVByZWZpeEVxdWFscyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IHJlcXVlc3RzIGFyZSByZWRpcmVjdGVkLiBJbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IsIHlvdSBjYW4gc3BlY2lmeSBhIGRpZmZlcmVudCBlcnJvciBjb2RlIHRvIHJldHVybi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc1JlZGlyZWN0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdCNob3N0TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdCNodHRwUmVkaXJlY3RDb2RlXG4gICAqL1xuICByZWFkb25seSBodHRwUmVkaXJlY3RDb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcmVwbGFjZUtleVByZWZpeFdpdGhcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxhY2VLZXlQcmVmaXhXaXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcmVwbGFjZUtleVdpdGhcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxhY2VLZXlXaXRoPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3Qob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc1JlZGlyZWN0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaG9zdE5hbWUnOiBvYmouaG9zdE5hbWUsXG4gICAgJ2h0dHBSZWRpcmVjdENvZGUnOiBvYmouaHR0cFJlZGlyZWN0Q29kZSxcbiAgICAncHJvdG9jb2wnOiBvYmoucHJvdG9jb2wsXG4gICAgJ3JlcGxhY2VLZXlQcmVmaXhXaXRoJzogb2JqLnJlcGxhY2VLZXlQcmVmaXhXaXRoLFxuICAgICdyZXBsYWNlS2V5V2l0aCc6IG9iai5yZXBsYWNlS2V5V2l0aCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogV2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uI3MzQnVja2V0RGVzdGluYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzQnVja2V0RGVzdGluYXRpb24/OiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnczNCdWNrZXREZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uKG9iai5zM0J1Y2tldERlc3RpbmF0aW9uKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbnMgdGhlIHR5cGUgb2Ygc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB1c2VkIHRvIGVuY3J5cHQgdGhlIGludmVudG9yeSByZXN1bHRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHVzZSBvZiBTU0UtS01TIHRvIGVuY3J5cHQgZGVsaXZlcmVkIGludmVudG9yeSByZXBvcnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uI3NzZUtNU1xuICAgKi9cbiAgcmVhZG9ubHkgc3NlS21zPzogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uKG9iajogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzc2VLTVMnOiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXMob2JqLnNzZUttcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIGluIGEgTGlmZWN5Y2xlIFJ1bGUgRmlsdGVyIHRvIGFwcGx5IGEgbG9naWNhbCBBTkQgdG8gdHdvIG9yIG1vcmUgcHJlZGljYXRlcy4gVGhlIExpZmVjeWNsZSBSdWxlIHdpbGwgYXBwbHkgdG8gYW55IG9iamVjdCBtYXRjaGluZyBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgY29uZmlndXJlZCBpbnNpZGUgdGhlIEFuZCBvcGVyYXRvci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQjdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZChvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZ3MnOiBvYmoudGFncz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJUYWcjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyVGFnIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgcGVyc29uIGJlaW5nIGdyYW50ZWQgcGVybWlzc2lvbnMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWUjZGlzcGxheU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlI2VtYWlsQWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxBZGRyZXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSN0eXBlX1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSN1UklcbiAgICovXG4gIHJlYWRvbmx5IHVSaT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWUob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Rpc3BsYXlOYW1lJzogb2JqLmRpc3BsYXlOYW1lLFxuICAgICdlbWFpbEFkZHJlc3MnOiBvYmouZW1haWxBZGRyZXNzLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAndHlwZV8nOiBvYmoudHlwZSxcbiAgICAndVJJJzogb2JqLnVSaSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3Mge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmRUYWdzI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3MnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kVGFncyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBpbmZvcm1hdGlvbiBhYm91dCBhY2Nlc3MgY29udHJvbCBmb3IgcmVwbGljYXMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbkFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24jb3duZXJcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24ob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnb3duZXInOiBvYmoub3duZXIsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGVuY3J5cHRpb24tcmVsYXRlZCBpbmZvcm1hdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGEgZGVzdGluYXRpb24gZm9yIHJlcGxpY2F0ZWQgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiNyZXBsaWNhS01TS2V5SURcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2FLbXNLZXlJZD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbihvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlcGxpY2FLTVNLZXlJRCc6IG9iai5yZXBsaWNhS21zS2V5SWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyByZXBsaWNhdGlvbiBtZXRyaWNzLXJlbGF0ZWQgc2V0dGluZ3MgZW5hYmxpbmcgcmVwbGljYXRpb24gbWV0cmljcyBhbmQgZXZlbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyB7XG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIHRoZSB0aW1lIHZhbHVlIGZvciBTMyBSZXBsaWNhdGlvbiBUaW1lIENvbnRyb2wgKFMzIFJUQykgYW5kIHJlcGxpY2F0aW9uIG1ldHJpY3MgRXZlbnRUaHJlc2hvbGQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3MjZXZlbnRUaHJlc2hvbGRcbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50VGhyZXNob2xkPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3Mob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V2ZW50VGhyZXNob2xkJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQob2JqLmV2ZW50VGhyZXNob2xkKSxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSByZWxhdGVkIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgd2hldGhlciBTMyBSVEMgaXMgZW5hYmxlZCBhbmQgdGhlIHRpbWUgd2hlbiBhbGwgb2JqZWN0cyBhbmQgb3BlcmF0aW9ucyBvbiBvYmplY3RzIG11c3QgYmUgcmVwbGljYXRlZC4gTXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBhIE1ldHJpY3MgYmxvY2suXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWUjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIHNwZWNpZnlpbmcgdGhlIHRpbWUgdmFsdWUgZm9yIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSBhbmQgcmVwbGljYXRpb24gbWV0cmljcyBFdmVudFRocmVzaG9sZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lI3RpbWVcbiAgICovXG4gIHJlYWRvbmx5IHRpbWU/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lVGltZTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gICAgJ3RpbWUnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUob2JqLnRpbWUpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHJ1bGUgZmlsdGVycy4gVGhlIGZpbHRlcnMgZGV0ZXJtaW5lIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiBUaGlzIGVsZW1lbnQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbHRlci5cbiAqIEZvciBleGFtcGxlOlxuICogKiBJZiB5b3Ugc3BlY2lmeSBib3RoIGEgUHJlZml4IGFuZCBhIFRhZyBmaWx0ZXIsIHdyYXAgdGhlc2UgZmlsdGVycyBpbiAgICBhbiBBbmQgdGFnLlxuICogKiBJZiB5b3Ugc3BlY2lmeSBhIGZpbHRlciBiYXNlZCBvbiBtdWx0aXBsZSB0YWdzLCB3cmFwIHRoZSBUYWcgZWxlbWVudHMgICAgaW4gYW4gQW5kIHRhZy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZCN0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICd0YWdzJzogb2JqLnRhZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGZpbHRlciB0aGF0IHlvdSBjYW4gc3BlY2lmeSBmb3Igc2VsZWN0aW9uIGZvciBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLiBBbWF6b24gUzMgZG9lc24ndCByZXBsaWNhdGUgcmVwbGljYSBtb2RpZmljYXRpb25zIGJ5IGRlZmF1bHQuIEluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uICh3aGVuIEZpbHRlciBpcyBzcGVjaWZpZWQpLCB5b3UgY2FuIHNwZWNpZnkgdGhpcyBlbGVtZW50IGFuZCBzZXQgdGhlIHN0YXR1cyB0byBFbmFibGVkIHRvIHJlcGxpY2F0ZSBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLlxuICogSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIEZpbHRlciBlbGVtZW50LCBBbWF6b24gUzMgYXNzdW1lcyB0aGF0IHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGlzIHRoZSBlYXJsaWVyIHZlcnNpb24sIFYxLiBJbiB0aGUgZWFybGllciB2ZXJzaW9uLCB0aGlzIGVsZW1lbnQgaXMgbm90IGFsbG93ZWQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVJlcGxpY2FNb2RpZmljYXRpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBmaWx0ZXIgaW5mb3JtYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gb2YgUzMgb2JqZWN0cyBlbmNyeXB0ZWQgd2l0aCBBbWF6b24gV2ViIFNlcnZpY2VzIEtNUy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFTc2VLbXNFbmNyeXB0ZWRPYmplY3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cyNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24jYnVja2V0XG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNidWNrZXRBY2NvdW50SURcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI2Zvcm1hdFxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24jcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbihvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdidWNrZXQnOiBvYmouYnVja2V0LFxuICAgICdidWNrZXRBY2NvdW50SUQnOiBvYmouYnVja2V0QWNjb3VudElkLFxuICAgICdmb3JtYXQnOiBvYmouZm9ybWF0LFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgdXNlIG9mIFNTRS1LTVMgdG8gZW5jcnlwdCBkZWxpdmVyZWQgaW52ZW50b3J5IHJlcG9ydHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvblNzZUttc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXMja2V5SURcbiAgICovXG4gIHJlYWRvbmx5IGtleUlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvblNzZUttcyhvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5SUQnOiBvYmoua2V5SWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3Mge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmRUYWdzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3Mob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBBbWF6b24gUzMgb2JqZWN0IGtleSBuYW1lIHRvIGZpbHRlciBvbiBhbmQgd2hldGhlciB0byBmaWx0ZXIgb24gdGhlIHN1ZmZpeCBvciBwcmVmaXggb2YgdGhlIGtleSBuYW1lLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyhvYmo6IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgQW1hem9uIFMzIG9iamVjdCBrZXkgbmFtZSB0byBmaWx0ZXIgb24gYW5kIHdoZXRoZXIgdG8gZmlsdGVyIG9uIHRoZSBzdWZmaXggb3IgcHJlZml4IG9mIHRoZSBrZXkgbmFtZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIEFtYXpvbiBTMyBvYmplY3Qga2V5IG5hbWUgdG8gZmlsdGVyIG9uIGFuZCB3aGV0aGVyIHRvIGZpbHRlciBvbiB0aGUgc3VmZml4IG9yIHByZWZpeCBvZiB0aGUga2V5IG5hbWUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSB2YWx1ZSBmb3IgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpIGFuZCByZXBsaWNhdGlvbiBtZXRyaWNzIEV2ZW50VGhyZXNob2xkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljc0V2ZW50VGhyZXNob2xkI21pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbnV0ZXM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZChvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtaW51dGVzJzogb2JqLm1pbnV0ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSB2YWx1ZSBmb3IgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpIGFuZCByZXBsaWNhdGlvbiBtZXRyaWNzIEV2ZW50VGhyZXNob2xkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lVGltZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWVUaW1lI21pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbnV0ZXM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWVUaW1lKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtaW51dGVzJzogb2JqLm1pbnV0ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kVGFncyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3Mob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuIl19
|