@cdktn/provider-azuread 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +112042 -0
- package/LICENSE +355 -0
- package/README.md +94 -0
- package/lib/access-package/index.d.ts +151 -0
- package/lib/access-package/index.js +354 -0
- package/lib/access-package-assignment-policy/index.d.ts +1098 -0
- package/lib/access-package-assignment-policy/index.js +2711 -0
- package/lib/access-package-catalog/index.d.ts +152 -0
- package/lib/access-package-catalog/index.js +357 -0
- package/lib/access-package-catalog-role-assignment/index.d.ts +140 -0
- package/lib/access-package-catalog-role-assignment/index.js +333 -0
- package/lib/access-package-resource-catalog-association/index.d.ts +131 -0
- package/lib/access-package-resource-catalog-association/index.js +307 -0
- package/lib/access-package-resource-package-association/index.d.ts +132 -0
- package/lib/access-package-resource-package-association/index.js +310 -0
- package/lib/administrative-unit/index.d.ts +165 -0
- package/lib/administrative-unit/index.js +385 -0
- package/lib/administrative-unit-member/index.d.ts +123 -0
- package/lib/administrative-unit-member/index.js +295 -0
- package/lib/administrative-unit-role-member/index.d.ts +131 -0
- package/lib/administrative-unit-role-member/index.js +307 -0
- package/lib/app-role-assignment/index.d.ts +134 -0
- package/lib/app-role-assignment/index.js +319 -0
- package/lib/application/index.d.ts +1352 -0
- package/lib/application/index.js +3262 -0
- package/lib/application-api-access/index.d.ts +152 -0
- package/lib/application-api-access/index.js +357 -0
- package/lib/application-app-role/index.d.ts +171 -0
- package/lib/application-app-role/index.js +390 -0
- package/lib/application-certificate/index.d.ts +196 -0
- package/lib/application-certificate/index.js +441 -0
- package/lib/application-fallback-public-client/index.d.ts +122 -0
- package/lib/application-fallback-public-client/index.js +292 -0
- package/lib/application-federated-identity-credential/index.d.ts +172 -0
- package/lib/application-federated-identity-credential/index.js +394 -0
- package/lib/application-flexible-federated-identity-credential/index.d.ts +172 -0
- package/lib/application-flexible-federated-identity-credential/index.js +394 -0
- package/lib/application-from-template/index.d.ts +134 -0
- package/lib/application-from-template/index.js +334 -0
- package/lib/application-identifier-uri/index.d.ts +121 -0
- package/lib/application-identifier-uri/index.js +289 -0
- package/lib/application-known-clients/index.d.ts +130 -0
- package/lib/application-known-clients/index.js +315 -0
- package/lib/application-optional-claims/index.d.ts +381 -0
- package/lib/application-optional-claims/index.js +918 -0
- package/lib/application-owner/index.d.ts +121 -0
- package/lib/application-owner/index.js +289 -0
- package/lib/application-password/index.d.ts +185 -0
- package/lib/application-password/index.js +410 -0
- package/lib/application-permission-scope/index.d.ts +193 -0
- package/lib/application-permission-scope/index.js +432 -0
- package/lib/application-pre-authorized/index.d.ts +140 -0
- package/lib/application-pre-authorized/index.js +333 -0
- package/lib/application-redirect-uris/index.d.ts +140 -0
- package/lib/application-redirect-uris/index.js +333 -0
- package/lib/application-registration/index.d.ts +278 -0
- package/lib/application-registration/index.js +610 -0
- package/lib/authentication-strength-policy/index.d.ts +141 -0
- package/lib/authentication-strength-policy/index.js +336 -0
- package/lib/claims-mapping-policy/index.d.ts +130 -0
- package/lib/claims-mapping-policy/index.js +315 -0
- package/lib/conditional-access-policy/index.d.ts +959 -0
- package/lib/conditional-access-policy/index.js +2705 -0
- package/lib/custom-directory-role/index.d.ts +216 -0
- package/lib/custom-directory-role/index.js +505 -0
- package/lib/data-azuread-access-package/index.d.ts +118 -0
- package/lib/data-azuread-access-package/index.js +272 -0
- package/lib/data-azuread-access-package-catalog/index.d.ts +108 -0
- package/lib/data-azuread-access-package-catalog/index.js +258 -0
- package/lib/data-azuread-access-package-catalog-role/index.d.ts +107 -0
- package/lib/data-azuread-access-package-catalog-role/index.js +254 -0
- package/lib/data-azuread-administrative-unit/index.d.ts +135 -0
- package/lib/data-azuread-administrative-unit/index.js +336 -0
- package/lib/data-azuread-application/index.d.ts +654 -0
- package/lib/data-azuread-application/index.js +1606 -0
- package/lib/data-azuread-application-published-app-ids/index.d.ts +85 -0
- package/lib/data-azuread-application-published-app-ids/index.js +206 -0
- package/lib/data-azuread-application-template/index.d.ts +111 -0
- package/lib/data-azuread-application-template/index.js +270 -0
- package/lib/data-azuread-client-config/index.d.ts +86 -0
- package/lib/data-azuread-client-config/index.js +216 -0
- package/lib/data-azuread-directory-object/index.d.ts +94 -0
- package/lib/data-azuread-directory-object/index.js +223 -0
- package/lib/data-azuread-directory-role-templates/index.d.ts +120 -0
- package/lib/data-azuread-directory-role-templates/index.js +293 -0
- package/lib/data-azuread-directory-roles/index.d.ts +122 -0
- package/lib/data-azuread-directory-roles/index.js +301 -0
- package/lib/data-azuread-domains/index.d.ts +190 -0
- package/lib/data-azuread-domains/index.js +435 -0
- package/lib/data-azuread-group/index.d.ts +207 -0
- package/lib/data-azuread-group/index.js +506 -0
- package/lib/data-azuread-group-role-management-policy/index.d.ts +105 -0
- package/lib/data-azuread-group-role-management-policy/index.js +248 -0
- package/lib/data-azuread-groups/index.d.ts +160 -0
- package/lib/data-azuread-groups/index.js +348 -0
- package/lib/data-azuread-named-location/index.d.ts +163 -0
- package/lib/data-azuread-named-location/index.js +398 -0
- package/lib/data-azuread-service-principal/index.d.ts +325 -0
- package/lib/data-azuread-service-principal/index.js +817 -0
- package/lib/data-azuread-service-principals/index.d.ts +183 -0
- package/lib/data-azuread-service-principals/index.js +430 -0
- package/lib/data-azuread-user/index.d.ts +177 -0
- package/lib/data-azuread-user/index.js +465 -0
- package/lib/data-azuread-users/index.d.ts +204 -0
- package/lib/data-azuread-users/index.js +468 -0
- package/lib/directory-role/index.d.ts +125 -0
- package/lib/directory-role/index.js +306 -0
- package/lib/directory-role-assignment/index.d.ts +143 -0
- package/lib/directory-role-assignment/index.js +331 -0
- package/lib/directory-role-eligibility-schedule-request/index.d.ts +141 -0
- package/lib/directory-role-eligibility-schedule-request/index.js +325 -0
- package/lib/directory-role-member/index.d.ts +123 -0
- package/lib/directory-role-member/index.js +295 -0
- package/lib/group/index.d.ts +392 -0
- package/lib/group/index.js +872 -0
- package/lib/group-member/index.d.ts +121 -0
- package/lib/group-member/index.js +289 -0
- package/lib/group-role-management-policy/index.d.ts +1043 -0
- package/lib/group-role-management-policy/index.js +2775 -0
- package/lib/group-without-members/index.d.ts +381 -0
- package/lib/group-without-members/index.js +851 -0
- package/lib/index.d.ts +79 -0
- package/lib/index.js +85 -0
- package/lib/invitation/index.d.ts +203 -0
- package/lib/invitation/index.js +490 -0
- package/lib/lazy-index.d.ts +4 -0
- package/lib/lazy-index.js +82 -0
- package/lib/named-location/index.d.ts +212 -0
- package/lib/named-location/index.js +571 -0
- package/lib/privileged-access-group-assignment-schedule/index.d.ts +218 -0
- package/lib/privileged-access-group-assignment-schedule/index.js +484 -0
- package/lib/privileged-access-group-eligibility-schedule/index.d.ts +218 -0
- package/lib/privileged-access-group-eligibility-schedule/index.js +484 -0
- package/lib/provider/index.d.ts +289 -0
- package/lib/provider/index.js +549 -0
- package/lib/service-principal/index.d.ts +547 -0
- package/lib/service-principal/index.js +1305 -0
- package/lib/service-principal-certificate/index.d.ts +187 -0
- package/lib/service-principal-certificate/index.js +415 -0
- package/lib/service-principal-claims-mapping-policy-assignment/index.d.ts +121 -0
- package/lib/service-principal-claims-mapping-policy-assignment/index.js +289 -0
- package/lib/service-principal-delegated-permission-grant/index.d.ts +151 -0
- package/lib/service-principal-delegated-permission-grant/index.js +354 -0
- package/lib/service-principal-password/index.d.ts +176 -0
- package/lib/service-principal-password/index.js +384 -0
- package/lib/service-principal-token-signing-certificate/index.d.ts +137 -0
- package/lib/service-principal-token-signing-certificate/index.js +329 -0
- package/lib/synchronization-job/index.d.ts +177 -0
- package/lib/synchronization-job/index.js +424 -0
- package/lib/synchronization-job-provision-on-demand/index.d.ts +254 -0
- package/lib/synchronization-job-provision-on-demand/index.js +590 -0
- package/lib/synchronization-secret/index.d.ts +184 -0
- package/lib/synchronization-secret/index.js +449 -0
- package/lib/user/index.d.ts +517 -0
- package/lib/user/index.js +1084 -0
- package/lib/user-flow-attribute/index.d.ts +141 -0
- package/lib/user-flow-attribute/index.js +340 -0
- package/package.json +155 -0
|
@@ -0,0 +1,872 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Group = exports.GroupTimeoutsOutputReference = exports.GroupDynamicMembershipOutputReference = void 0;
|
|
5
|
+
exports.groupDynamicMembershipToTerraform = groupDynamicMembershipToTerraform;
|
|
6
|
+
exports.groupDynamicMembershipToHclTerraform = groupDynamicMembershipToHclTerraform;
|
|
7
|
+
exports.groupTimeoutsToTerraform = groupTimeoutsToTerraform;
|
|
8
|
+
exports.groupTimeoutsToHclTerraform = groupTimeoutsToHclTerraform;
|
|
9
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
10
|
+
const cdktn = require("cdktn");
|
|
11
|
+
function groupDynamicMembershipToTerraform(struct) {
|
|
12
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
13
|
+
return struct;
|
|
14
|
+
}
|
|
15
|
+
if (cdktn.isComplexElement(struct)) {
|
|
16
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
enabled: cdktn.booleanToTerraform(struct.enabled),
|
|
20
|
+
rule: cdktn.stringToTerraform(struct.rule),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function groupDynamicMembershipToHclTerraform(struct) {
|
|
24
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
25
|
+
return struct;
|
|
26
|
+
}
|
|
27
|
+
if (cdktn.isComplexElement(struct)) {
|
|
28
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
29
|
+
}
|
|
30
|
+
const attrs = {
|
|
31
|
+
enabled: {
|
|
32
|
+
value: cdktn.booleanToHclTerraform(struct.enabled),
|
|
33
|
+
isBlock: false,
|
|
34
|
+
type: "simple",
|
|
35
|
+
storageClassType: "boolean",
|
|
36
|
+
},
|
|
37
|
+
rule: {
|
|
38
|
+
value: cdktn.stringToHclTerraform(struct.rule),
|
|
39
|
+
isBlock: false,
|
|
40
|
+
type: "simple",
|
|
41
|
+
storageClassType: "string",
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
// remove undefined attributes
|
|
45
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
46
|
+
}
|
|
47
|
+
class GroupDynamicMembershipOutputReference extends cdktn.ComplexObject {
|
|
48
|
+
/**
|
|
49
|
+
* @param terraformResource The parent resource
|
|
50
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
51
|
+
*/
|
|
52
|
+
constructor(terraformResource, terraformAttribute) {
|
|
53
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
54
|
+
this.isEmptyObject = false;
|
|
55
|
+
}
|
|
56
|
+
get internalValue() {
|
|
57
|
+
let hasAnyValues = this.isEmptyObject;
|
|
58
|
+
const internalValueResult = {};
|
|
59
|
+
if (this._enabled !== undefined) {
|
|
60
|
+
hasAnyValues = true;
|
|
61
|
+
internalValueResult.enabled = this._enabled;
|
|
62
|
+
}
|
|
63
|
+
if (this._rule !== undefined) {
|
|
64
|
+
hasAnyValues = true;
|
|
65
|
+
internalValueResult.rule = this._rule;
|
|
66
|
+
}
|
|
67
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
68
|
+
}
|
|
69
|
+
set internalValue(value) {
|
|
70
|
+
if (value === undefined) {
|
|
71
|
+
this.isEmptyObject = false;
|
|
72
|
+
this._enabled = undefined;
|
|
73
|
+
this._rule = undefined;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
77
|
+
this._enabled = value.enabled;
|
|
78
|
+
this._rule = value.rule;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
get enabled() {
|
|
82
|
+
return this.getBooleanAttribute('enabled');
|
|
83
|
+
}
|
|
84
|
+
set enabled(value) {
|
|
85
|
+
this._enabled = value;
|
|
86
|
+
}
|
|
87
|
+
// Temporarily expose input value. Use with caution.
|
|
88
|
+
get enabledInput() {
|
|
89
|
+
return this._enabled;
|
|
90
|
+
}
|
|
91
|
+
get rule() {
|
|
92
|
+
return this.getStringAttribute('rule');
|
|
93
|
+
}
|
|
94
|
+
set rule(value) {
|
|
95
|
+
this._rule = value;
|
|
96
|
+
}
|
|
97
|
+
// Temporarily expose input value. Use with caution.
|
|
98
|
+
get ruleInput() {
|
|
99
|
+
return this._rule;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.GroupDynamicMembershipOutputReference = GroupDynamicMembershipOutputReference;
|
|
103
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
104
|
+
GroupDynamicMembershipOutputReference[_a] = { fqn: "@cdktn/provider-azuread.group.GroupDynamicMembershipOutputReference", version: "15.0.0" };
|
|
105
|
+
function groupTimeoutsToTerraform(struct) {
|
|
106
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
107
|
+
return struct;
|
|
108
|
+
}
|
|
109
|
+
if (cdktn.isComplexElement(struct)) {
|
|
110
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
create: cdktn.stringToTerraform(struct.create),
|
|
114
|
+
delete: cdktn.stringToTerraform(struct.delete),
|
|
115
|
+
read: cdktn.stringToTerraform(struct.read),
|
|
116
|
+
update: cdktn.stringToTerraform(struct.update),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function groupTimeoutsToHclTerraform(struct) {
|
|
120
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
121
|
+
return struct;
|
|
122
|
+
}
|
|
123
|
+
if (cdktn.isComplexElement(struct)) {
|
|
124
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
125
|
+
}
|
|
126
|
+
const attrs = {
|
|
127
|
+
create: {
|
|
128
|
+
value: cdktn.stringToHclTerraform(struct.create),
|
|
129
|
+
isBlock: false,
|
|
130
|
+
type: "simple",
|
|
131
|
+
storageClassType: "string",
|
|
132
|
+
},
|
|
133
|
+
delete: {
|
|
134
|
+
value: cdktn.stringToHclTerraform(struct.delete),
|
|
135
|
+
isBlock: false,
|
|
136
|
+
type: "simple",
|
|
137
|
+
storageClassType: "string",
|
|
138
|
+
},
|
|
139
|
+
read: {
|
|
140
|
+
value: cdktn.stringToHclTerraform(struct.read),
|
|
141
|
+
isBlock: false,
|
|
142
|
+
type: "simple",
|
|
143
|
+
storageClassType: "string",
|
|
144
|
+
},
|
|
145
|
+
update: {
|
|
146
|
+
value: cdktn.stringToHclTerraform(struct.update),
|
|
147
|
+
isBlock: false,
|
|
148
|
+
type: "simple",
|
|
149
|
+
storageClassType: "string",
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
// remove undefined attributes
|
|
153
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
154
|
+
}
|
|
155
|
+
class GroupTimeoutsOutputReference extends cdktn.ComplexObject {
|
|
156
|
+
/**
|
|
157
|
+
* @param terraformResource The parent resource
|
|
158
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
159
|
+
*/
|
|
160
|
+
constructor(terraformResource, terraformAttribute) {
|
|
161
|
+
super(terraformResource, terraformAttribute, false);
|
|
162
|
+
this.isEmptyObject = false;
|
|
163
|
+
}
|
|
164
|
+
get internalValue() {
|
|
165
|
+
if (this.resolvableValue) {
|
|
166
|
+
return this.resolvableValue;
|
|
167
|
+
}
|
|
168
|
+
let hasAnyValues = this.isEmptyObject;
|
|
169
|
+
const internalValueResult = {};
|
|
170
|
+
if (this._create !== undefined) {
|
|
171
|
+
hasAnyValues = true;
|
|
172
|
+
internalValueResult.create = this._create;
|
|
173
|
+
}
|
|
174
|
+
if (this._delete !== undefined) {
|
|
175
|
+
hasAnyValues = true;
|
|
176
|
+
internalValueResult.delete = this._delete;
|
|
177
|
+
}
|
|
178
|
+
if (this._read !== undefined) {
|
|
179
|
+
hasAnyValues = true;
|
|
180
|
+
internalValueResult.read = this._read;
|
|
181
|
+
}
|
|
182
|
+
if (this._update !== undefined) {
|
|
183
|
+
hasAnyValues = true;
|
|
184
|
+
internalValueResult.update = this._update;
|
|
185
|
+
}
|
|
186
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
187
|
+
}
|
|
188
|
+
set internalValue(value) {
|
|
189
|
+
if (value === undefined) {
|
|
190
|
+
this.isEmptyObject = false;
|
|
191
|
+
this.resolvableValue = undefined;
|
|
192
|
+
this._create = undefined;
|
|
193
|
+
this._delete = undefined;
|
|
194
|
+
this._read = undefined;
|
|
195
|
+
this._update = undefined;
|
|
196
|
+
}
|
|
197
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
198
|
+
this.isEmptyObject = false;
|
|
199
|
+
this.resolvableValue = value;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
203
|
+
this.resolvableValue = undefined;
|
|
204
|
+
this._create = value.create;
|
|
205
|
+
this._delete = value.delete;
|
|
206
|
+
this._read = value.read;
|
|
207
|
+
this._update = value.update;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
get create() {
|
|
211
|
+
return this.getStringAttribute('create');
|
|
212
|
+
}
|
|
213
|
+
set create(value) {
|
|
214
|
+
this._create = value;
|
|
215
|
+
}
|
|
216
|
+
resetCreate() {
|
|
217
|
+
this._create = undefined;
|
|
218
|
+
}
|
|
219
|
+
// Temporarily expose input value. Use with caution.
|
|
220
|
+
get createInput() {
|
|
221
|
+
return this._create;
|
|
222
|
+
}
|
|
223
|
+
get delete() {
|
|
224
|
+
return this.getStringAttribute('delete');
|
|
225
|
+
}
|
|
226
|
+
set delete(value) {
|
|
227
|
+
this._delete = value;
|
|
228
|
+
}
|
|
229
|
+
resetDelete() {
|
|
230
|
+
this._delete = undefined;
|
|
231
|
+
}
|
|
232
|
+
// Temporarily expose input value. Use with caution.
|
|
233
|
+
get deleteInput() {
|
|
234
|
+
return this._delete;
|
|
235
|
+
}
|
|
236
|
+
get read() {
|
|
237
|
+
return this.getStringAttribute('read');
|
|
238
|
+
}
|
|
239
|
+
set read(value) {
|
|
240
|
+
this._read = value;
|
|
241
|
+
}
|
|
242
|
+
resetRead() {
|
|
243
|
+
this._read = undefined;
|
|
244
|
+
}
|
|
245
|
+
// Temporarily expose input value. Use with caution.
|
|
246
|
+
get readInput() {
|
|
247
|
+
return this._read;
|
|
248
|
+
}
|
|
249
|
+
get update() {
|
|
250
|
+
return this.getStringAttribute('update');
|
|
251
|
+
}
|
|
252
|
+
set update(value) {
|
|
253
|
+
this._update = value;
|
|
254
|
+
}
|
|
255
|
+
resetUpdate() {
|
|
256
|
+
this._update = undefined;
|
|
257
|
+
}
|
|
258
|
+
// Temporarily expose input value. Use with caution.
|
|
259
|
+
get updateInput() {
|
|
260
|
+
return this._update;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
exports.GroupTimeoutsOutputReference = GroupTimeoutsOutputReference;
|
|
264
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
265
|
+
GroupTimeoutsOutputReference[_b] = { fqn: "@cdktn/provider-azuread.group.GroupTimeoutsOutputReference", version: "15.0.0" };
|
|
266
|
+
/**
|
|
267
|
+
* Represents a {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/group azuread_group}
|
|
268
|
+
*/
|
|
269
|
+
class Group extends cdktn.TerraformResource {
|
|
270
|
+
// ==============
|
|
271
|
+
// STATIC Methods
|
|
272
|
+
// ==============
|
|
273
|
+
/**
|
|
274
|
+
* Generates CDKTN code for importing a Group resource upon running "cdktn plan <stack-name>"
|
|
275
|
+
* @param scope The scope in which to define this construct
|
|
276
|
+
* @param importToId The construct id used in the generated config for the Group to import
|
|
277
|
+
* @param importFromId The id of the existing Group that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/group#import import section} in the documentation of this resource for the id to use
|
|
278
|
+
* @param provider? Optional instance of the provider where the Group to import is found
|
|
279
|
+
*/
|
|
280
|
+
static generateConfigForImport(scope, importToId, importFromId, provider) {
|
|
281
|
+
return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "azuread_group", importId: importFromId, provider });
|
|
282
|
+
}
|
|
283
|
+
// ===========
|
|
284
|
+
// INITIALIZER
|
|
285
|
+
// ===========
|
|
286
|
+
/**
|
|
287
|
+
* Create a new {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/group azuread_group} Resource
|
|
288
|
+
*
|
|
289
|
+
* @param scope The scope in which to define this construct
|
|
290
|
+
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
|
|
291
|
+
* @param options GroupConfig
|
|
292
|
+
*/
|
|
293
|
+
constructor(scope, id, config) {
|
|
294
|
+
super(scope, id, {
|
|
295
|
+
terraformResourceType: 'azuread_group',
|
|
296
|
+
terraformGeneratorMetadata: {
|
|
297
|
+
providerName: 'azuread',
|
|
298
|
+
providerVersion: '3.7.0',
|
|
299
|
+
providerVersionConstraint: '~> 3.0'
|
|
300
|
+
},
|
|
301
|
+
provider: config.provider,
|
|
302
|
+
dependsOn: config.dependsOn,
|
|
303
|
+
count: config.count,
|
|
304
|
+
lifecycle: config.lifecycle,
|
|
305
|
+
provisioners: config.provisioners,
|
|
306
|
+
connection: config.connection,
|
|
307
|
+
forEach: config.forEach
|
|
308
|
+
});
|
|
309
|
+
// dynamic_membership - computed: false, optional: true, required: false
|
|
310
|
+
this._dynamicMembership = new GroupDynamicMembershipOutputReference(this, "dynamic_membership");
|
|
311
|
+
// timeouts - computed: false, optional: true, required: false
|
|
312
|
+
this._timeouts = new GroupTimeoutsOutputReference(this, "timeouts");
|
|
313
|
+
this._administrativeUnitIds = config.administrativeUnitIds;
|
|
314
|
+
this._assignableToRole = config.assignableToRole;
|
|
315
|
+
this._autoSubscribeNewMembers = config.autoSubscribeNewMembers;
|
|
316
|
+
this._behaviors = config.behaviors;
|
|
317
|
+
this._description = config.description;
|
|
318
|
+
this._displayName = config.displayName;
|
|
319
|
+
this._externalSendersAllowed = config.externalSendersAllowed;
|
|
320
|
+
this._hideFromAddressLists = config.hideFromAddressLists;
|
|
321
|
+
this._hideFromOutlookClients = config.hideFromOutlookClients;
|
|
322
|
+
this._id = config.id;
|
|
323
|
+
this._mailEnabled = config.mailEnabled;
|
|
324
|
+
this._mailNickname = config.mailNickname;
|
|
325
|
+
this._members = config.members;
|
|
326
|
+
this._onpremisesGroupType = config.onpremisesGroupType;
|
|
327
|
+
this._owners = config.owners;
|
|
328
|
+
this._preventDuplicateNames = config.preventDuplicateNames;
|
|
329
|
+
this._provisioningOptions = config.provisioningOptions;
|
|
330
|
+
this._securityEnabled = config.securityEnabled;
|
|
331
|
+
this._theme = config.theme;
|
|
332
|
+
this._types = config.types;
|
|
333
|
+
this._visibility = config.visibility;
|
|
334
|
+
this._writebackEnabled = config.writebackEnabled;
|
|
335
|
+
this._dynamicMembership.internalValue = config.dynamicMembership;
|
|
336
|
+
this._timeouts.internalValue = config.timeouts;
|
|
337
|
+
}
|
|
338
|
+
get administrativeUnitIds() {
|
|
339
|
+
return cdktn.Fn.tolist(this.getListAttribute('administrative_unit_ids'));
|
|
340
|
+
}
|
|
341
|
+
set administrativeUnitIds(value) {
|
|
342
|
+
this._administrativeUnitIds = value;
|
|
343
|
+
}
|
|
344
|
+
resetAdministrativeUnitIds() {
|
|
345
|
+
this._administrativeUnitIds = undefined;
|
|
346
|
+
}
|
|
347
|
+
// Temporarily expose input value. Use with caution.
|
|
348
|
+
get administrativeUnitIdsInput() {
|
|
349
|
+
return this._administrativeUnitIds;
|
|
350
|
+
}
|
|
351
|
+
get assignableToRole() {
|
|
352
|
+
return this.getBooleanAttribute('assignable_to_role');
|
|
353
|
+
}
|
|
354
|
+
set assignableToRole(value) {
|
|
355
|
+
this._assignableToRole = value;
|
|
356
|
+
}
|
|
357
|
+
resetAssignableToRole() {
|
|
358
|
+
this._assignableToRole = undefined;
|
|
359
|
+
}
|
|
360
|
+
// Temporarily expose input value. Use with caution.
|
|
361
|
+
get assignableToRoleInput() {
|
|
362
|
+
return this._assignableToRole;
|
|
363
|
+
}
|
|
364
|
+
get autoSubscribeNewMembers() {
|
|
365
|
+
return this.getBooleanAttribute('auto_subscribe_new_members');
|
|
366
|
+
}
|
|
367
|
+
set autoSubscribeNewMembers(value) {
|
|
368
|
+
this._autoSubscribeNewMembers = value;
|
|
369
|
+
}
|
|
370
|
+
resetAutoSubscribeNewMembers() {
|
|
371
|
+
this._autoSubscribeNewMembers = undefined;
|
|
372
|
+
}
|
|
373
|
+
// Temporarily expose input value. Use with caution.
|
|
374
|
+
get autoSubscribeNewMembersInput() {
|
|
375
|
+
return this._autoSubscribeNewMembers;
|
|
376
|
+
}
|
|
377
|
+
get behaviors() {
|
|
378
|
+
return cdktn.Fn.tolist(this.getListAttribute('behaviors'));
|
|
379
|
+
}
|
|
380
|
+
set behaviors(value) {
|
|
381
|
+
this._behaviors = value;
|
|
382
|
+
}
|
|
383
|
+
resetBehaviors() {
|
|
384
|
+
this._behaviors = undefined;
|
|
385
|
+
}
|
|
386
|
+
// Temporarily expose input value. Use with caution.
|
|
387
|
+
get behaviorsInput() {
|
|
388
|
+
return this._behaviors;
|
|
389
|
+
}
|
|
390
|
+
get description() {
|
|
391
|
+
return this.getStringAttribute('description');
|
|
392
|
+
}
|
|
393
|
+
set description(value) {
|
|
394
|
+
this._description = value;
|
|
395
|
+
}
|
|
396
|
+
resetDescription() {
|
|
397
|
+
this._description = undefined;
|
|
398
|
+
}
|
|
399
|
+
// Temporarily expose input value. Use with caution.
|
|
400
|
+
get descriptionInput() {
|
|
401
|
+
return this._description;
|
|
402
|
+
}
|
|
403
|
+
get displayName() {
|
|
404
|
+
return this.getStringAttribute('display_name');
|
|
405
|
+
}
|
|
406
|
+
set displayName(value) {
|
|
407
|
+
this._displayName = value;
|
|
408
|
+
}
|
|
409
|
+
// Temporarily expose input value. Use with caution.
|
|
410
|
+
get displayNameInput() {
|
|
411
|
+
return this._displayName;
|
|
412
|
+
}
|
|
413
|
+
get externalSendersAllowed() {
|
|
414
|
+
return this.getBooleanAttribute('external_senders_allowed');
|
|
415
|
+
}
|
|
416
|
+
set externalSendersAllowed(value) {
|
|
417
|
+
this._externalSendersAllowed = value;
|
|
418
|
+
}
|
|
419
|
+
resetExternalSendersAllowed() {
|
|
420
|
+
this._externalSendersAllowed = undefined;
|
|
421
|
+
}
|
|
422
|
+
// Temporarily expose input value. Use with caution.
|
|
423
|
+
get externalSendersAllowedInput() {
|
|
424
|
+
return this._externalSendersAllowed;
|
|
425
|
+
}
|
|
426
|
+
get hideFromAddressLists() {
|
|
427
|
+
return this.getBooleanAttribute('hide_from_address_lists');
|
|
428
|
+
}
|
|
429
|
+
set hideFromAddressLists(value) {
|
|
430
|
+
this._hideFromAddressLists = value;
|
|
431
|
+
}
|
|
432
|
+
resetHideFromAddressLists() {
|
|
433
|
+
this._hideFromAddressLists = undefined;
|
|
434
|
+
}
|
|
435
|
+
// Temporarily expose input value. Use with caution.
|
|
436
|
+
get hideFromAddressListsInput() {
|
|
437
|
+
return this._hideFromAddressLists;
|
|
438
|
+
}
|
|
439
|
+
get hideFromOutlookClients() {
|
|
440
|
+
return this.getBooleanAttribute('hide_from_outlook_clients');
|
|
441
|
+
}
|
|
442
|
+
set hideFromOutlookClients(value) {
|
|
443
|
+
this._hideFromOutlookClients = value;
|
|
444
|
+
}
|
|
445
|
+
resetHideFromOutlookClients() {
|
|
446
|
+
this._hideFromOutlookClients = undefined;
|
|
447
|
+
}
|
|
448
|
+
// Temporarily expose input value. Use with caution.
|
|
449
|
+
get hideFromOutlookClientsInput() {
|
|
450
|
+
return this._hideFromOutlookClients;
|
|
451
|
+
}
|
|
452
|
+
get id() {
|
|
453
|
+
return this.getStringAttribute('id');
|
|
454
|
+
}
|
|
455
|
+
set id(value) {
|
|
456
|
+
this._id = value;
|
|
457
|
+
}
|
|
458
|
+
resetId() {
|
|
459
|
+
this._id = undefined;
|
|
460
|
+
}
|
|
461
|
+
// Temporarily expose input value. Use with caution.
|
|
462
|
+
get idInput() {
|
|
463
|
+
return this._id;
|
|
464
|
+
}
|
|
465
|
+
// mail - computed: true, optional: false, required: false
|
|
466
|
+
get mail() {
|
|
467
|
+
return this.getStringAttribute('mail');
|
|
468
|
+
}
|
|
469
|
+
get mailEnabled() {
|
|
470
|
+
return this.getBooleanAttribute('mail_enabled');
|
|
471
|
+
}
|
|
472
|
+
set mailEnabled(value) {
|
|
473
|
+
this._mailEnabled = value;
|
|
474
|
+
}
|
|
475
|
+
resetMailEnabled() {
|
|
476
|
+
this._mailEnabled = undefined;
|
|
477
|
+
}
|
|
478
|
+
// Temporarily expose input value. Use with caution.
|
|
479
|
+
get mailEnabledInput() {
|
|
480
|
+
return this._mailEnabled;
|
|
481
|
+
}
|
|
482
|
+
get mailNickname() {
|
|
483
|
+
return this.getStringAttribute('mail_nickname');
|
|
484
|
+
}
|
|
485
|
+
set mailNickname(value) {
|
|
486
|
+
this._mailNickname = value;
|
|
487
|
+
}
|
|
488
|
+
resetMailNickname() {
|
|
489
|
+
this._mailNickname = undefined;
|
|
490
|
+
}
|
|
491
|
+
// Temporarily expose input value. Use with caution.
|
|
492
|
+
get mailNicknameInput() {
|
|
493
|
+
return this._mailNickname;
|
|
494
|
+
}
|
|
495
|
+
get members() {
|
|
496
|
+
return cdktn.Fn.tolist(this.getListAttribute('members'));
|
|
497
|
+
}
|
|
498
|
+
set members(value) {
|
|
499
|
+
this._members = value;
|
|
500
|
+
}
|
|
501
|
+
resetMembers() {
|
|
502
|
+
this._members = undefined;
|
|
503
|
+
}
|
|
504
|
+
// Temporarily expose input value. Use with caution.
|
|
505
|
+
get membersInput() {
|
|
506
|
+
return this._members;
|
|
507
|
+
}
|
|
508
|
+
// object_id - computed: true, optional: false, required: false
|
|
509
|
+
get objectId() {
|
|
510
|
+
return this.getStringAttribute('object_id');
|
|
511
|
+
}
|
|
512
|
+
// onpremises_domain_name - computed: true, optional: false, required: false
|
|
513
|
+
get onpremisesDomainName() {
|
|
514
|
+
return this.getStringAttribute('onpremises_domain_name');
|
|
515
|
+
}
|
|
516
|
+
get onpremisesGroupType() {
|
|
517
|
+
return this.getStringAttribute('onpremises_group_type');
|
|
518
|
+
}
|
|
519
|
+
set onpremisesGroupType(value) {
|
|
520
|
+
this._onpremisesGroupType = value;
|
|
521
|
+
}
|
|
522
|
+
resetOnpremisesGroupType() {
|
|
523
|
+
this._onpremisesGroupType = undefined;
|
|
524
|
+
}
|
|
525
|
+
// Temporarily expose input value. Use with caution.
|
|
526
|
+
get onpremisesGroupTypeInput() {
|
|
527
|
+
return this._onpremisesGroupType;
|
|
528
|
+
}
|
|
529
|
+
// onpremises_netbios_name - computed: true, optional: false, required: false
|
|
530
|
+
get onpremisesNetbiosName() {
|
|
531
|
+
return this.getStringAttribute('onpremises_netbios_name');
|
|
532
|
+
}
|
|
533
|
+
// onpremises_sam_account_name - computed: true, optional: false, required: false
|
|
534
|
+
get onpremisesSamAccountName() {
|
|
535
|
+
return this.getStringAttribute('onpremises_sam_account_name');
|
|
536
|
+
}
|
|
537
|
+
// onpremises_security_identifier - computed: true, optional: false, required: false
|
|
538
|
+
get onpremisesSecurityIdentifier() {
|
|
539
|
+
return this.getStringAttribute('onpremises_security_identifier');
|
|
540
|
+
}
|
|
541
|
+
// onpremises_sync_enabled - computed: true, optional: false, required: false
|
|
542
|
+
get onpremisesSyncEnabled() {
|
|
543
|
+
return this.getBooleanAttribute('onpremises_sync_enabled');
|
|
544
|
+
}
|
|
545
|
+
get owners() {
|
|
546
|
+
return cdktn.Fn.tolist(this.getListAttribute('owners'));
|
|
547
|
+
}
|
|
548
|
+
set owners(value) {
|
|
549
|
+
this._owners = value;
|
|
550
|
+
}
|
|
551
|
+
resetOwners() {
|
|
552
|
+
this._owners = undefined;
|
|
553
|
+
}
|
|
554
|
+
// Temporarily expose input value. Use with caution.
|
|
555
|
+
get ownersInput() {
|
|
556
|
+
return this._owners;
|
|
557
|
+
}
|
|
558
|
+
// preferred_language - computed: true, optional: false, required: false
|
|
559
|
+
get preferredLanguage() {
|
|
560
|
+
return this.getStringAttribute('preferred_language');
|
|
561
|
+
}
|
|
562
|
+
get preventDuplicateNames() {
|
|
563
|
+
return this.getBooleanAttribute('prevent_duplicate_names');
|
|
564
|
+
}
|
|
565
|
+
set preventDuplicateNames(value) {
|
|
566
|
+
this._preventDuplicateNames = value;
|
|
567
|
+
}
|
|
568
|
+
resetPreventDuplicateNames() {
|
|
569
|
+
this._preventDuplicateNames = undefined;
|
|
570
|
+
}
|
|
571
|
+
// Temporarily expose input value. Use with caution.
|
|
572
|
+
get preventDuplicateNamesInput() {
|
|
573
|
+
return this._preventDuplicateNames;
|
|
574
|
+
}
|
|
575
|
+
get provisioningOptions() {
|
|
576
|
+
return cdktn.Fn.tolist(this.getListAttribute('provisioning_options'));
|
|
577
|
+
}
|
|
578
|
+
set provisioningOptions(value) {
|
|
579
|
+
this._provisioningOptions = value;
|
|
580
|
+
}
|
|
581
|
+
resetProvisioningOptions() {
|
|
582
|
+
this._provisioningOptions = undefined;
|
|
583
|
+
}
|
|
584
|
+
// Temporarily expose input value. Use with caution.
|
|
585
|
+
get provisioningOptionsInput() {
|
|
586
|
+
return this._provisioningOptions;
|
|
587
|
+
}
|
|
588
|
+
// proxy_addresses - computed: true, optional: false, required: false
|
|
589
|
+
get proxyAddresses() {
|
|
590
|
+
return this.getListAttribute('proxy_addresses');
|
|
591
|
+
}
|
|
592
|
+
get securityEnabled() {
|
|
593
|
+
return this.getBooleanAttribute('security_enabled');
|
|
594
|
+
}
|
|
595
|
+
set securityEnabled(value) {
|
|
596
|
+
this._securityEnabled = value;
|
|
597
|
+
}
|
|
598
|
+
resetSecurityEnabled() {
|
|
599
|
+
this._securityEnabled = undefined;
|
|
600
|
+
}
|
|
601
|
+
// Temporarily expose input value. Use with caution.
|
|
602
|
+
get securityEnabledInput() {
|
|
603
|
+
return this._securityEnabled;
|
|
604
|
+
}
|
|
605
|
+
get theme() {
|
|
606
|
+
return this.getStringAttribute('theme');
|
|
607
|
+
}
|
|
608
|
+
set theme(value) {
|
|
609
|
+
this._theme = value;
|
|
610
|
+
}
|
|
611
|
+
resetTheme() {
|
|
612
|
+
this._theme = undefined;
|
|
613
|
+
}
|
|
614
|
+
// Temporarily expose input value. Use with caution.
|
|
615
|
+
get themeInput() {
|
|
616
|
+
return this._theme;
|
|
617
|
+
}
|
|
618
|
+
get types() {
|
|
619
|
+
return cdktn.Fn.tolist(this.getListAttribute('types'));
|
|
620
|
+
}
|
|
621
|
+
set types(value) {
|
|
622
|
+
this._types = value;
|
|
623
|
+
}
|
|
624
|
+
resetTypes() {
|
|
625
|
+
this._types = undefined;
|
|
626
|
+
}
|
|
627
|
+
// Temporarily expose input value. Use with caution.
|
|
628
|
+
get typesInput() {
|
|
629
|
+
return this._types;
|
|
630
|
+
}
|
|
631
|
+
get visibility() {
|
|
632
|
+
return this.getStringAttribute('visibility');
|
|
633
|
+
}
|
|
634
|
+
set visibility(value) {
|
|
635
|
+
this._visibility = value;
|
|
636
|
+
}
|
|
637
|
+
resetVisibility() {
|
|
638
|
+
this._visibility = undefined;
|
|
639
|
+
}
|
|
640
|
+
// Temporarily expose input value. Use with caution.
|
|
641
|
+
get visibilityInput() {
|
|
642
|
+
return this._visibility;
|
|
643
|
+
}
|
|
644
|
+
get writebackEnabled() {
|
|
645
|
+
return this.getBooleanAttribute('writeback_enabled');
|
|
646
|
+
}
|
|
647
|
+
set writebackEnabled(value) {
|
|
648
|
+
this._writebackEnabled = value;
|
|
649
|
+
}
|
|
650
|
+
resetWritebackEnabled() {
|
|
651
|
+
this._writebackEnabled = undefined;
|
|
652
|
+
}
|
|
653
|
+
// Temporarily expose input value. Use with caution.
|
|
654
|
+
get writebackEnabledInput() {
|
|
655
|
+
return this._writebackEnabled;
|
|
656
|
+
}
|
|
657
|
+
get dynamicMembership() {
|
|
658
|
+
return this._dynamicMembership;
|
|
659
|
+
}
|
|
660
|
+
putDynamicMembership(value) {
|
|
661
|
+
this._dynamicMembership.internalValue = value;
|
|
662
|
+
}
|
|
663
|
+
resetDynamicMembership() {
|
|
664
|
+
this._dynamicMembership.internalValue = undefined;
|
|
665
|
+
}
|
|
666
|
+
// Temporarily expose input value. Use with caution.
|
|
667
|
+
get dynamicMembershipInput() {
|
|
668
|
+
return this._dynamicMembership.internalValue;
|
|
669
|
+
}
|
|
670
|
+
get timeouts() {
|
|
671
|
+
return this._timeouts;
|
|
672
|
+
}
|
|
673
|
+
putTimeouts(value) {
|
|
674
|
+
this._timeouts.internalValue = value;
|
|
675
|
+
}
|
|
676
|
+
resetTimeouts() {
|
|
677
|
+
this._timeouts.internalValue = undefined;
|
|
678
|
+
}
|
|
679
|
+
// Temporarily expose input value. Use with caution.
|
|
680
|
+
get timeoutsInput() {
|
|
681
|
+
return this._timeouts.internalValue;
|
|
682
|
+
}
|
|
683
|
+
// =========
|
|
684
|
+
// SYNTHESIS
|
|
685
|
+
// =========
|
|
686
|
+
synthesizeAttributes() {
|
|
687
|
+
return {
|
|
688
|
+
administrative_unit_ids: cdktn.listMapper(cdktn.stringToTerraform, false)(this._administrativeUnitIds),
|
|
689
|
+
assignable_to_role: cdktn.booleanToTerraform(this._assignableToRole),
|
|
690
|
+
auto_subscribe_new_members: cdktn.booleanToTerraform(this._autoSubscribeNewMembers),
|
|
691
|
+
behaviors: cdktn.listMapper(cdktn.stringToTerraform, false)(this._behaviors),
|
|
692
|
+
description: cdktn.stringToTerraform(this._description),
|
|
693
|
+
display_name: cdktn.stringToTerraform(this._displayName),
|
|
694
|
+
external_senders_allowed: cdktn.booleanToTerraform(this._externalSendersAllowed),
|
|
695
|
+
hide_from_address_lists: cdktn.booleanToTerraform(this._hideFromAddressLists),
|
|
696
|
+
hide_from_outlook_clients: cdktn.booleanToTerraform(this._hideFromOutlookClients),
|
|
697
|
+
id: cdktn.stringToTerraform(this._id),
|
|
698
|
+
mail_enabled: cdktn.booleanToTerraform(this._mailEnabled),
|
|
699
|
+
mail_nickname: cdktn.stringToTerraform(this._mailNickname),
|
|
700
|
+
members: cdktn.listMapper(cdktn.stringToTerraform, false)(this._members),
|
|
701
|
+
onpremises_group_type: cdktn.stringToTerraform(this._onpremisesGroupType),
|
|
702
|
+
owners: cdktn.listMapper(cdktn.stringToTerraform, false)(this._owners),
|
|
703
|
+
prevent_duplicate_names: cdktn.booleanToTerraform(this._preventDuplicateNames),
|
|
704
|
+
provisioning_options: cdktn.listMapper(cdktn.stringToTerraform, false)(this._provisioningOptions),
|
|
705
|
+
security_enabled: cdktn.booleanToTerraform(this._securityEnabled),
|
|
706
|
+
theme: cdktn.stringToTerraform(this._theme),
|
|
707
|
+
types: cdktn.listMapper(cdktn.stringToTerraform, false)(this._types),
|
|
708
|
+
visibility: cdktn.stringToTerraform(this._visibility),
|
|
709
|
+
writeback_enabled: cdktn.booleanToTerraform(this._writebackEnabled),
|
|
710
|
+
dynamic_membership: groupDynamicMembershipToTerraform(this._dynamicMembership.internalValue),
|
|
711
|
+
timeouts: groupTimeoutsToTerraform(this._timeouts.internalValue),
|
|
712
|
+
};
|
|
713
|
+
}
|
|
714
|
+
synthesizeHclAttributes() {
|
|
715
|
+
const attrs = {
|
|
716
|
+
administrative_unit_ids: {
|
|
717
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._administrativeUnitIds),
|
|
718
|
+
isBlock: false,
|
|
719
|
+
type: "set",
|
|
720
|
+
storageClassType: "stringList",
|
|
721
|
+
},
|
|
722
|
+
assignable_to_role: {
|
|
723
|
+
value: cdktn.booleanToHclTerraform(this._assignableToRole),
|
|
724
|
+
isBlock: false,
|
|
725
|
+
type: "simple",
|
|
726
|
+
storageClassType: "boolean",
|
|
727
|
+
},
|
|
728
|
+
auto_subscribe_new_members: {
|
|
729
|
+
value: cdktn.booleanToHclTerraform(this._autoSubscribeNewMembers),
|
|
730
|
+
isBlock: false,
|
|
731
|
+
type: "simple",
|
|
732
|
+
storageClassType: "boolean",
|
|
733
|
+
},
|
|
734
|
+
behaviors: {
|
|
735
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._behaviors),
|
|
736
|
+
isBlock: false,
|
|
737
|
+
type: "set",
|
|
738
|
+
storageClassType: "stringList",
|
|
739
|
+
},
|
|
740
|
+
description: {
|
|
741
|
+
value: cdktn.stringToHclTerraform(this._description),
|
|
742
|
+
isBlock: false,
|
|
743
|
+
type: "simple",
|
|
744
|
+
storageClassType: "string",
|
|
745
|
+
},
|
|
746
|
+
display_name: {
|
|
747
|
+
value: cdktn.stringToHclTerraform(this._displayName),
|
|
748
|
+
isBlock: false,
|
|
749
|
+
type: "simple",
|
|
750
|
+
storageClassType: "string",
|
|
751
|
+
},
|
|
752
|
+
external_senders_allowed: {
|
|
753
|
+
value: cdktn.booleanToHclTerraform(this._externalSendersAllowed),
|
|
754
|
+
isBlock: false,
|
|
755
|
+
type: "simple",
|
|
756
|
+
storageClassType: "boolean",
|
|
757
|
+
},
|
|
758
|
+
hide_from_address_lists: {
|
|
759
|
+
value: cdktn.booleanToHclTerraform(this._hideFromAddressLists),
|
|
760
|
+
isBlock: false,
|
|
761
|
+
type: "simple",
|
|
762
|
+
storageClassType: "boolean",
|
|
763
|
+
},
|
|
764
|
+
hide_from_outlook_clients: {
|
|
765
|
+
value: cdktn.booleanToHclTerraform(this._hideFromOutlookClients),
|
|
766
|
+
isBlock: false,
|
|
767
|
+
type: "simple",
|
|
768
|
+
storageClassType: "boolean",
|
|
769
|
+
},
|
|
770
|
+
id: {
|
|
771
|
+
value: cdktn.stringToHclTerraform(this._id),
|
|
772
|
+
isBlock: false,
|
|
773
|
+
type: "simple",
|
|
774
|
+
storageClassType: "string",
|
|
775
|
+
},
|
|
776
|
+
mail_enabled: {
|
|
777
|
+
value: cdktn.booleanToHclTerraform(this._mailEnabled),
|
|
778
|
+
isBlock: false,
|
|
779
|
+
type: "simple",
|
|
780
|
+
storageClassType: "boolean",
|
|
781
|
+
},
|
|
782
|
+
mail_nickname: {
|
|
783
|
+
value: cdktn.stringToHclTerraform(this._mailNickname),
|
|
784
|
+
isBlock: false,
|
|
785
|
+
type: "simple",
|
|
786
|
+
storageClassType: "string",
|
|
787
|
+
},
|
|
788
|
+
members: {
|
|
789
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._members),
|
|
790
|
+
isBlock: false,
|
|
791
|
+
type: "set",
|
|
792
|
+
storageClassType: "stringList",
|
|
793
|
+
},
|
|
794
|
+
onpremises_group_type: {
|
|
795
|
+
value: cdktn.stringToHclTerraform(this._onpremisesGroupType),
|
|
796
|
+
isBlock: false,
|
|
797
|
+
type: "simple",
|
|
798
|
+
storageClassType: "string",
|
|
799
|
+
},
|
|
800
|
+
owners: {
|
|
801
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._owners),
|
|
802
|
+
isBlock: false,
|
|
803
|
+
type: "set",
|
|
804
|
+
storageClassType: "stringList",
|
|
805
|
+
},
|
|
806
|
+
prevent_duplicate_names: {
|
|
807
|
+
value: cdktn.booleanToHclTerraform(this._preventDuplicateNames),
|
|
808
|
+
isBlock: false,
|
|
809
|
+
type: "simple",
|
|
810
|
+
storageClassType: "boolean",
|
|
811
|
+
},
|
|
812
|
+
provisioning_options: {
|
|
813
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._provisioningOptions),
|
|
814
|
+
isBlock: false,
|
|
815
|
+
type: "set",
|
|
816
|
+
storageClassType: "stringList",
|
|
817
|
+
},
|
|
818
|
+
security_enabled: {
|
|
819
|
+
value: cdktn.booleanToHclTerraform(this._securityEnabled),
|
|
820
|
+
isBlock: false,
|
|
821
|
+
type: "simple",
|
|
822
|
+
storageClassType: "boolean",
|
|
823
|
+
},
|
|
824
|
+
theme: {
|
|
825
|
+
value: cdktn.stringToHclTerraform(this._theme),
|
|
826
|
+
isBlock: false,
|
|
827
|
+
type: "simple",
|
|
828
|
+
storageClassType: "string",
|
|
829
|
+
},
|
|
830
|
+
types: {
|
|
831
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._types),
|
|
832
|
+
isBlock: false,
|
|
833
|
+
type: "set",
|
|
834
|
+
storageClassType: "stringList",
|
|
835
|
+
},
|
|
836
|
+
visibility: {
|
|
837
|
+
value: cdktn.stringToHclTerraform(this._visibility),
|
|
838
|
+
isBlock: false,
|
|
839
|
+
type: "simple",
|
|
840
|
+
storageClassType: "string",
|
|
841
|
+
},
|
|
842
|
+
writeback_enabled: {
|
|
843
|
+
value: cdktn.booleanToHclTerraform(this._writebackEnabled),
|
|
844
|
+
isBlock: false,
|
|
845
|
+
type: "simple",
|
|
846
|
+
storageClassType: "boolean",
|
|
847
|
+
},
|
|
848
|
+
dynamic_membership: {
|
|
849
|
+
value: groupDynamicMembershipToHclTerraform(this._dynamicMembership.internalValue),
|
|
850
|
+
isBlock: true,
|
|
851
|
+
type: "list",
|
|
852
|
+
storageClassType: "GroupDynamicMembershipList",
|
|
853
|
+
},
|
|
854
|
+
timeouts: {
|
|
855
|
+
value: groupTimeoutsToHclTerraform(this._timeouts.internalValue),
|
|
856
|
+
isBlock: true,
|
|
857
|
+
type: "struct",
|
|
858
|
+
storageClassType: "GroupTimeouts",
|
|
859
|
+
},
|
|
860
|
+
};
|
|
861
|
+
// remove undefined attributes
|
|
862
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
exports.Group = Group;
|
|
866
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
867
|
+
Group[_c] = { fqn: "@cdktn/provider-azuread.group.Group", version: "15.0.0" };
|
|
868
|
+
// =================
|
|
869
|
+
// STATIC PROPERTIES
|
|
870
|
+
// =================
|
|
871
|
+
Group.tfResourceType = "azuread_group";
|
|
872
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ3JvdXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTZLQSw4RUFTQztBQUdELG9GQXNCQztBQXFGRCw0REFXQztBQUdELGtFQWtDQzs7QUEzVUQsK0JBQStCO0FBb0svQixTQUFnQixpQ0FBaUMsQ0FBQyxNQUF1RTtJQUN2SCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxNQUFNLENBQUM7SUFBQyxDQUFDO0lBQzVGLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvSEFBb0gsQ0FBQyxDQUFDO0lBQ3hJLENBQUM7SUFDRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2xELElBQUksRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLElBQUksQ0FBQztLQUM1QyxDQUFBO0FBQ0gsQ0FBQztBQUdELFNBQWdCLG9DQUFvQyxDQUFDLE1BQXVFO0lBQzFILElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHO1FBQ1osT0FBTyxFQUFFO1lBQ1AsS0FB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YixJQUFJLEVBQUUsUUFBUTtnQkFDZCxnQkFBZ0IsRUFBRSxlQUFlO2FBQ2xDO1NBQ0YsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBRSxDQUFDLENBQUE7SUFDNUgsQ0FBQzs7QUEvcUJILHNCQWdyQkM7OztBQTlxQkMsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDRyxvQkFBYyxHQUFHLGVBQWUsQUFBbEIsQ0FBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAyMSwgMjAyNlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG4vLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXBcbi8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjZGt0biBmcm9tICdjZGt0bic7XG5cbi8vIENvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cENvbmZpZyBleHRlbmRzIGNka3RuLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgKiBUaGUgYWRtaW5pc3RyYXRpdmUgdW5pdCBJRHMgaW4gd2hpY2ggdGhlIGdyb3VwIHNob3VsZCBiZS4gSWYgZW1wdHksIHRoZSBncm91cCB3aWxsIGJlIGNyZWF0ZWQgYXQgdGhlIHRlbmFudCBsZXZlbC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2dyb3VwI2FkbWluaXN0cmF0aXZlX3VuaXRfaWRzIEdyb3VwI2FkbWluaXN0cmF0aXZlX3VuaXRfaWRzfVxuICAqL1xuICByZWFkb25seSBhZG1pbmlzdHJhdGl2ZVVuaXRJZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBncm91cCBjYW4gYmUgYXNzaWduZWQgdG8gYW4gQXp1cmUgQWN0aXZlIERpcmVjdG9yeSByb2xlLiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIGB0cnVlYCBmb3Igc2VjdXJpdHktZW5hYmxlZCBncm91cHMuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNhc3NpZ25hYmxlX3RvX3JvbGUgR3JvdXAjYXNzaWduYWJsZV90b19yb2xlfVxuICAqL1xuICByZWFkb25seSBhc3NpZ25hYmxlVG9Sb2xlPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBJbmRpY2F0ZXMgd2hldGhlciBuZXcgbWVtYmVycyBhZGRlZCB0byB0aGUgZ3JvdXAgd2lsbCBiZSBhdXRvLXN1YnNjcmliZWQgdG8gcmVjZWl2ZSBlbWFpbCBub3RpZmljYXRpb25zLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjYXV0b19zdWJzY3JpYmVfbmV3X21lbWJlcnMgR3JvdXAjYXV0b19zdWJzY3JpYmVfbmV3X21lbWJlcnN9XG4gICovXG4gIHJlYWRvbmx5IGF1dG9TdWJzY3JpYmVOZXdNZW1iZXJzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBUaGUgZ3JvdXAgYmVoYXZpb3VycyBmb3IgYSBNaWNyb3NvZnQgMzY1IGdyb3VwXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNiZWhhdmlvcnMgR3JvdXAjYmVoYXZpb3JzfVxuICAqL1xuICByZWFkb25seSBiZWhhdmlvcnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICogVGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgZ3JvdXBcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2dyb3VwI2Rlc2NyaXB0aW9uIEdyb3VwI2Rlc2NyaXB0aW9ufVxuICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhlIGdyb3VwXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNkaXNwbGF5X25hbWUgR3JvdXAjZGlzcGxheV9uYW1lfVxuICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAvKipcbiAgKiBJbmRpY2F0ZXMgd2hldGhlciBwZW9wbGUgZXh0ZXJuYWwgdG8gdGhlIG9yZ2FuaXphdGlvbiBjYW4gc2VuZCBtZXNzYWdlcyB0byB0aGUgZ3JvdXAuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNleHRlcm5hbF9zZW5kZXJzX2FsbG93ZWQgR3JvdXAjZXh0ZXJuYWxfc2VuZGVyc19hbGxvd2VkfVxuICAqL1xuICByZWFkb25seSBleHRlcm5hbFNlbmRlcnNBbGxvd2VkPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZ3JvdXAgaXMgZGlzcGxheWVkIGluIGNlcnRhaW4gcGFydHMgb2YgdGhlIE91dGxvb2sgdXNlciBpbnRlcmZhY2U6IGluIHRoZSBBZGRyZXNzIEJvb2ssIGluIGFkZHJlc3MgbGlzdHMgZm9yIHNlbGVjdGluZyBtZXNzYWdlIHJlY2lwaWVudHMsIGFuZCBpbiB0aGUgQnJvd3NlIEdyb3VwcyBkaWFsb2cgZm9yIHNlYXJjaGluZyBncm91cHMuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNoaWRlX2Zyb21fYWRkcmVzc19saXN0cyBHcm91cCNoaWRlX2Zyb21fYWRkcmVzc19saXN0c31cbiAgKi9cbiAgcmVhZG9ubHkgaGlkZUZyb21BZGRyZXNzTGlzdHM/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBncm91cCBpcyBkaXNwbGF5ZWQgaW4gT3V0bG9vayBjbGllbnRzLCBzdWNoIGFzIE91dGxvb2sgZm9yIFdpbmRvd3MgYW5kIE91dGxvb2sgb24gdGhlIHdlYi5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2dyb3VwI2hpZGVfZnJvbV9vdXRsb29rX2NsaWVudHMgR3JvdXAjaGlkZV9mcm9tX291dGxvb2tfY2xpZW50c31cbiAgKi9cbiAgcmVhZG9ubHkgaGlkZUZyb21PdXRsb29rQ2xpZW50cz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjaWQgR3JvdXAjaWR9XG4gICpcbiAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgaWQgZmllbGQgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgcmVzb3VyY2VzIGluIFRlcnJhZm9ybSBwcm92aWRlcnMgdXNpbmcgYSBUZXJyYWZvcm0gcHJvdmlkZXIgU0RLIHZlcnNpb24gYmVsb3cgMi5cbiAgKiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgbWlnaHQgbm90IGJlIHNldHRhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVyIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIGl0IHNob3VsZCBiZSBzZXR0YWJsZS5cbiAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFdoZXRoZXIgdGhlIGdyb3VwIGlzIGEgbWFpbCBlbmFibGVkLCB3aXRoIGEgc2hhcmVkIGdyb3VwIG1haWxib3guIEF0IGxlYXN0IG9uZSBvZiBgbWFpbF9lbmFibGVkYCBvciBgc2VjdXJpdHlfZW5hYmxlZGAgbXVzdCBiZSBzcGVjaWZpZWQuIEEgZ3JvdXAgY2FuIGJlIG1haWwgZW5hYmxlZCBfYW5kXyBzZWN1cml0eSBlbmFibGVkXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNtYWlsX2VuYWJsZWQgR3JvdXAjbWFpbF9lbmFibGVkfVxuICAqL1xuICByZWFkb25seSBtYWlsRW5hYmxlZD86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogVGhlIG1haWwgYWxpYXMgZm9yIHRoZSBncm91cCwgdW5pcXVlIGluIHRoZSBvcmdhbmlzYXRpb25cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2dyb3VwI21haWxfbmlja25hbWUgR3JvdXAjbWFpbF9uaWNrbmFtZX1cbiAgKi9cbiAgcmVhZG9ubHkgbWFpbE5pY2tuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgKiBBIHNldCBvZiBtZW1iZXJzIHdobyBzaG91bGQgYmUgcHJlc2VudCBpbiB0aGlzIGdyb3VwLiBTdXBwb3J0ZWQgb2JqZWN0IHR5cGVzIGFyZSBVc2VycywgR3JvdXBzIG9yIFNlcnZpY2UgUHJpbmNpcGFsc1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjbWVtYmVycyBHcm91cCNtZW1iZXJzfVxuICAqL1xuICByZWFkb25seSBtZW1iZXJzPzogc3RyaW5nW107XG4gIC8qKlxuICAqIEluZGljYXRlcyB0aGUgdGFyZ2V0IG9uLXByZW1pc2UgZ3JvdXAgdHlwZSB0aGUgZ3JvdXAgd2lsbCBiZSB3cml0dGVuIGJhY2sgYXNcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2dyb3VwI29ucHJlbWlzZXNfZ3JvdXBfdHlwZSBHcm91cCNvbnByZW1pc2VzX2dyb3VwX3R5cGV9XG4gICovXG4gIHJlYWRvbmx5IG9ucHJlbWlzZXNHcm91cFR5cGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIEEgc2V0IG9mIG93bmVycyB3aG8gb3duIHRoaXMgZ3JvdXAuIFN1cHBvcnRlZCBvYmplY3QgdHlwZXMgYXJlIFVzZXJzIG9yIFNlcnZpY2UgUHJpbmNpcGFsc1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjb3duZXJzIEdyb3VwI293bmVyc31cbiAgKi9cbiAgcmVhZG9ubHkgb3duZXJzPzogc3RyaW5nW107XG4gIC8qKlxuICAqIElmIGB0cnVlYCwgd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgYW4gZXhpc3RpbmcgZ3JvdXAgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBuYW1lXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNwcmV2ZW50X2R1cGxpY2F0ZV9uYW1lcyBHcm91cCNwcmV2ZW50X2R1cGxpY2F0ZV9uYW1lc31cbiAgKi9cbiAgcmVhZG9ubHkgcHJldmVudER1cGxpY2F0ZU5hbWVzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBUaGUgZ3JvdXAgcHJvdmlzaW9uaW5nIG9wdGlvbnMgZm9yIGEgTWljcm9zb2Z0IDM2NSBncm91cFxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjcHJvdmlzaW9uaW5nX29wdGlvbnMgR3JvdXAjcHJvdmlzaW9uaW5nX29wdGlvbnN9XG4gICovXG4gIHJlYWRvbmx5IHByb3Zpc2lvbmluZ09wdGlvbnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICogV2hldGhlciB0aGUgZ3JvdXAgaXMgYSBzZWN1cml0eSBncm91cCBmb3IgY29udHJvbGxpbmcgYWNjZXNzIHRvIGluLWFwcCByZXNvdXJjZXMuIEF0IGxlYXN0IG9uZSBvZiBgc2VjdXJpdHlfZW5hYmxlZGAgb3IgYG1haWxfZW5hYmxlZGAgbXVzdCBiZSBzcGVjaWZpZWQuIEEgZ3JvdXAgY2FuIGJlIHNlY3VyaXR5IGVuYWJsZWQgX2FuZF8gbWFpbCBlbmFibGVkXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNzZWN1cml0eV9lbmFibGVkIEdyb3VwI3NlY3VyaXR5X2VuYWJsZWR9XG4gICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5RW5hYmxlZD86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogVGhlIGNvbG91ciB0aGVtZSBmb3IgYSBNaWNyb3NvZnQgMzY1IGdyb3VwXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCN0aGVtZSBHcm91cCN0aGVtZX1cbiAgKi9cbiAgcmVhZG9ubHkgdGhlbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIEEgc2V0IG9mIGdyb3VwIHR5cGVzIHRvIGNvbmZpZ3VyZSBmb3IgdGhlIGdyb3VwLiBgVW5pZmllZGAgc3BlY2lmaWVzIGEgTWljcm9zb2Z0IDM2NSBncm91cC4gUmVxdWlyZWQgd2hlbiBgbWFpbF9lbmFibGVkYCBpcyB0cnVlXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCN0eXBlcyBHcm91cCN0eXBlc31cbiAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICogU3BlY2lmaWVzIHRoZSBncm91cCBqb2luIHBvbGljeSBhbmQgZ3JvdXAgY29udGVudCB2aXNpYmlsaXR5XG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCN2aXNpYmlsaXR5IEdyb3VwI3Zpc2liaWxpdHl9XG4gICovXG4gIHJlYWRvbmx5IHZpc2liaWxpdHk/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFdoZXRoZXIgdGhpcyBncm91cCBzaG91bGQgYmUgc3luY2VkIGZyb20gQXp1cmUgQUQgdG8gdGhlIG9uLXByZW1pc2VzIGRpcmVjdG9yeSB3aGVuIEF6dXJlIEFEIENvbm5lY3QgaXMgdXNlZFxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjd3JpdGViYWNrX2VuYWJsZWQgR3JvdXAjd3JpdGViYWNrX2VuYWJsZWR9XG4gICovXG4gIHJlYWRvbmx5IHdyaXRlYmFja0VuYWJsZWQ/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIGR5bmFtaWNfbWVtYmVyc2hpcCBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjZHluYW1pY19tZW1iZXJzaGlwIEdyb3VwI2R5bmFtaWNfbWVtYmVyc2hpcH1cbiAgKi9cbiAgcmVhZG9ubHkgZHluYW1pY01lbWJlcnNoaXA/OiBHcm91cER5bmFtaWNNZW1iZXJzaGlwO1xuICAvKipcbiAgKiB0aW1lb3V0cyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjdGltZW91dHMgR3JvdXAjdGltZW91dHN9XG4gICovXG4gIHJlYWRvbmx5IHRpbWVvdXRzPzogR3JvdXBUaW1lb3V0cztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEeW5hbWljTWVtYmVyc2hpcCB7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2dyb3VwI2VuYWJsZWQgR3JvdXAjZW5hYmxlZH1cbiAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBSdWxlIHRvIGRldGVybWluZSBtZW1iZXJzIGZvciBhIGR5bmFtaWMgZ3JvdXAuIFJlcXVpcmVkIHdoZW4gYGdyb3VwX3R5cGVzYCBjb250YWlucyAnRHluYW1pY01lbWJlcnNoaXAnXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNydWxlIEdyb3VwI3J1bGV9XG4gICovXG4gIHJlYWRvbmx5IHJ1bGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwRHluYW1pY01lbWJlcnNoaXBUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBHcm91cER5bmFtaWNNZW1iZXJzaGlwT3V0cHV0UmVmZXJlbmNlIHwgR3JvdXBEeW5hbWljTWVtYmVyc2hpcCk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0oc3RydWN0IS5lbmFibGVkKSxcbiAgICBydWxlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnJ1bGUpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwRHluYW1pY01lbWJlcnNoaXBUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBHcm91cER5bmFtaWNNZW1iZXJzaGlwT3V0cHV0UmVmZXJlbmNlIHwgR3JvdXBEeW5hbWljTWVtYmVyc2hpcCk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgZW5hYmxlZDoge1xuICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmVuYWJsZWQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgfSxcbiAgICBydWxlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5ydWxlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwRHluYW1pY01lbWJlcnNoaXBPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IEdyb3VwRHluYW1pY01lbWJlcnNoaXAgfCB1bmRlZmluZWQge1xuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZW5hYmxlZCA9IHRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9ydWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnJ1bGUgPSB0aGlzLl9ydWxlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogR3JvdXBEeW5hbWljTWVtYmVyc2hpcCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VuYWJsZWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9ydWxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLl9lbmFibGVkID0gdmFsdWUuZW5hYmxlZDtcbiAgICAgIHRoaXMuX3J1bGUgPSB2YWx1ZS5ydWxlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVuYWJsZWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfZW5hYmxlZD86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdlbmFibGVkJyk7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVkKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9lbmFibGVkID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuYWJsZWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIC8vIHJ1bGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfcnVsZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3J1bGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJ1bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3J1bGUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcnVsZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9ydWxlO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVGltZW91dHMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCNjcmVhdGUgR3JvdXAjY3JlYXRlfVxuICAqL1xuICByZWFkb25seSBjcmVhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2dyb3VwI2RlbGV0ZSBHcm91cCNkZWxldGV9XG4gICovXG4gIHJlYWRvbmx5IGRlbGV0ZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAjcmVhZCBHcm91cCNyZWFkfVxuICAqL1xuICByZWFkb25seSByZWFkPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9ncm91cCN1cGRhdGUgR3JvdXAjdXBkYXRlfVxuICAqL1xuICByZWFkb25seSB1cGRhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cFRpbWVvdXRzVG9UZXJyYWZvcm0oc3RydWN0PzogR3JvdXBUaW1lb3V0cyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5jcmVhdGUpLFxuICAgIGRlbGV0ZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5kZWxldGUpLFxuICAgIHJlYWQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEucmVhZCksXG4gICAgdXBkYXRlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnVwZGF0ZSksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBUaW1lb3V0c1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IEdyb3VwVGltZW91dHMgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgY3JlYXRlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5jcmVhdGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGRlbGV0ZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuZGVsZXRlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICByZWFkOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5yZWFkKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB1cGRhdGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnVwZGF0ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBHcm91cFRpbWVvdXRzT3V0cHV0UmVmZXJlbmNlIGV4dGVuZHMgY2RrdG4uQ29tcGxleE9iamVjdCB7XG4gIHByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICBwcml2YXRlIHJlc29sdmFibGVWYWx1ZT86IGNka3RuLklSZXNvbHZhYmxlO1xuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBHcm91cFRpbWVvdXRzIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc29sdmFibGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9jcmVhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuY3JlYXRlID0gdGhpcy5fY3JlYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVsZXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmRlbGV0ZSA9IHRoaXMuX2RlbGV0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQucmVhZCA9IHRoaXMuX3JlYWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl91cGRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQudXBkYXRlID0gdGhpcy5fdXBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogR3JvdXBUaW1lb3V0cyB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jcmVhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9kZWxldGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9yZWFkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdXBkYXRlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2NyZWF0ZSA9IHZhbHVlLmNyZWF0ZTtcbiAgICAgIHRoaXMuX2RlbGV0ZSA9IHZhbHVlLmRlbGV0ZTtcbiAgICAgIHRoaXMuX3JlYWQgPSB2YWx1ZS5yZWFkO1xuICAgICAgdGhpcy5fdXBkYXRlID0gdmFsdWUudXBkYXRlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNyZWF0ZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jcmVhdGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2NyZWF0ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgY3JlYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jcmVhdGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDcmVhdGUoKSB7XG4gICAgdGhpcy5fY3JlYXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjcmVhdGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlO1xuICB9XG5cbiAgLy8gZGVsZXRlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2RlbGV0ZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgZGVsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZGVsZXRlJyk7XG4gIH1cbiAgcHVibGljIHNldCBkZWxldGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RlbGV0ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERlbGV0ZSgpIHtcbiAgICB0aGlzLl9kZWxldGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGRlbGV0ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kZWxldGU7XG4gIH1cblxuICAvLyByZWFkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlYWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHJlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdyZWFkJyk7XG4gIH1cbiAgcHVibGljIHNldCByZWFkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZWFkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVhZCgpIHtcbiAgICB0aGlzLl9yZWFkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCByZWFkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWQ7XG4gIH1cblxuICAvLyB1cGRhdGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdXBkYXRlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB1cGRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd1cGRhdGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVwZGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdXBkYXRlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXBkYXRlKCkge1xuICAgIHRoaXMuX3VwZGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdXBkYXRlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZTtcbiAgfVxufVxuXG4vKipcbiogUmVwcmVzZW50cyBhIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAgYXp1cmVhZF9ncm91cH1cbiovXG5leHBvcnQgY2xhc3MgR3JvdXAgZXh0ZW5kcyBjZGt0bi5UZXJyYWZvcm1SZXNvdXJjZSB7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIFBST1BFUlRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0ZlJlc291cmNlVHlwZSA9IFwiYXp1cmVhZF9ncm91cFwiO1xuXG4gIC8vID09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09XG4gIC8qKlxuICAqIEdlbmVyYXRlcyBDREtUTiBjb2RlIGZvciBpbXBvcnRpbmcgYSBHcm91cCByZXNvdXJjZSB1cG9uIHJ1bm5pbmcgXCJjZGt0biBwbGFuIDxzdGFjay1uYW1lPlwiXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaW1wb3J0VG9JZCBUaGUgY29uc3RydWN0IGlkIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBjb25maWcgZm9yIHRoZSBHcm91cCB0byBpbXBvcnRcbiAgKiBAcGFyYW0gaW1wb3J0RnJvbUlkIFRoZSBpZCBvZiB0aGUgZXhpc3RpbmcgR3JvdXAgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQuIFJlZmVyIHRvIHRoZSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2dyb3VwI2ltcG9ydCBpbXBvcnQgc2VjdGlvbn0gaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyByZXNvdXJjZSBmb3IgdGhlIGlkIHRvIHVzZVxuICAqIEBwYXJhbSBwcm92aWRlcj8gT3B0aW9uYWwgaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVyIHdoZXJlIHRoZSBHcm91cCB0byBpbXBvcnQgaXMgZm91bmRcbiAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUNvbmZpZ0ZvckltcG9ydChzY29wZTogQ29uc3RydWN0LCBpbXBvcnRUb0lkOiBzdHJpbmcsIGltcG9ydEZyb21JZDogc3RyaW5nLCBwcm92aWRlcj86IGNka3RuLlRlcnJhZm9ybVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgY2RrdG4uSW1wb3J0YWJsZVJlc291cmNlKHNjb3BlLCBpbXBvcnRUb0lkLCB7IHRlcnJhZm9ybVJlc291cmNlVHlwZTogXCJhenVyZWFkX2dyb3VwXCIsIGltcG9ydElkOiBpbXBvcnRGcm9tSWQsIHByb3ZpZGVyIH0pO1xuICAgICAgfVxuXG4gIC8vID09PT09PT09PT09XG4gIC8vIElOSVRJQUxJWkVSXG4gIC8vID09PT09PT09PT09XG5cbiAgLyoqXG4gICogQ3JlYXRlIGEgbmV3IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvZ3JvdXAgYXp1cmVhZF9ncm91cH0gUmVzb3VyY2VcbiAgKlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGlkIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSBhbW9uZ3N0IHNpYmxpbmdzIGluIHRoZSBzYW1lIHNjb3BlXG4gICogQHBhcmFtIG9wdGlvbnMgR3JvdXBDb25maWdcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogR3JvdXBDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlcnJhZm9ybVJlc291cmNlVHlwZTogJ2F6dXJlYWRfZ3JvdXAnLFxuICAgICAgdGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGE6IHtcbiAgICAgICAgcHJvdmlkZXJOYW1lOiAnYXp1cmVhZCcsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzMuNy4wJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludDogJ34+IDMuMCdcbiAgICAgIH0sXG4gICAgICBwcm92aWRlcjogY29uZmlnLnByb3ZpZGVyLFxuICAgICAgZGVwZW5kc09uOiBjb25maWcuZGVwZW5kc09uLFxuICAgICAgY291bnQ6IGNvbmZpZy5jb3VudCxcbiAgICAgIGxpZmVjeWNsZTogY29uZmlnLmxpZmVjeWNsZSxcbiAgICAgIHByb3Zpc2lvbmVyczogY29uZmlnLnByb3Zpc2lvbmVycyxcbiAgICAgIGNvbm5lY3Rpb246IGNvbmZpZy5jb25uZWN0aW9uLFxuICAgICAgZm9yRWFjaDogY29uZmlnLmZvckVhY2hcbiAgICB9KTtcbiAgICB0aGlzLl9hZG1pbmlzdHJhdGl2ZVVuaXRJZHMgPSBjb25maWcuYWRtaW5pc3RyYXRpdmVVbml0SWRzO1xuICAgIHRoaXMuX2Fzc2lnbmFibGVUb1JvbGUgPSBjb25maWcuYXNzaWduYWJsZVRvUm9sZTtcbiAgICB0aGlzLl9hdXRvU3Vic2NyaWJlTmV3TWVtYmVycyA9IGNvbmZpZy5hdXRvU3Vic2NyaWJlTmV3TWVtYmVycztcbiAgICB0aGlzLl9iZWhhdmlvcnMgPSBjb25maWcuYmVoYXZpb3JzO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gY29uZmlnLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2Rpc3BsYXlOYW1lID0gY29uZmlnLmRpc3BsYXlOYW1lO1xuICAgIHRoaXMuX2V4dGVybmFsU2VuZGVyc0FsbG93ZWQgPSBjb25maWcuZXh0ZXJuYWxTZW5kZXJzQWxsb3dlZDtcbiAgICB0aGlzLl9oaWRlRnJvbUFkZHJlc3NMaXN0cyA9IGNvbmZpZy5oaWRlRnJvbUFkZHJlc3NMaXN0cztcbiAgICB0aGlzLl9oaWRlRnJvbU91dGxvb2tDbGllbnRzID0gY29uZmlnLmhpZGVGcm9tT3V0bG9va0NsaWVudHM7XG4gICAgdGhpcy5faWQgPSBjb25maWcuaWQ7XG4gICAgdGhpcy5fbWFpbEVuYWJsZWQgPSBjb25maWcubWFpbEVuYWJsZWQ7XG4gICAgdGhpcy5fbWFpbE5pY2tuYW1lID0gY29uZmlnLm1haWxOaWNrbmFtZTtcbiAgICB0aGlzLl9tZW1iZXJzID0gY29uZmlnLm1lbWJlcnM7XG4gICAgdGhpcy5fb25wcmVtaXNlc0dyb3VwVHlwZSA9IGNvbmZpZy5vbnByZW1pc2VzR3JvdXBUeXBlO1xuICAgIHRoaXMuX293bmVycyA9IGNvbmZpZy5vd25lcnM7XG4gICAgdGhpcy5fcHJldmVudER1cGxpY2F0ZU5hbWVzID0gY29uZmlnLnByZXZlbnREdXBsaWNhdGVOYW1lcztcbiAgICB0aGlzLl9wcm92aXNpb25pbmdPcHRpb25zID0gY29uZmlnLnByb3Zpc2lvbmluZ09wdGlvbnM7XG4gICAgdGhpcy5fc2VjdXJpdHlFbmFibGVkID0gY29uZmlnLnNlY3VyaXR5RW5hYmxlZDtcbiAgICB0aGlzLl90aGVtZSA9IGNvbmZpZy50aGVtZTtcbiAgICB0aGlzLl90eXBlcyA9IGNvbmZpZy50eXBlcztcbiAgICB0aGlzLl92aXNpYmlsaXR5ID0gY29uZmlnLnZpc2liaWxpdHk7XG4gICAgdGhpcy5fd3JpdGViYWNrRW5hYmxlZCA9IGNvbmZpZy53cml0ZWJhY2tFbmFibGVkO1xuICAgIHRoaXMuX2R5bmFtaWNNZW1iZXJzaGlwLmludGVybmFsVmFsdWUgPSBjb25maWcuZHluYW1pY01lbWJlcnNoaXA7XG4gICAgdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy50aW1lb3V0cztcbiAgfVxuXG4gIC8vID09PT09PT09PT1cbiAgLy8gQVRUUklCVVRFU1xuICAvLyA9PT09PT09PT09XG5cbiAgLy8gYWRtaW5pc3RyYXRpdmVfdW5pdF9pZHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYWRtaW5pc3RyYXRpdmVVbml0SWRzPzogc3RyaW5nW107IFxuICBwdWJsaWMgZ2V0IGFkbWluaXN0cmF0aXZlVW5pdElkcygpIHtcbiAgICByZXR1cm4gY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnYWRtaW5pc3RyYXRpdmVfdW5pdF9pZHMnKSk7XG4gIH1cbiAgcHVibGljIHNldCBhZG1pbmlzdHJhdGl2ZVVuaXRJZHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fYWRtaW5pc3RyYXRpdmVVbml0SWRzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QWRtaW5pc3RyYXRpdmVVbml0SWRzKCkge1xuICAgIHRoaXMuX2FkbWluaXN0cmF0aXZlVW5pdElkcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgYWRtaW5pc3RyYXRpdmVVbml0SWRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkbWluaXN0cmF0aXZlVW5pdElkcztcbiAgfVxuXG4gIC8vIGFzc2lnbmFibGVfdG9fcm9sZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hc3NpZ25hYmxlVG9Sb2xlPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBhc3NpZ25hYmxlVG9Sb2xlKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2Fzc2lnbmFibGVfdG9fcm9sZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgYXNzaWduYWJsZVRvUm9sZSh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fYXNzaWduYWJsZVRvUm9sZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEFzc2lnbmFibGVUb1JvbGUoKSB7XG4gICAgdGhpcy5fYXNzaWduYWJsZVRvUm9sZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgYXNzaWduYWJsZVRvUm9sZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hc3NpZ25hYmxlVG9Sb2xlO1xuICB9XG5cbiAgLy8gYXV0b19zdWJzY3JpYmVfbmV3X21lbWJlcnMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hdXRvU3Vic2NyaWJlTmV3TWVtYmVycz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgYXV0b1N1YnNjcmliZU5ld01lbWJlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnYXV0b19zdWJzY3JpYmVfbmV3X21lbWJlcnMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGF1dG9TdWJzY3JpYmVOZXdNZW1iZXJzKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9hdXRvU3Vic2NyaWJlTmV3TWVtYmVycyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEF1dG9TdWJzY3JpYmVOZXdNZW1iZXJzKCkge1xuICAgIHRoaXMuX2F1dG9TdWJzY3JpYmVOZXdNZW1iZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhdXRvU3Vic2NyaWJlTmV3TWVtYmVyc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hdXRvU3Vic2NyaWJlTmV3TWVtYmVycztcbiAgfVxuXG4gIC8vIGJlaGF2aW9ycyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9iZWhhdmlvcnM/OiBzdHJpbmdbXTsgXG4gIHB1YmxpYyBnZXQgYmVoYXZpb3JzKCkge1xuICAgIHJldHVybiBjZGt0bi5Gbi50b2xpc3QodGhpcy5nZXRMaXN0QXR0cmlidXRlKCdiZWhhdmlvcnMnKSk7XG4gIH1cbiAgcHVibGljIHNldCBiZWhhdmlvcnModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fYmVoYXZpb3JzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QmVoYXZpb3JzKCkge1xuICAgIHRoaXMuX2JlaGF2aW9ycyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgYmVoYXZpb3JzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JlaGF2aW9ycztcbiAgfVxuXG4gIC8vIGRlc2NyaXB0aW9uIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2Rlc2NyaXB0aW9uPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2Rlc2NyaXB0aW9uJyk7XG4gIH1cbiAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZXNjcmlwdGlvbigpIHtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gIH1cblxuICAvLyBkaXNwbGF5X25hbWUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfZGlzcGxheU5hbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGRpc3BsYXlOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZGlzcGxheV9uYW1lJyk7XG4gIH1cbiAgcHVibGljIHNldCBkaXNwbGF5TmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGlzcGxheU5hbWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheU5hbWU7XG4gIH1cblxuICAvLyBleHRlcm5hbF9zZW5kZXJzX2FsbG93ZWQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9leHRlcm5hbFNlbmRlcnNBbGxvd2VkPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBleHRlcm5hbFNlbmRlcnNBbGxvd2VkKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2V4dGVybmFsX3NlbmRlcnNfYWxsb3dlZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXh0ZXJuYWxTZW5kZXJzQWxsb3dlZCh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fZXh0ZXJuYWxTZW5kZXJzQWxsb3dlZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEV4dGVybmFsU2VuZGVyc0FsbG93ZWQoKSB7XG4gICAgdGhpcy5fZXh0ZXJuYWxTZW5kZXJzQWxsb3dlZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZXh0ZXJuYWxTZW5kZXJzQWxsb3dlZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9leHRlcm5hbFNlbmRlcnNBbGxvd2VkO1xuICB9XG5cbiAgLy8gaGlkZV9mcm9tX2FkZHJlc3NfbGlzdHMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9oaWRlRnJvbUFkZHJlc3NMaXN0cz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgaGlkZUZyb21BZGRyZXNzTGlzdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnaGlkZV9mcm9tX2FkZHJlc3NfbGlzdHMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhpZGVGcm9tQWRkcmVzc0xpc3RzKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9oaWRlRnJvbUFkZHJlc3NMaXN0cyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEhpZGVGcm9tQWRkcmVzc0xpc3RzKCkge1xuICAgIHRoaXMuX2hpZGVGcm9tQWRkcmVzc0xpc3RzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBoaWRlRnJvbUFkZHJlc3NMaXN0c0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9oaWRlRnJvbUFkZHJlc3NMaXN0cztcbiAgfVxuXG4gIC8vIGhpZGVfZnJvbV9vdXRsb29rX2NsaWVudHMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9oaWRlRnJvbU91dGxvb2tDbGllbnRzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBoaWRlRnJvbU91dGxvb2tDbGllbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2hpZGVfZnJvbV9vdXRsb29rX2NsaWVudHMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhpZGVGcm9tT3V0bG9va0NsaWVudHModmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2hpZGVGcm9tT3V0bG9va0NsaWVudHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRIaWRlRnJvbU91dGxvb2tDbGllbnRzKCkge1xuICAgIHRoaXMuX2hpZGVGcm9tT3V0bG9va0NsaWVudHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGhpZGVGcm9tT3V0bG9va0NsaWVudHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZUZyb21PdXRsb29rQ2xpZW50cztcbiAgfVxuXG4gIC8vIGlkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElkKCkge1xuICAgIHRoaXMuX2lkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIC8vIG1haWwgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCBtYWlsKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbWFpbCcpO1xuICB9XG5cbiAgLy8gbWFpbF9lbmFibGVkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX21haWxFbmFibGVkPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBtYWlsRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdtYWlsX2VuYWJsZWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1haWxFbmFibGVkKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9tYWlsRW5hYmxlZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1haWxFbmFibGVkKCkge1xuICAgIHRoaXMuX21haWxFbmFibGVkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtYWlsRW5hYmxlZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYWlsRW5hYmxlZDtcbiAgfVxuXG4gIC8vIG1haWxfbmlja25hbWUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYWlsTmlja25hbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG1haWxOaWNrbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ21haWxfbmlja25hbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1haWxOaWNrbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbWFpbE5pY2tuYW1lID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TWFpbE5pY2tuYW1lKCkge1xuICAgIHRoaXMuX21haWxOaWNrbmFtZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbWFpbE5pY2tuYW1lSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21haWxOaWNrbmFtZTtcbiAgfVxuXG4gIC8vIG1lbWJlcnMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tZW1iZXJzPzogc3RyaW5nW107IFxuICBwdWJsaWMgZ2V0IG1lbWJlcnMoKSB7XG4gICAgcmV0dXJuIGNka3RuLkZuLnRvbGlzdCh0aGlzLmdldExpc3RBdHRyaWJ1dGUoJ21lbWJlcnMnKSk7XG4gIH1cbiAgcHVibGljIHNldCBtZW1iZXJzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX21lbWJlcnMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNZW1iZXJzKCkge1xuICAgIHRoaXMuX21lbWJlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1lbWJlcnNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVtYmVycztcbiAgfVxuXG4gIC8vIG9iamVjdF9pZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IG9iamVjdElkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnb2JqZWN0X2lkJyk7XG4gIH1cblxuICAvLyBvbnByZW1pc2VzX2RvbWFpbl9uYW1lIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgb25wcmVtaXNlc0RvbWFpbk5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdvbnByZW1pc2VzX2RvbWFpbl9uYW1lJyk7XG4gIH1cblxuICAvLyBvbnByZW1pc2VzX2dyb3VwX3R5cGUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9vbnByZW1pc2VzR3JvdXBUeXBlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBvbnByZW1pc2VzR3JvdXBUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnb25wcmVtaXNlc19ncm91cF90eXBlJyk7XG4gIH1cbiAgcHVibGljIHNldCBvbnByZW1pc2VzR3JvdXBUeXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vbnByZW1pc2VzR3JvdXBUeXBlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0T25wcmVtaXNlc0dyb3VwVHlwZSgpIHtcbiAgICB0aGlzLl9vbnByZW1pc2VzR3JvdXBUeXBlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBvbnByZW1pc2VzR3JvdXBUeXBlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29ucHJlbWlzZXNHcm91cFR5cGU7XG4gIH1cblxuICAvLyBvbnByZW1pc2VzX25ldGJpb3NfbmFtZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IG9ucHJlbWlzZXNOZXRiaW9zTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ29ucHJlbWlzZXNfbmV0Ymlvc19uYW1lJyk7XG4gIH1cblxuICAvLyBvbnByZW1pc2VzX3NhbV9hY2NvdW50X25hbWUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCBvbnByZW1pc2VzU2FtQWNjb3VudE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdvbnByZW1pc2VzX3NhbV9hY2NvdW50X25hbWUnKTtcbiAgfVxuXG4gIC8vIG9ucHJlbWlzZXNfc2VjdXJpdHlfaWRlbnRpZmllciAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IG9ucHJlbWlzZXNTZWN1cml0eUlkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdvbnByZW1pc2VzX3NlY3VyaXR5X2lkZW50aWZpZXInKTtcbiAgfVxuXG4gIC8vIG9ucHJlbWlzZXNfc3luY19lbmFibGVkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgb25wcmVtaXNlc1N5bmNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ29ucHJlbWlzZXNfc3luY19lbmFibGVkJyk7XG4gIH1cblxuICAvLyBvd25lcnMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9vd25lcnM/OiBzdHJpbmdbXTsgXG4gIHB1YmxpYyBnZXQgb3duZXJzKCkge1xuICAgIHJldHVybiBjZGt0bi5Gbi50b2xpc3QodGhpcy5nZXRMaXN0QXR0cmlidXRlKCdvd25lcnMnKSk7XG4gIH1cbiAgcHVibGljIHNldCBvd25lcnModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fb3duZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0T3duZXJzKCkge1xuICAgIHRoaXMuX293bmVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgb3duZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX293bmVycztcbiAgfVxuXG4gIC8vIHByZWZlcnJlZF9sYW5ndWFnZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IHByZWZlcnJlZExhbmd1YWdlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncHJlZmVycmVkX2xhbmd1YWdlJyk7XG4gIH1cblxuICAvLyBwcmV2ZW50X2R1cGxpY2F0ZV9uYW1lcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9wcmV2ZW50RHVwbGljYXRlTmFtZXM/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHByZXZlbnREdXBsaWNhdGVOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdwcmV2ZW50X2R1cGxpY2F0ZV9uYW1lcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgcHJldmVudER1cGxpY2F0ZU5hbWVzKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9wcmV2ZW50RHVwbGljYXRlTmFtZXMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRQcmV2ZW50RHVwbGljYXRlTmFtZXMoKSB7XG4gICAgdGhpcy5fcHJldmVudER1cGxpY2F0ZU5hbWVzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBwcmV2ZW50RHVwbGljYXRlTmFtZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJldmVudER1cGxpY2F0ZU5hbWVzO1xuICB9XG5cbiAgLy8gcHJvdmlzaW9uaW5nX29wdGlvbnMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcHJvdmlzaW9uaW5nT3B0aW9ucz86IHN0cmluZ1tdOyBcbiAgcHVibGljIGdldCBwcm92aXNpb25pbmdPcHRpb25zKCkge1xuICAgIHJldHVybiBjZGt0bi5Gbi50b2xpc3QodGhpcy5nZXRMaXN0QXR0cmlidXRlKCdwcm92aXNpb25pbmdfb3B0aW9ucycpKTtcbiAgfVxuICBwdWJsaWMgc2V0IHByb3Zpc2lvbmluZ09wdGlvbnModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fcHJvdmlzaW9uaW5nT3B0aW9ucyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFByb3Zpc2lvbmluZ09wdGlvbnMoKSB7XG4gICAgdGhpcy5fcHJvdmlzaW9uaW5nT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcHJvdmlzaW9uaW5nT3B0aW9uc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9wcm92aXNpb25pbmdPcHRpb25zO1xuICB9XG5cbiAgLy8gcHJveHlfYWRkcmVzc2VzIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgcHJveHlBZGRyZXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgncHJveHlfYWRkcmVzc2VzJyk7XG4gIH1cblxuICAvLyBzZWN1cml0eV9lbmFibGVkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3NlY3VyaXR5RW5hYmxlZD86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgc2VjdXJpdHlFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ3NlY3VyaXR5X2VuYWJsZWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlY3VyaXR5RW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fc2VjdXJpdHlFbmFibGVkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0U2VjdXJpdHlFbmFibGVkKCkge1xuICAgIHRoaXMuX3NlY3VyaXR5RW5hYmxlZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2VjdXJpdHlFbmFibGVkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3VyaXR5RW5hYmxlZDtcbiAgfVxuXG4gIC8vIHRoZW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3RoZW1lPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB0aGVtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3RoZW1lJyk7XG4gIH1cbiAgcHVibGljIHNldCB0aGVtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGhlbWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUaGVtZSgpIHtcbiAgICB0aGlzLl90aGVtZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdGhlbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhlbWU7XG4gIH1cblxuICAvLyB0eXBlcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90eXBlcz86IHN0cmluZ1tdOyBcbiAgcHVibGljIGdldCB0eXBlcygpIHtcbiAgICByZXR1cm4gY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgndHlwZXMnKSk7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl90eXBlcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFR5cGVzKCkge1xuICAgIHRoaXMuX3R5cGVzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0eXBlc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlcztcbiAgfVxuXG4gIC8vIHZpc2liaWxpdHkgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF92aXNpYmlsaXR5Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB2aXNpYmlsaXR5KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndmlzaWJpbGl0eScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJpbGl0eSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmlzaWJpbGl0eSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFZpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5fdmlzaWJpbGl0eSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdmlzaWJpbGl0eUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmlsaXR5O1xuICB9XG5cbiAgLy8gd3JpdGViYWNrX2VuYWJsZWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfd3JpdGViYWNrRW5hYmxlZD86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgd3JpdGViYWNrRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCd3cml0ZWJhY2tfZW5hYmxlZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgd3JpdGViYWNrRW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fd3JpdGViYWNrRW5hYmxlZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFdyaXRlYmFja0VuYWJsZWQoKSB7XG4gICAgdGhpcy5fd3JpdGViYWNrRW5hYmxlZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgd3JpdGViYWNrRW5hYmxlZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0ZWJhY2tFbmFibGVkO1xuICB9XG5cbiAgLy8gZHluYW1pY19tZW1iZXJzaGlwIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2R5bmFtaWNNZW1iZXJzaGlwID0gbmV3IEdyb3VwRHluYW1pY01lbWJlcnNoaXBPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJkeW5hbWljX21lbWJlcnNoaXBcIik7XG4gIHB1YmxpYyBnZXQgZHluYW1pY01lbWJlcnNoaXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2R5bmFtaWNNZW1iZXJzaGlwO1xuICB9XG4gIHB1YmxpYyBwdXREeW5hbWljTWVtYmVyc2hpcCh2YWx1ZTogR3JvdXBEeW5hbWljTWVtYmVyc2hpcCkge1xuICAgIHRoaXMuX2R5bmFtaWNNZW1iZXJzaGlwLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREeW5hbWljTWVtYmVyc2hpcCgpIHtcbiAgICB0aGlzLl9keW5hbWljTWVtYmVyc2hpcC5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkeW5hbWljTWVtYmVyc2hpcElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9keW5hbWljTWVtYmVyc2hpcC5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gdGltZW91dHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdGltZW91dHMgPSBuZXcgR3JvdXBUaW1lb3V0c091dHB1dFJlZmVyZW5jZSh0aGlzLCBcInRpbWVvdXRzXCIpO1xuICBwdWJsaWMgZ2V0IHRpbWVvdXRzKCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lb3V0cztcbiAgfVxuICBwdWJsaWMgcHV0VGltZW91dHModmFsdWU6IEdyb3VwVGltZW91dHMpIHtcbiAgICB0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VGltZW91dHMoKSB7XG4gICAgdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdGltZW91dHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PVxuICAvLyBTWU5USEVTSVNcbiAgLy8gPT09PT09PT09XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRtaW5pc3RyYXRpdmVfdW5pdF9pZHM6IGNka3RuLmxpc3RNYXBwZXIoY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9hZG1pbmlzdHJhdGl2ZVVuaXRJZHMpLFxuICAgICAgYXNzaWduYWJsZV90b19yb2xlOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fYXNzaWduYWJsZVRvUm9sZSksXG4gICAgICBhdXRvX3N1YnNjcmliZV9uZXdfbWVtYmVyczogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2F1dG9TdWJzY3JpYmVOZXdNZW1iZXJzKSxcbiAgICAgIGJlaGF2aW9yczogY2RrdG4ubGlzdE1hcHBlcihjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2JlaGF2aW9ycyksXG4gICAgICBkZXNjcmlwdGlvbjogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fZGVzY3JpcHRpb24pLFxuICAgICAgZGlzcGxheV9uYW1lOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9kaXNwbGF5TmFtZSksXG4gICAgICBleHRlcm5hbF9zZW5kZXJzX2FsbG93ZWQ6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9leHRlcm5hbFNlbmRlcnNBbGxvd2VkKSxcbiAgICAgIGhpZGVfZnJvbV9hZGRyZXNzX2xpc3RzOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5faGlkZUZyb21BZGRyZXNzTGlzdHMpLFxuICAgICAgaGlkZV9mcm9tX291dGxvb2tfY2xpZW50czogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2hpZGVGcm9tT3V0bG9va0NsaWVudHMpLFxuICAgICAgaWQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2lkKSxcbiAgICAgIG1haWxfZW5hYmxlZDogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX21haWxFbmFibGVkKSxcbiAgICAgIG1haWxfbmlja25hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX21haWxOaWNrbmFtZSksXG4gICAgICBtZW1iZXJzOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fbWVtYmVycyksXG4gICAgICBvbnByZW1pc2VzX2dyb3VwX3R5cGU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX29ucHJlbWlzZXNHcm91cFR5cGUpLFxuICAgICAgb3duZXJzOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fb3duZXJzKSxcbiAgICAgIHByZXZlbnRfZHVwbGljYXRlX25hbWVzOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fcHJldmVudER1cGxpY2F0ZU5hbWVzKSxcbiAgICAgIHByb3Zpc2lvbmluZ19vcHRpb25zOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fcHJvdmlzaW9uaW5nT3B0aW9ucyksXG4gICAgICBzZWN1cml0eV9lbmFibGVkOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fc2VjdXJpdHlFbmFibGVkKSxcbiAgICAgIHRoZW1lOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl90aGVtZSksXG4gICAgICB0eXBlczogY2RrdG4ubGlzdE1hcHBlcihjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX3R5cGVzKSxcbiAgICAgIHZpc2liaWxpdHk6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3Zpc2liaWxpdHkpLFxuICAgICAgd3JpdGViYWNrX2VuYWJsZWQ6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl93cml0ZWJhY2tFbmFibGVkKSxcbiAgICAgIGR5bmFtaWNfbWVtYmVyc2hpcDogZ3JvdXBEeW5hbWljTWVtYmVyc2hpcFRvVGVycmFmb3JtKHRoaXMuX2R5bmFtaWNNZW1iZXJzaGlwLmludGVybmFsVmFsdWUpLFxuICAgICAgdGltZW91dHM6IGdyb3VwVGltZW91dHNUb1RlcnJhZm9ybSh0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgIGFkbWluaXN0cmF0aXZlX3VuaXRfaWRzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5saXN0TWFwcGVySGNsKGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fYWRtaW5pc3RyYXRpdmVVbml0SWRzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGFzc2lnbmFibGVfdG9fcm9sZToge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2Fzc2lnbmFibGVUb1JvbGUpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgYXV0b19zdWJzY3JpYmVfbmV3X21lbWJlcnM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9hdXRvU3Vic2NyaWJlTmV3TWVtYmVycyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBiZWhhdmlvcnM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9iZWhhdmlvcnMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzZXRcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2Rlc2NyaXB0aW9uKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgZGlzcGxheV9uYW1lOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9kaXNwbGF5TmFtZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGV4dGVybmFsX3NlbmRlcnNfYWxsb3dlZDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2V4dGVybmFsU2VuZGVyc0FsbG93ZWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgaGlkZV9mcm9tX2FkZHJlc3NfbGlzdHM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9oaWRlRnJvbUFkZHJlc3NMaXN0cyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBoaWRlX2Zyb21fb3V0bG9va19jbGllbnRzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5faGlkZUZyb21PdXRsb29rQ2xpZW50cyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBpZDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5faWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBtYWlsX2VuYWJsZWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9tYWlsRW5hYmxlZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBtYWlsX25pY2tuYW1lOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9tYWlsTmlja25hbWUpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBtZW1iZXJzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5saXN0TWFwcGVySGNsKGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fbWVtYmVycyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBvbnByZW1pc2VzX2dyb3VwX3R5cGU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX29ucHJlbWlzZXNHcm91cFR5cGUpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBvd25lcnM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9vd25lcnMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzZXRcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgcHJldmVudF9kdXBsaWNhdGVfbmFtZXM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9wcmV2ZW50RHVwbGljYXRlTmFtZXMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgcHJvdmlzaW9uaW5nX29wdGlvbnM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9wcm92aXNpb25pbmdPcHRpb25zKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHNlY3VyaXR5X2VuYWJsZWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9zZWN1cml0eUVuYWJsZWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgdGhlbWU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3RoZW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgdHlwZXM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl90eXBlcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl92aXNpYmlsaXR5KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgd3JpdGViYWNrX2VuYWJsZWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl93cml0ZWJhY2tFbmFibGVkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIGR5bmFtaWNfbWVtYmVyc2hpcDoge1xuICAgICAgICB2YWx1ZTogZ3JvdXBEeW5hbWljTWVtYmVyc2hpcFRvSGNsVGVycmFmb3JtKHRoaXMuX2R5bmFtaWNNZW1iZXJzaGlwLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJHcm91cER5bmFtaWNNZW1iZXJzaGlwTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXRzOiB7XG4gICAgICAgIHZhbHVlOiBncm91cFRpbWVvdXRzVG9IY2xUZXJyYWZvcm0odGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwic3RydWN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiR3JvdXBUaW1lb3V0c1wiLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgKSlcbiAgfVxufVxuIl19
|