@microsoft/terraform-cdk-constructs 1.7.1 → 1.9.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 +46476 -27231
- package/API.md +68443 -28286
- package/lib/azure-actiongroup/lib/action-group.js +1 -1
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
- package/lib/azure-aks/lib/aks-cluster.js +1 -1
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
- package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
- package/lib/azure-dnszone/lib/dns-zone.js +1 -1
- package/lib/azure-dnszone/lib/index.d.ts +1 -0
- package/lib/azure-dnszone/lib/index.js +2 -1
- package/lib/azure-dnszone/lib/records/dns-record-schemas.d.ts +68 -0
- package/lib/azure-dnszone/lib/records/dns-record-schemas.js +813 -0
- package/lib/azure-dnszone/lib/records/dns-records.d.ts +688 -0
- package/lib/azure-dnszone/lib/records/dns-records.js +924 -0
- package/lib/azure-dnszone/lib/records/index.d.ts +19 -0
- package/lib/azure-dnszone/lib/records/index.js +38 -0
- package/lib/azure-dnszone/test/dns-records.integ.d.ts +21 -0
- package/lib/azure-dnszone/test/dns-records.integ.js +321 -0
- package/lib/azure-dnszone/test/dns-records.spec.d.ts +20 -0
- package/lib/azure-dnszone/test/dns-records.spec.js +950 -0
- package/lib/azure-loganalyticsworkspace/index.d.ts +6 -0
- package/lib/azure-loganalyticsworkspace/index.js +23 -0
- package/lib/azure-loganalyticsworkspace/lib/index.d.ts +5 -0
- package/lib/azure-loganalyticsworkspace/lib/index.js +22 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.d.ts +51 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.js +255 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.d.ts +301 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +213 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.d.ts +9 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.js +71 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.d.ts +8 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.js +504 -0
- package/lib/azure-metricalert/lib/metric-alert.js +1 -1
- package/lib/azure-networkinterface/lib/network-interface.js +1 -1
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
- package/lib/azure-networkwatcher/index.d.ts +14 -0
- package/lib/azure-networkwatcher/index.js +31 -0
- package/lib/azure-networkwatcher/lib/index.d.ts +5 -0
- package/lib/azure-networkwatcher/lib/index.js +22 -0
- package/lib/azure-networkwatcher/lib/network-watcher-schemas.d.ts +47 -0
- package/lib/azure-networkwatcher/lib/network-watcher-schemas.js +167 -0
- package/lib/azure-networkwatcher/lib/network-watcher.d.ts +181 -0
- package/lib/azure-networkwatcher/lib/network-watcher.js +187 -0
- package/lib/azure-networkwatcher/test/network-watcher.integ.d.ts +12 -0
- package/lib/azure-networkwatcher/test/network-watcher.integ.js +84 -0
- package/lib/azure-networkwatcher/test/network-watcher.spec.d.ts +8 -0
- package/lib/azure-networkwatcher/test/network-watcher.spec.js +312 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
- package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
- package/lib/azure-policysetdefinition/index.d.ts +10 -0
- package/lib/azure-policysetdefinition/index.js +27 -0
- package/lib/azure-policysetdefinition/lib/index.d.ts +5 -0
- package/lib/azure-policysetdefinition/lib/index.js +22 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.d.ts +50 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.js +255 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition.d.ts +426 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition.js +255 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.d.ts +9 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.js +56 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.d.ts +8 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.js +745 -0
- package/lib/azure-privatednszone/lib/index.d.ts +1 -0
- package/lib/azure-privatednszone/lib/index.js +2 -1
- package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +0 -2
- package/lib/azure-privatednszone/lib/private-dns-zone.js +6 -13
- package/lib/azure-privatednszone/lib/records/index.d.ts +7 -0
- package/lib/azure-privatednszone/lib/records/index.js +26 -0
- package/lib/azure-privatednszone/lib/records/private-dns-record-schemas.d.ts +52 -0
- package/lib/azure-privatednszone/lib/records/private-dns-record-schemas.js +683 -0
- package/lib/azure-privatednszone/lib/records/private-dns-records.d.ts +523 -0
- package/lib/azure-privatednszone/lib/records/private-dns-records.js +739 -0
- package/lib/azure-privatednszone/test/private-dns-records.integ.d.ts +19 -0
- package/lib/azure-privatednszone/test/private-dns-records.integ.js +245 -0
- package/lib/azure-privatednszone/test/private-dns-records.spec.d.ts +18 -0
- package/lib/azure-privatednszone/test/private-dns-records.spec.js +756 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +5 -5
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
- package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
- package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
- package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
- package/lib/azure-roledefinition/lib/role-definition.js +1 -1
- package/lib/azure-storageaccount/lib/storage-account.js +1 -1
- package/lib/azure-subnet/lib/subnet.js +1 -1
- package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
- package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway-schemas.js +2 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +4 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +8 -5
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +109 -1
- package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +1 -1
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
- package/lib/core-azure/lib/azapi/azapi-resource.js +4 -4
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
- package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
- package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
- package/lib/index.d.ts +23 -0
- package/lib/index.js +25 -2
- package/lib/testing/index.js +2 -2
- package/lib/testing/lib/cleanup.js +1 -1
- package/lib/testing/lib/metadata.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,739 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PrivateDnsTxtRecord = exports.PrivateDnsSrvRecord = exports.PrivateDnsSoaRecord = exports.PrivateDnsPtrRecord = exports.PrivateDnsMxRecord = exports.PrivateDnsCnameRecord = exports.PrivateDnsAaaaRecord = exports.PrivateDnsARecord = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Azure Private DNS Zone Record implementations using AzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This file provides implementations for all Private DNS Zone record types:
|
|
10
|
+
* - PrivateDnsARecord (A records with IPv4 addresses)
|
|
11
|
+
* - PrivateDnsAaaaRecord (AAAA records with IPv6 addresses)
|
|
12
|
+
* - PrivateDnsCnameRecord (CNAME records)
|
|
13
|
+
* - PrivateDnsMxRecord (MX records with exchange and preference)
|
|
14
|
+
* - PrivateDnsPtrRecord (PTR records)
|
|
15
|
+
* - PrivateDnsSoaRecord (SOA records)
|
|
16
|
+
* - PrivateDnsSrvRecord (SRV records with priority, weight, port, target)
|
|
17
|
+
* - PrivateDnsTxtRecord (TXT records)
|
|
18
|
+
*
|
|
19
|
+
* API Version: 2024-06-01
|
|
20
|
+
*/
|
|
21
|
+
const cdktf = require("cdktf");
|
|
22
|
+
const private_dns_record_schemas_1 = require("./private-dns-record-schemas");
|
|
23
|
+
const azapi_resource_1 = require("../../../core-azure/lib/azapi/azapi-resource");
|
|
24
|
+
/**
|
|
25
|
+
* Azure Private DNS A Record implementation
|
|
26
|
+
*
|
|
27
|
+
* A records map a hostname to one or more IPv4 addresses.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* // Create an A record with multiple IP addresses:
|
|
31
|
+
* const aRecord = new PrivateDnsARecord(this, "web-a-record", {
|
|
32
|
+
* name: "www",
|
|
33
|
+
* privateDnsZoneId: zone.id,
|
|
34
|
+
* ttl: 300,
|
|
35
|
+
* records: [
|
|
36
|
+
* { ipv4Address: "10.0.1.4" },
|
|
37
|
+
* { ipv4Address: "10.0.1.5" },
|
|
38
|
+
* ],
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* @stability stable
|
|
42
|
+
*/
|
|
43
|
+
class PrivateDnsARecord extends azapi_resource_1.AzapiResource {
|
|
44
|
+
constructor(scope, id, props) {
|
|
45
|
+
super(scope, id, props);
|
|
46
|
+
this.props = props;
|
|
47
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
48
|
+
value: this.id,
|
|
49
|
+
description: "The ID of the A Record",
|
|
50
|
+
});
|
|
51
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
52
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
53
|
+
description: "The name of the A Record",
|
|
54
|
+
});
|
|
55
|
+
this.fqdnOutput = new cdktf.TerraformOutput(this, "fqdn", {
|
|
56
|
+
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
57
|
+
description: "The FQDN of the A Record",
|
|
58
|
+
});
|
|
59
|
+
this.idOutput.overrideLogicalId("id");
|
|
60
|
+
this.nameOutput.overrideLogicalId("name");
|
|
61
|
+
this.fqdnOutput.overrideLogicalId("fqdn");
|
|
62
|
+
}
|
|
63
|
+
resolveParentId(props) {
|
|
64
|
+
const typedProps = props;
|
|
65
|
+
return typedProps.privateDnsZoneId;
|
|
66
|
+
}
|
|
67
|
+
defaultVersion() {
|
|
68
|
+
return "2024-06-01";
|
|
69
|
+
}
|
|
70
|
+
resourceType() {
|
|
71
|
+
return private_dns_record_schemas_1.PRIVATE_DNS_A_RECORD_TYPE;
|
|
72
|
+
}
|
|
73
|
+
apiSchema() {
|
|
74
|
+
return this.resolveSchema();
|
|
75
|
+
}
|
|
76
|
+
requiresLocation() {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
supportsTags() {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
createResourceBody(props) {
|
|
83
|
+
const typedProps = props;
|
|
84
|
+
const body = {
|
|
85
|
+
properties: {
|
|
86
|
+
ttl: typedProps.ttl ?? 3600,
|
|
87
|
+
aRecords: typedProps.records.map((r) => ({
|
|
88
|
+
ipv4Address: r.ipv4Address,
|
|
89
|
+
})),
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
if (typedProps.metadata && Object.keys(typedProps.metadata).length > 0) {
|
|
93
|
+
body.properties.metadata =
|
|
94
|
+
typedProps.metadata;
|
|
95
|
+
}
|
|
96
|
+
return body;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get the FQDN of the record
|
|
100
|
+
*/
|
|
101
|
+
get fqdn() {
|
|
102
|
+
return `\${${this.terraformResource.fqn}.output.properties.fqdn}`;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.PrivateDnsARecord = PrivateDnsARecord;
|
|
106
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
107
|
+
PrivateDnsARecord[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsARecord", version: "1.9.0" };
|
|
108
|
+
(() => {
|
|
109
|
+
azapi_resource_1.AzapiResource.registerSchemas(private_dns_record_schemas_1.PRIVATE_DNS_A_RECORD_TYPE, private_dns_record_schemas_1.ALL_PRIVATE_DNS_A_RECORD_VERSIONS);
|
|
110
|
+
})();
|
|
111
|
+
/**
|
|
112
|
+
* Azure Private DNS AAAA Record implementation
|
|
113
|
+
*
|
|
114
|
+
* AAAA records map a hostname to one or more IPv6 addresses.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* // Create an AAAA record:
|
|
118
|
+
* const aaaaRecord = new PrivateDnsAaaaRecord(this, "web-aaaa-record", {
|
|
119
|
+
* name: "www",
|
|
120
|
+
* privateDnsZoneId: zone.id,
|
|
121
|
+
* ttl: 300,
|
|
122
|
+
* records: [
|
|
123
|
+
* { ipv6Address: "2001:db8::1" },
|
|
124
|
+
* ],
|
|
125
|
+
* });
|
|
126
|
+
*
|
|
127
|
+
* @stability stable
|
|
128
|
+
*/
|
|
129
|
+
class PrivateDnsAaaaRecord extends azapi_resource_1.AzapiResource {
|
|
130
|
+
constructor(scope, id, props) {
|
|
131
|
+
super(scope, id, props);
|
|
132
|
+
this.props = props;
|
|
133
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
134
|
+
value: this.id,
|
|
135
|
+
description: "The ID of the AAAA Record",
|
|
136
|
+
});
|
|
137
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
138
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
139
|
+
description: "The name of the AAAA Record",
|
|
140
|
+
});
|
|
141
|
+
this.fqdnOutput = new cdktf.TerraformOutput(this, "fqdn", {
|
|
142
|
+
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
143
|
+
description: "The FQDN of the AAAA Record",
|
|
144
|
+
});
|
|
145
|
+
this.idOutput.overrideLogicalId("id");
|
|
146
|
+
this.nameOutput.overrideLogicalId("name");
|
|
147
|
+
this.fqdnOutput.overrideLogicalId("fqdn");
|
|
148
|
+
}
|
|
149
|
+
resolveParentId(props) {
|
|
150
|
+
const typedProps = props;
|
|
151
|
+
return typedProps.privateDnsZoneId;
|
|
152
|
+
}
|
|
153
|
+
defaultVersion() {
|
|
154
|
+
return "2024-06-01";
|
|
155
|
+
}
|
|
156
|
+
resourceType() {
|
|
157
|
+
return private_dns_record_schemas_1.PRIVATE_DNS_AAAA_RECORD_TYPE;
|
|
158
|
+
}
|
|
159
|
+
apiSchema() {
|
|
160
|
+
return this.resolveSchema();
|
|
161
|
+
}
|
|
162
|
+
requiresLocation() {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
supportsTags() {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
createResourceBody(props) {
|
|
169
|
+
const typedProps = props;
|
|
170
|
+
const body = {
|
|
171
|
+
properties: {
|
|
172
|
+
ttl: typedProps.ttl ?? 3600,
|
|
173
|
+
aaaaRecords: typedProps.records.map((r) => ({
|
|
174
|
+
ipv6Address: r.ipv6Address,
|
|
175
|
+
})),
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
if (typedProps.metadata && Object.keys(typedProps.metadata).length > 0) {
|
|
179
|
+
body.properties.metadata =
|
|
180
|
+
typedProps.metadata;
|
|
181
|
+
}
|
|
182
|
+
return body;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get the FQDN of the record
|
|
186
|
+
*/
|
|
187
|
+
get fqdn() {
|
|
188
|
+
return `\${${this.terraformResource.fqn}.output.properties.fqdn}`;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.PrivateDnsAaaaRecord = PrivateDnsAaaaRecord;
|
|
192
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
193
|
+
PrivateDnsAaaaRecord[_b] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsAaaaRecord", version: "1.9.0" };
|
|
194
|
+
(() => {
|
|
195
|
+
azapi_resource_1.AzapiResource.registerSchemas(private_dns_record_schemas_1.PRIVATE_DNS_AAAA_RECORD_TYPE, private_dns_record_schemas_1.ALL_PRIVATE_DNS_AAAA_RECORD_VERSIONS);
|
|
196
|
+
})();
|
|
197
|
+
/**
|
|
198
|
+
* Azure Private DNS CNAME Record implementation
|
|
199
|
+
*
|
|
200
|
+
* CNAME records create an alias from one hostname to another.
|
|
201
|
+
* Note: CNAME records cannot coexist with other record types at the same name.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* // Create a CNAME record:
|
|
205
|
+
* const cnameRecord = new PrivateDnsCnameRecord(this, "alias-record", {
|
|
206
|
+
* name: "app",
|
|
207
|
+
* privateDnsZoneId: zone.id,
|
|
208
|
+
* ttl: 3600,
|
|
209
|
+
* cname: "www.internal.example.com",
|
|
210
|
+
* });
|
|
211
|
+
*
|
|
212
|
+
* @stability stable
|
|
213
|
+
*/
|
|
214
|
+
class PrivateDnsCnameRecord extends azapi_resource_1.AzapiResource {
|
|
215
|
+
constructor(scope, id, props) {
|
|
216
|
+
super(scope, id, props);
|
|
217
|
+
this.props = props;
|
|
218
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
219
|
+
value: this.id,
|
|
220
|
+
description: "The ID of the CNAME Record",
|
|
221
|
+
});
|
|
222
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
223
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
224
|
+
description: "The name of the CNAME Record",
|
|
225
|
+
});
|
|
226
|
+
this.fqdnOutput = new cdktf.TerraformOutput(this, "fqdn", {
|
|
227
|
+
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
228
|
+
description: "The FQDN of the CNAME Record",
|
|
229
|
+
});
|
|
230
|
+
this.idOutput.overrideLogicalId("id");
|
|
231
|
+
this.nameOutput.overrideLogicalId("name");
|
|
232
|
+
this.fqdnOutput.overrideLogicalId("fqdn");
|
|
233
|
+
}
|
|
234
|
+
resolveParentId(props) {
|
|
235
|
+
const typedProps = props;
|
|
236
|
+
return typedProps.privateDnsZoneId;
|
|
237
|
+
}
|
|
238
|
+
defaultVersion() {
|
|
239
|
+
return "2024-06-01";
|
|
240
|
+
}
|
|
241
|
+
resourceType() {
|
|
242
|
+
return private_dns_record_schemas_1.PRIVATE_DNS_CNAME_RECORD_TYPE;
|
|
243
|
+
}
|
|
244
|
+
apiSchema() {
|
|
245
|
+
return this.resolveSchema();
|
|
246
|
+
}
|
|
247
|
+
requiresLocation() {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
supportsTags() {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
createResourceBody(props) {
|
|
254
|
+
const typedProps = props;
|
|
255
|
+
const body = {
|
|
256
|
+
properties: {
|
|
257
|
+
ttl: typedProps.ttl ?? 3600,
|
|
258
|
+
cnameRecord: {
|
|
259
|
+
cname: typedProps.cname,
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
if (typedProps.metadata && Object.keys(typedProps.metadata).length > 0) {
|
|
264
|
+
body.properties.metadata =
|
|
265
|
+
typedProps.metadata;
|
|
266
|
+
}
|
|
267
|
+
return body;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get the FQDN of the record
|
|
271
|
+
*/
|
|
272
|
+
get fqdn() {
|
|
273
|
+
return `\${${this.terraformResource.fqn}.output.properties.fqdn}`;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
exports.PrivateDnsCnameRecord = PrivateDnsCnameRecord;
|
|
277
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
278
|
+
PrivateDnsCnameRecord[_c] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsCnameRecord", version: "1.9.0" };
|
|
279
|
+
(() => {
|
|
280
|
+
azapi_resource_1.AzapiResource.registerSchemas(private_dns_record_schemas_1.PRIVATE_DNS_CNAME_RECORD_TYPE, private_dns_record_schemas_1.ALL_PRIVATE_DNS_CNAME_RECORD_VERSIONS);
|
|
281
|
+
})();
|
|
282
|
+
/**
|
|
283
|
+
* Azure Private DNS MX Record implementation
|
|
284
|
+
*
|
|
285
|
+
* MX records specify mail exchange servers for a domain.
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* // Create an MX record:
|
|
289
|
+
* const mxRecord = new PrivateDnsMxRecord(this, "mail-record", {
|
|
290
|
+
* name: "@",
|
|
291
|
+
* privateDnsZoneId: zone.id,
|
|
292
|
+
* ttl: 3600,
|
|
293
|
+
* records: [
|
|
294
|
+
* { preference: 10, exchange: "mail1.internal.example.com" },
|
|
295
|
+
* { preference: 20, exchange: "mail2.internal.example.com" },
|
|
296
|
+
* ],
|
|
297
|
+
* });
|
|
298
|
+
*
|
|
299
|
+
* @stability stable
|
|
300
|
+
*/
|
|
301
|
+
class PrivateDnsMxRecord extends azapi_resource_1.AzapiResource {
|
|
302
|
+
constructor(scope, id, props) {
|
|
303
|
+
super(scope, id, props);
|
|
304
|
+
this.props = props;
|
|
305
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
306
|
+
value: this.id,
|
|
307
|
+
description: "The ID of the MX Record",
|
|
308
|
+
});
|
|
309
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
310
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
311
|
+
description: "The name of the MX Record",
|
|
312
|
+
});
|
|
313
|
+
this.fqdnOutput = new cdktf.TerraformOutput(this, "fqdn", {
|
|
314
|
+
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
315
|
+
description: "The FQDN of the MX Record",
|
|
316
|
+
});
|
|
317
|
+
this.idOutput.overrideLogicalId("id");
|
|
318
|
+
this.nameOutput.overrideLogicalId("name");
|
|
319
|
+
this.fqdnOutput.overrideLogicalId("fqdn");
|
|
320
|
+
}
|
|
321
|
+
resolveParentId(props) {
|
|
322
|
+
const typedProps = props;
|
|
323
|
+
return typedProps.privateDnsZoneId;
|
|
324
|
+
}
|
|
325
|
+
defaultVersion() {
|
|
326
|
+
return "2024-06-01";
|
|
327
|
+
}
|
|
328
|
+
resourceType() {
|
|
329
|
+
return private_dns_record_schemas_1.PRIVATE_DNS_MX_RECORD_TYPE;
|
|
330
|
+
}
|
|
331
|
+
apiSchema() {
|
|
332
|
+
return this.resolveSchema();
|
|
333
|
+
}
|
|
334
|
+
requiresLocation() {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
supportsTags() {
|
|
338
|
+
return false;
|
|
339
|
+
}
|
|
340
|
+
createResourceBody(props) {
|
|
341
|
+
const typedProps = props;
|
|
342
|
+
const body = {
|
|
343
|
+
properties: {
|
|
344
|
+
ttl: typedProps.ttl ?? 3600,
|
|
345
|
+
mxRecords: typedProps.records.map((r) => ({
|
|
346
|
+
preference: r.preference,
|
|
347
|
+
exchange: r.exchange,
|
|
348
|
+
})),
|
|
349
|
+
},
|
|
350
|
+
};
|
|
351
|
+
if (typedProps.metadata && Object.keys(typedProps.metadata).length > 0) {
|
|
352
|
+
body.properties.metadata =
|
|
353
|
+
typedProps.metadata;
|
|
354
|
+
}
|
|
355
|
+
return body;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get the FQDN of the record
|
|
359
|
+
*/
|
|
360
|
+
get fqdn() {
|
|
361
|
+
return `\${${this.terraformResource.fqn}.output.properties.fqdn}`;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
exports.PrivateDnsMxRecord = PrivateDnsMxRecord;
|
|
365
|
+
_d = JSII_RTTI_SYMBOL_1;
|
|
366
|
+
PrivateDnsMxRecord[_d] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsMxRecord", version: "1.9.0" };
|
|
367
|
+
(() => {
|
|
368
|
+
azapi_resource_1.AzapiResource.registerSchemas(private_dns_record_schemas_1.PRIVATE_DNS_MX_RECORD_TYPE, private_dns_record_schemas_1.ALL_PRIVATE_DNS_MX_RECORD_VERSIONS);
|
|
369
|
+
})();
|
|
370
|
+
/**
|
|
371
|
+
* Azure Private DNS PTR Record implementation
|
|
372
|
+
*
|
|
373
|
+
* PTR records are used for reverse DNS lookups, mapping IP addresses to hostnames.
|
|
374
|
+
*
|
|
375
|
+
* @example
|
|
376
|
+
* // Create a PTR record:
|
|
377
|
+
* const ptrRecord = new PrivateDnsPtrRecord(this, "ptr-record", {
|
|
378
|
+
* name: "4.1.0.10.in-addr.arpa",
|
|
379
|
+
* privateDnsZoneId: reverseZone.id,
|
|
380
|
+
* ttl: 3600,
|
|
381
|
+
* records: [
|
|
382
|
+
* { ptrdname: "server1.internal.example.com" },
|
|
383
|
+
* ],
|
|
384
|
+
* });
|
|
385
|
+
*
|
|
386
|
+
* @stability stable
|
|
387
|
+
*/
|
|
388
|
+
class PrivateDnsPtrRecord extends azapi_resource_1.AzapiResource {
|
|
389
|
+
constructor(scope, id, props) {
|
|
390
|
+
super(scope, id, props);
|
|
391
|
+
this.props = props;
|
|
392
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
393
|
+
value: this.id,
|
|
394
|
+
description: "The ID of the PTR Record",
|
|
395
|
+
});
|
|
396
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
397
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
398
|
+
description: "The name of the PTR Record",
|
|
399
|
+
});
|
|
400
|
+
this.fqdnOutput = new cdktf.TerraformOutput(this, "fqdn", {
|
|
401
|
+
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
402
|
+
description: "The FQDN of the PTR Record",
|
|
403
|
+
});
|
|
404
|
+
this.idOutput.overrideLogicalId("id");
|
|
405
|
+
this.nameOutput.overrideLogicalId("name");
|
|
406
|
+
this.fqdnOutput.overrideLogicalId("fqdn");
|
|
407
|
+
}
|
|
408
|
+
resolveParentId(props) {
|
|
409
|
+
const typedProps = props;
|
|
410
|
+
return typedProps.privateDnsZoneId;
|
|
411
|
+
}
|
|
412
|
+
defaultVersion() {
|
|
413
|
+
return "2024-06-01";
|
|
414
|
+
}
|
|
415
|
+
resourceType() {
|
|
416
|
+
return private_dns_record_schemas_1.PRIVATE_DNS_PTR_RECORD_TYPE;
|
|
417
|
+
}
|
|
418
|
+
apiSchema() {
|
|
419
|
+
return this.resolveSchema();
|
|
420
|
+
}
|
|
421
|
+
requiresLocation() {
|
|
422
|
+
return false;
|
|
423
|
+
}
|
|
424
|
+
supportsTags() {
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
createResourceBody(props) {
|
|
428
|
+
const typedProps = props;
|
|
429
|
+
const body = {
|
|
430
|
+
properties: {
|
|
431
|
+
ttl: typedProps.ttl ?? 3600,
|
|
432
|
+
ptrRecords: typedProps.records.map((r) => ({ ptrdname: r.ptrdname })),
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
if (typedProps.metadata && Object.keys(typedProps.metadata).length > 0) {
|
|
436
|
+
body.properties.metadata =
|
|
437
|
+
typedProps.metadata;
|
|
438
|
+
}
|
|
439
|
+
return body;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Get the FQDN of the record
|
|
443
|
+
*/
|
|
444
|
+
get fqdn() {
|
|
445
|
+
return `\${${this.terraformResource.fqn}.output.properties.fqdn}`;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
exports.PrivateDnsPtrRecord = PrivateDnsPtrRecord;
|
|
449
|
+
_e = JSII_RTTI_SYMBOL_1;
|
|
450
|
+
PrivateDnsPtrRecord[_e] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsPtrRecord", version: "1.9.0" };
|
|
451
|
+
(() => {
|
|
452
|
+
azapi_resource_1.AzapiResource.registerSchemas(private_dns_record_schemas_1.PRIVATE_DNS_PTR_RECORD_TYPE, private_dns_record_schemas_1.ALL_PRIVATE_DNS_PTR_RECORD_VERSIONS);
|
|
453
|
+
})();
|
|
454
|
+
/**
|
|
455
|
+
* Azure Private DNS SOA Record implementation
|
|
456
|
+
*
|
|
457
|
+
* SOA records contain administrative information about a DNS zone.
|
|
458
|
+
* Note: Each zone automatically has an SOA record; this is typically used to update it.
|
|
459
|
+
*
|
|
460
|
+
* @example
|
|
461
|
+
* // Update the SOA record:
|
|
462
|
+
* const soaRecord = new PrivateDnsSoaRecord(this, "soa-record", {
|
|
463
|
+
* name: "@",
|
|
464
|
+
* privateDnsZoneId: zone.id,
|
|
465
|
+
* ttl: 3600,
|
|
466
|
+
* soaRecord: {
|
|
467
|
+
* email: "admin.example.com",
|
|
468
|
+
* refreshTime: 3600,
|
|
469
|
+
* retryTime: 300,
|
|
470
|
+
* expireTime: 2419200,
|
|
471
|
+
* minimumTtl: 300,
|
|
472
|
+
* },
|
|
473
|
+
* });
|
|
474
|
+
*
|
|
475
|
+
* @stability stable
|
|
476
|
+
*/
|
|
477
|
+
class PrivateDnsSoaRecord extends azapi_resource_1.AzapiResource {
|
|
478
|
+
constructor(scope, id, props) {
|
|
479
|
+
super(scope, id, props);
|
|
480
|
+
this.props = props;
|
|
481
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
482
|
+
value: this.id,
|
|
483
|
+
description: "The ID of the SOA Record",
|
|
484
|
+
});
|
|
485
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
486
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
487
|
+
description: "The name of the SOA Record",
|
|
488
|
+
});
|
|
489
|
+
this.fqdnOutput = new cdktf.TerraformOutput(this, "fqdn", {
|
|
490
|
+
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
491
|
+
description: "The FQDN of the SOA Record",
|
|
492
|
+
});
|
|
493
|
+
this.idOutput.overrideLogicalId("id");
|
|
494
|
+
this.nameOutput.overrideLogicalId("name");
|
|
495
|
+
this.fqdnOutput.overrideLogicalId("fqdn");
|
|
496
|
+
}
|
|
497
|
+
resolveParentId(props) {
|
|
498
|
+
const typedProps = props;
|
|
499
|
+
return typedProps.privateDnsZoneId;
|
|
500
|
+
}
|
|
501
|
+
defaultVersion() {
|
|
502
|
+
return "2024-06-01";
|
|
503
|
+
}
|
|
504
|
+
resourceType() {
|
|
505
|
+
return private_dns_record_schemas_1.PRIVATE_DNS_SOA_RECORD_TYPE;
|
|
506
|
+
}
|
|
507
|
+
apiSchema() {
|
|
508
|
+
return this.resolveSchema();
|
|
509
|
+
}
|
|
510
|
+
requiresLocation() {
|
|
511
|
+
return false;
|
|
512
|
+
}
|
|
513
|
+
supportsTags() {
|
|
514
|
+
return false;
|
|
515
|
+
}
|
|
516
|
+
createResourceBody(props) {
|
|
517
|
+
const typedProps = props;
|
|
518
|
+
const soaRecord = {};
|
|
519
|
+
if (typedProps.soaRecord.host !== undefined) {
|
|
520
|
+
soaRecord.host = typedProps.soaRecord.host;
|
|
521
|
+
}
|
|
522
|
+
if (typedProps.soaRecord.email !== undefined) {
|
|
523
|
+
soaRecord.email = typedProps.soaRecord.email;
|
|
524
|
+
}
|
|
525
|
+
if (typedProps.soaRecord.serialNumber !== undefined) {
|
|
526
|
+
soaRecord.serialNumber = typedProps.soaRecord.serialNumber;
|
|
527
|
+
}
|
|
528
|
+
if (typedProps.soaRecord.refreshTime !== undefined) {
|
|
529
|
+
soaRecord.refreshTime = typedProps.soaRecord.refreshTime;
|
|
530
|
+
}
|
|
531
|
+
if (typedProps.soaRecord.retryTime !== undefined) {
|
|
532
|
+
soaRecord.retryTime = typedProps.soaRecord.retryTime;
|
|
533
|
+
}
|
|
534
|
+
if (typedProps.soaRecord.expireTime !== undefined) {
|
|
535
|
+
soaRecord.expireTime = typedProps.soaRecord.expireTime;
|
|
536
|
+
}
|
|
537
|
+
if (typedProps.soaRecord.minimumTtl !== undefined) {
|
|
538
|
+
soaRecord.minimumTtl = typedProps.soaRecord.minimumTtl;
|
|
539
|
+
}
|
|
540
|
+
const body = {
|
|
541
|
+
properties: {
|
|
542
|
+
ttl: typedProps.ttl ?? 3600,
|
|
543
|
+
soaRecord: soaRecord,
|
|
544
|
+
},
|
|
545
|
+
};
|
|
546
|
+
if (typedProps.metadata && Object.keys(typedProps.metadata).length > 0) {
|
|
547
|
+
body.properties.metadata =
|
|
548
|
+
typedProps.metadata;
|
|
549
|
+
}
|
|
550
|
+
return body;
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Get the FQDN of the record
|
|
554
|
+
*/
|
|
555
|
+
get fqdn() {
|
|
556
|
+
return `\${${this.terraformResource.fqn}.output.properties.fqdn}`;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
exports.PrivateDnsSoaRecord = PrivateDnsSoaRecord;
|
|
560
|
+
_f = JSII_RTTI_SYMBOL_1;
|
|
561
|
+
PrivateDnsSoaRecord[_f] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsSoaRecord", version: "1.9.0" };
|
|
562
|
+
(() => {
|
|
563
|
+
azapi_resource_1.AzapiResource.registerSchemas(private_dns_record_schemas_1.PRIVATE_DNS_SOA_RECORD_TYPE, private_dns_record_schemas_1.ALL_PRIVATE_DNS_SOA_RECORD_VERSIONS);
|
|
564
|
+
})();
|
|
565
|
+
/**
|
|
566
|
+
* Azure Private DNS SRV Record implementation
|
|
567
|
+
*
|
|
568
|
+
* SRV records specify the location of services like SIP, XMPP, etc.
|
|
569
|
+
*
|
|
570
|
+
* @example
|
|
571
|
+
* // Create an SRV record for a SIP service:
|
|
572
|
+
* const srvRecord = new PrivateDnsSrvRecord(this, "sip-record", {
|
|
573
|
+
* name: "_sip._tcp",
|
|
574
|
+
* privateDnsZoneId: zone.id,
|
|
575
|
+
* ttl: 3600,
|
|
576
|
+
* records: [
|
|
577
|
+
* { priority: 10, weight: 60, port: 5060, target: "sipserver1.internal.example.com" },
|
|
578
|
+
* { priority: 10, weight: 40, port: 5060, target: "sipserver2.internal.example.com" },
|
|
579
|
+
* ],
|
|
580
|
+
* });
|
|
581
|
+
*
|
|
582
|
+
* @stability stable
|
|
583
|
+
*/
|
|
584
|
+
class PrivateDnsSrvRecord extends azapi_resource_1.AzapiResource {
|
|
585
|
+
constructor(scope, id, props) {
|
|
586
|
+
super(scope, id, props);
|
|
587
|
+
this.props = props;
|
|
588
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
589
|
+
value: this.id,
|
|
590
|
+
description: "The ID of the SRV Record",
|
|
591
|
+
});
|
|
592
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
593
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
594
|
+
description: "The name of the SRV Record",
|
|
595
|
+
});
|
|
596
|
+
this.fqdnOutput = new cdktf.TerraformOutput(this, "fqdn", {
|
|
597
|
+
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
598
|
+
description: "The FQDN of the SRV Record",
|
|
599
|
+
});
|
|
600
|
+
this.idOutput.overrideLogicalId("id");
|
|
601
|
+
this.nameOutput.overrideLogicalId("name");
|
|
602
|
+
this.fqdnOutput.overrideLogicalId("fqdn");
|
|
603
|
+
}
|
|
604
|
+
resolveParentId(props) {
|
|
605
|
+
const typedProps = props;
|
|
606
|
+
return typedProps.privateDnsZoneId;
|
|
607
|
+
}
|
|
608
|
+
defaultVersion() {
|
|
609
|
+
return "2024-06-01";
|
|
610
|
+
}
|
|
611
|
+
resourceType() {
|
|
612
|
+
return private_dns_record_schemas_1.PRIVATE_DNS_SRV_RECORD_TYPE;
|
|
613
|
+
}
|
|
614
|
+
apiSchema() {
|
|
615
|
+
return this.resolveSchema();
|
|
616
|
+
}
|
|
617
|
+
requiresLocation() {
|
|
618
|
+
return false;
|
|
619
|
+
}
|
|
620
|
+
supportsTags() {
|
|
621
|
+
return false;
|
|
622
|
+
}
|
|
623
|
+
createResourceBody(props) {
|
|
624
|
+
const typedProps = props;
|
|
625
|
+
const body = {
|
|
626
|
+
properties: {
|
|
627
|
+
ttl: typedProps.ttl ?? 3600,
|
|
628
|
+
srvRecords: typedProps.records.map((r) => ({
|
|
629
|
+
priority: r.priority,
|
|
630
|
+
weight: r.weight,
|
|
631
|
+
port: r.port,
|
|
632
|
+
target: r.target,
|
|
633
|
+
})),
|
|
634
|
+
},
|
|
635
|
+
};
|
|
636
|
+
if (typedProps.metadata && Object.keys(typedProps.metadata).length > 0) {
|
|
637
|
+
body.properties.metadata =
|
|
638
|
+
typedProps.metadata;
|
|
639
|
+
}
|
|
640
|
+
return body;
|
|
641
|
+
}
|
|
642
|
+
/**
|
|
643
|
+
* Get the FQDN of the record
|
|
644
|
+
*/
|
|
645
|
+
get fqdn() {
|
|
646
|
+
return `\${${this.terraformResource.fqn}.output.properties.fqdn}`;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
exports.PrivateDnsSrvRecord = PrivateDnsSrvRecord;
|
|
650
|
+
_g = JSII_RTTI_SYMBOL_1;
|
|
651
|
+
PrivateDnsSrvRecord[_g] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsSrvRecord", version: "1.9.0" };
|
|
652
|
+
(() => {
|
|
653
|
+
azapi_resource_1.AzapiResource.registerSchemas(private_dns_record_schemas_1.PRIVATE_DNS_SRV_RECORD_TYPE, private_dns_record_schemas_1.ALL_PRIVATE_DNS_SRV_RECORD_VERSIONS);
|
|
654
|
+
})();
|
|
655
|
+
/**
|
|
656
|
+
* Azure Private DNS TXT Record implementation
|
|
657
|
+
*
|
|
658
|
+
* TXT records store arbitrary text data, commonly used for SPF, DKIM, etc.
|
|
659
|
+
*
|
|
660
|
+
* @example
|
|
661
|
+
* // Create a TXT record for SPF:
|
|
662
|
+
* const txtRecord = new PrivateDnsTxtRecord(this, "spf-record", {
|
|
663
|
+
* name: "@",
|
|
664
|
+
* privateDnsZoneId: zone.id,
|
|
665
|
+
* ttl: 3600,
|
|
666
|
+
* records: [
|
|
667
|
+
* { value: ["v=spf1 include:spf.protection.outlook.com -all"] },
|
|
668
|
+
* ],
|
|
669
|
+
* });
|
|
670
|
+
*
|
|
671
|
+
* @stability stable
|
|
672
|
+
*/
|
|
673
|
+
class PrivateDnsTxtRecord extends azapi_resource_1.AzapiResource {
|
|
674
|
+
constructor(scope, id, props) {
|
|
675
|
+
super(scope, id, props);
|
|
676
|
+
this.props = props;
|
|
677
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
678
|
+
value: this.id,
|
|
679
|
+
description: "The ID of the TXT Record",
|
|
680
|
+
});
|
|
681
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
682
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
683
|
+
description: "The name of the TXT Record",
|
|
684
|
+
});
|
|
685
|
+
this.fqdnOutput = new cdktf.TerraformOutput(this, "fqdn", {
|
|
686
|
+
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
687
|
+
description: "The FQDN of the TXT Record",
|
|
688
|
+
});
|
|
689
|
+
this.idOutput.overrideLogicalId("id");
|
|
690
|
+
this.nameOutput.overrideLogicalId("name");
|
|
691
|
+
this.fqdnOutput.overrideLogicalId("fqdn");
|
|
692
|
+
}
|
|
693
|
+
resolveParentId(props) {
|
|
694
|
+
const typedProps = props;
|
|
695
|
+
return typedProps.privateDnsZoneId;
|
|
696
|
+
}
|
|
697
|
+
defaultVersion() {
|
|
698
|
+
return "2024-06-01";
|
|
699
|
+
}
|
|
700
|
+
resourceType() {
|
|
701
|
+
return private_dns_record_schemas_1.PRIVATE_DNS_TXT_RECORD_TYPE;
|
|
702
|
+
}
|
|
703
|
+
apiSchema() {
|
|
704
|
+
return this.resolveSchema();
|
|
705
|
+
}
|
|
706
|
+
requiresLocation() {
|
|
707
|
+
return false;
|
|
708
|
+
}
|
|
709
|
+
supportsTags() {
|
|
710
|
+
return false;
|
|
711
|
+
}
|
|
712
|
+
createResourceBody(props) {
|
|
713
|
+
const typedProps = props;
|
|
714
|
+
const body = {
|
|
715
|
+
properties: {
|
|
716
|
+
ttl: typedProps.ttl ?? 3600,
|
|
717
|
+
txtRecords: typedProps.records.map((r) => ({ value: r.value })),
|
|
718
|
+
},
|
|
719
|
+
};
|
|
720
|
+
if (typedProps.metadata && Object.keys(typedProps.metadata).length > 0) {
|
|
721
|
+
body.properties.metadata =
|
|
722
|
+
typedProps.metadata;
|
|
723
|
+
}
|
|
724
|
+
return body;
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* Get the FQDN of the record
|
|
728
|
+
*/
|
|
729
|
+
get fqdn() {
|
|
730
|
+
return `\${${this.terraformResource.fqn}.output.properties.fqdn}`;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
exports.PrivateDnsTxtRecord = PrivateDnsTxtRecord;
|
|
734
|
+
_h = JSII_RTTI_SYMBOL_1;
|
|
735
|
+
PrivateDnsTxtRecord[_h] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsTxtRecord", version: "1.9.0" };
|
|
736
|
+
(() => {
|
|
737
|
+
azapi_resource_1.AzapiResource.registerSchemas(private_dns_record_schemas_1.PRIVATE_DNS_TXT_RECORD_TYPE, private_dns_record_schemas_1.ALL_PRIVATE_DNS_TXT_RECORD_VERSIONS);
|
|
738
|
+
})();
|
|
739
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1kbnMtcmVjb3Jkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9henVyZS1wcml2YXRlZG5zem9uZS9saWIvcmVjb3Jkcy9wcml2YXRlLWRucy1yZWNvcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCwrQkFBK0I7QUFFL0IsNkVBaUJzQztBQUN0QyxpRkFHc0Q7QUF5RHREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFhLGlCQUFrQixTQUFRLDhCQUFhO0lBYWxELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNwRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxXQUFXLEVBQUUsd0JBQXdCO1NBQ3RDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsUUFBUTtZQUMvQyxXQUFXLEVBQUUsMEJBQTBCO1NBQ3hDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsMEJBQTBCO1lBQ2pFLFdBQVcsRUFBRSwwQkFBMEI7U0FDeEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFD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QUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsMEJBQTBCLENBQUM7SUFDcEUsQ0FBQzs7QUFwRkgsa0RBcUZDOzs7QUFwRkM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0Isd0RBQTJCLEVBQzNCLGdFQUFtQyxDQUNwQyxDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF6dXJlIFByaXZhdGUgRE5TIFpvbmUgUmVjb3JkIGltcGxlbWVudGF0aW9ucyB1c2luZyBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgZmlsZSBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbnMgZm9yIGFsbCBQcml2YXRlIEROUyBab25lIHJlY29yZCB0eXBlczpcbiAqIC0gUHJpdmF0ZURuc0FSZWNvcmQgKEEgcmVjb3JkcyB3aXRoIElQdjQgYWRkcmVzc2VzKVxuICogLSBQcml2YXRlRG5zQWFhYVJlY29yZCAoQUFBQSByZWNvcmRzIHdpdGggSVB2NiBhZGRyZXNzZXMpXG4gKiAtIFByaXZhdGVEbnNDbmFtZVJlY29yZCAoQ05BTUUgcmVjb3JkcylcbiAqIC0gUHJpdmF0ZURuc014UmVjb3JkIChNWCByZWNvcmRzIHdpdGggZXhjaGFuZ2UgYW5kIHByZWZlcmVuY2UpXG4gKiAtIFByaXZhdGVEbnNQdHJSZWNvcmQgKFBUUiByZWNvcmRzKVxuICogLSBQcml2YXRlRG5zU29hUmVjb3JkIChTT0EgcmVjb3JkcylcbiAqIC0gUHJpdmF0ZURuc1NydlJlY29yZCAoU1JWIHJlY29yZHMgd2l0aCBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0LCB0YXJnZXQpXG4gKiAtIFByaXZhdGVEbnNUeHRSZWNvcmQgKFRYVCByZWNvcmRzKVxuICpcbiAqIEFQSSBWZXJzaW9uOiAyMDI0LTA2LTAxXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQUxMX1BSSVZBVEVfRE5TX0FfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfUFJJVkFURV9ETlNfQUFBQV9SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9QUklWQVRFX0ROU19DTkFNRV9SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9QUklWQVRFX0ROU19NWF9SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9QUklWQVRFX0ROU19QVFJfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfUFJJVkFURV9ETlNfU09BX1JFQ09SRF9WRVJTSU9OUyxcbiAgQUxMX1BSSVZBVEVfRE5TX1NSVl9SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9QUklWQVRFX0ROU19UWFRfUkVDT1JEX1ZFUlNJT05TLFxuICBQUklWQVRFX0ROU19BX1JFQ09SRF9UWVBFLFxuICBQUklWQVRFX0ROU19BQUFBX1JFQ09SRF9UWVBFLFxuICBQUklWQVRFX0ROU19DTkFNRV9SRUNPUkRfVFlQRSxcbiAgUFJJVkFURV9ETlNfTVhfUkVDT1JEX1RZUEUsXG4gIFBSSVZBVEVfRE5TX1BUUl9SRUNPUkRfVFlQRSxcbiAgUFJJVkFURV9ETlNfU09BX1JFQ09SRF9UWVBFLFxuICBQUklWQVRFX0ROU19TUlZfUkVDT1JEX1RZUEUsXG4gIFBSSVZBVEVfRE5TX1RYVF9SRUNPUkRfVFlQRSxcbn0gZnJvbSBcIi4vcHJpdmF0ZS1kbnMtcmVjb3JkLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT01NT04gSU5URVJGQUNFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCYXNlIHByb3BlcnRpZXMgc2hhcmVkIGJ5IGFsbCBQcml2YXRlIEROUyByZWNvcmQgdHlwZXNcbiAqXG4gKiBOb3RlOiBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIGluaGVyaXRlZCBmcm9tIEF6YXBpUmVzb3VyY2VQcm9wcy5cbiAqIEZvciBETlMgcmVjb3JkcywgdXNlIEAgZm9yIGFwZXggcmVjb3JkcyBvciBwcm92aWRlIGEgcmVsYXRpdmUgbmFtZSBsaWtlIFwid3d3XCIgb3IgXCJtYWlsXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpdmF0ZURuc1JlY29yZEJhc2VQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBJRCBvZiB0aGUgcGFyZW50IFByaXZhdGUgRE5TIFpvbmVcbiAgICogQGV4YW1wbGUgem9uZS5pZCBvciBcIi9zdWJzY3JpcHRpb25zLy4uLi9wcm92aWRlcnMvTWljcm9zb2Z0Lk5ldHdvcmsvcHJpdmF0ZURuc1pvbmVzL2V4YW1wbGUuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVEbnNab25lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZSB0byBMaXZlIGluIHNlY29uZHNcbiAgICogQGRlZmF1bHQgMzYwMFxuICAgKi9cbiAgcmVhZG9ubHkgdHRsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSByZWNvcmQgc2V0XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFbnRyeSBmb3IgYW4gQSByZWNvcmQgd2l0aCBJUHY0IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIElQdjQgYWRkcmVzcyBvZiB0aGlzIEEgcmVjb3JkXG4gICAqIEBleGFtcGxlIFwiMTAuMC4xLjRcIlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NEFkZHJlc3M6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQcml2YXRlIEROUyBBIFJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaXZhdGVEbnNBUmVjb3JkUHJvcHMgZXh0ZW5kcyBQcml2YXRlRG5zUmVjb3JkQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIEEgcmVjb3JkcyB3aXRoIElQdjQgYWRkcmVzc2VzXG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBBUmVjb3JkRW50cnlbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBQcml2YXRlIEROUyBBIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIEEgcmVjb3JkcyBtYXAgYSBob3N0bmFtZSB0byBvbmUgb3IgbW9yZSBJUHY0IGFkZHJlc3Nlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFuIEEgcmVjb3JkIHdpdGggbXVsdGlwbGUgSVAgYWRkcmVzc2VzOlxuICogY29uc3QgYVJlY29yZCA9IG5ldyBQcml2YXRlRG5zQVJlY29yZCh0aGlzLCBcIndlYi1hLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwid3d3XCIsXG4gKiAgIHByaXZhdGVEbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzAwLFxuICogICByZWNvcmRzOiBbXG4gKiAgICAgeyBpcHY0QWRkcmVzczogXCIxMC4wLjEuNFwiIH0sXG4gKiAgICAgeyBpcHY0QWRkcmVzczogXCIxMC4wLjEuNVwiIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZURuc0FSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIFBSSVZBVEVfRE5TX0FfUkVDT1JEX1RZUEUsXG4gICAgICBBTExfUFJJVkFURV9ETlNfQV9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUHJpdmF0ZURuc0FSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByaXZhdGVEbnNBUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBBIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIEEgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZnFkbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImZxZG5cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zQVJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLnByaXZhdGVEbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDI0LTA2LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFBSSVZBVEVfRE5TX0FfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zQVJlY29yZFByb3BzO1xuICAgIGNvbnN0IGJvZHk6IHsgW2tleTogc3RyaW5nXTogb2JqZWN0IH0gPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR0bDogdHlwZWRQcm9wcy50dGwgPz8gMzYwMCxcbiAgICAgICAgYVJlY29yZHM6IHR5cGVkUHJvcHMucmVjb3Jkcy5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgaXB2NEFkZHJlc3M6IHIuaXB2NEFkZHJlc3MsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIChib2R5LnByb3BlcnRpZXMgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLm1ldGFkYXRhID1cbiAgICAgICAgdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBQUFBIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFbnRyeSBmb3IgYW4gQUFBQSByZWNvcmQgd2l0aCBJUHY2IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYWFhUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIElQdjYgYWRkcmVzcyBvZiB0aGlzIEFBQUEgcmVjb3JkXG4gICAqIEBleGFtcGxlIFwiMjAwMTpkYjg6OjFcIlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkFkZHJlc3M6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQcml2YXRlIEROUyBBQUFBIFJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaXZhdGVEbnNBYWFhUmVjb3JkUHJvcHMgZXh0ZW5kcyBQcml2YXRlRG5zUmVjb3JkQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIEFBQUEgcmVjb3JkcyB3aXRoIElQdjYgYWRkcmVzc2VzXG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBBYWFhUmVjb3JkRW50cnlbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBQcml2YXRlIEROUyBBQUFBIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIEFBQUEgcmVjb3JkcyBtYXAgYSBob3N0bmFtZSB0byBvbmUgb3IgbW9yZSBJUHY2IGFkZHJlc3Nlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFuIEFBQUEgcmVjb3JkOlxuICogY29uc3QgYWFhYVJlY29yZCA9IG5ldyBQcml2YXRlRG5zQWFhYVJlY29yZCh0aGlzLCBcIndlYi1hYWFhLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwid3d3XCIsXG4gKiAgIHByaXZhdGVEbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzAwLFxuICogICByZWNvcmRzOiBbXG4gKiAgICAgeyBpcHY2QWRkcmVzczogXCIyMDAxOmRiODo6MVwiIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZURuc0FhYWFSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIFBSSVZBVEVfRE5TX0FBQUFfUkVDT1JEX1RZUEUsXG4gICAgICBBTExfUFJJVkFURV9ETlNfQUFBQV9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUHJpdmF0ZURuc0FhYWFSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByaXZhdGVEbnNBYWFhUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBBQUFBIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIEFBQUEgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgQUFBQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZnFkbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImZxZG5cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zQWFhYVJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLnByaXZhdGVEbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDI0LTA2LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFBSSVZBVEVfRE5TX0FBQUFfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zQWFhYVJlY29yZFByb3BzO1xuICAgIGNvbnN0IGJvZHk6IHsgW2tleTogc3RyaW5nXTogb2JqZWN0IH0gPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR0bDogdHlwZWRQcm9wcy50dGwgPz8gMzYwMCxcbiAgICAgICAgYWFhYVJlY29yZHM6IHR5cGVkUHJvcHMucmVjb3Jkcy5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgaXB2NkFkZHJlc3M6IHIuaXB2NkFkZHJlc3MsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIChib2R5LnByb3BlcnRpZXMgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLm1ldGFkYXRhID1cbiAgICAgICAgdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDTkFNRSBSRUNPUkRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHJpdmF0ZSBETlMgQ05BTUUgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpdmF0ZURuc0NuYW1lUmVjb3JkUHJvcHMgZXh0ZW5kcyBQcml2YXRlRG5zUmVjb3JkQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjYW5vbmljYWwgbmFtZSBmb3IgdGhpcyBDTkFNRSByZWNvcmRcbiAgICogQGV4YW1wbGUgXCJ3d3cuY29udG9zby5jb21cIlxuICAgKi9cbiAgcmVhZG9ubHkgY25hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBenVyZSBQcml2YXRlIEROUyBDTkFNRSBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBDTkFNRSByZWNvcmRzIGNyZWF0ZSBhbiBhbGlhcyBmcm9tIG9uZSBob3N0bmFtZSB0byBhbm90aGVyLlxuICogTm90ZTogQ05BTUUgcmVjb3JkcyBjYW5ub3QgY29leGlzdCB3aXRoIG90aGVyIHJlY29yZCB0eXBlcyBhdCB0aGUgc2FtZSBuYW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBDTkFNRSByZWNvcmQ6XG4gKiBjb25zdCBjbmFtZVJlY29yZCA9IG5ldyBQcml2YXRlRG5zQ25hbWVSZWNvcmQodGhpcywgXCJhbGlhcy1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcImFwcFwiLFxuICogICBwcml2YXRlRG5zWm9uZUlkOiB6b25lLmlkLFxuICogICB0dGw6IDM2MDAsXG4gKiAgIGNuYW1lOiBcInd3dy5pbnRlcm5hbC5leGFtcGxlLmNvbVwiLFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByaXZhdGVEbnNDbmFtZVJlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgUFJJVkFURV9ETlNfQ05BTUVfUkVDT1JEX1RZUEUsXG4gICAgICBBTExfUFJJVkFURV9ETlNfQ05BTUVfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFByaXZhdGVEbnNDbmFtZVJlY29yZFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGZxZG5PdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHJpdmF0ZURuc0NuYW1lUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBDTkFNRSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBDTkFNRSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuZnFkbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJmcWRuXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBGUUROIG9mIHRoZSBDTkFNRSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZnFkbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImZxZG5cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zQ25hbWVSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5wcml2YXRlRG5zWm9uZUlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAyNC0wNi0wMVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBQUklWQVRFX0ROU19DTkFNRV9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFByaXZhdGVEbnNDbmFtZVJlY29yZFByb3BzO1xuICAgIGNvbnN0IGJvZHk6IHsgW2tleTogc3RyaW5nXTogb2JqZWN0IH0gPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR0bDogdHlwZWRQcm9wcy50dGwgPz8gMzYwMCxcbiAgICAgICAgY25hbWVSZWNvcmQ6IHtcbiAgICAgICAgICBjbmFtZTogdHlwZWRQcm9wcy5jbmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIChib2R5LnByb3BlcnRpZXMgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLm1ldGFkYXRhID1cbiAgICAgICAgdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNWCBSRUNPUkRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRW50cnkgZm9yIGFuIE1YIHJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE14UmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIHByZWZlcmVuY2UgdmFsdWUgZm9yIHRoaXMgTVggcmVjb3JkIChsb3dlciB2YWx1ZXMgaGF2ZSBoaWdoZXIgcHJpb3JpdHkpXG4gICAqIEBleGFtcGxlIDEwXG4gICAqL1xuICByZWFkb25seSBwcmVmZXJlbmNlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYWlsIGV4Y2hhbmdlIHNlcnZlciBob3N0bmFtZVxuICAgKiBAZXhhbXBsZSBcIm1haWwxLmV4YW1wbGUuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2hhbmdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHJpdmF0ZSBETlMgTVggUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpdmF0ZURuc014UmVjb3JkUHJvcHMgZXh0ZW5kcyBQcml2YXRlRG5zUmVjb3JkQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIE1YIHJlY29yZHMgd2l0aCBleGNoYW5nZSBhbmQgcHJlZmVyZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkczogTXhSZWNvcmRFbnRyeVtdO1xufVxuXG4vKipcbiAqIEF6dXJlIFByaXZhdGUgRE5TIE1YIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIE1YIHJlY29yZHMgc3BlY2lmeSBtYWlsIGV4Y2hhbmdlIHNlcnZlcnMgZm9yIGEgZG9tYWluLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gTVggcmVjb3JkOlxuICogY29uc3QgbXhSZWNvcmQgPSBuZXcgUHJpdmF0ZURuc014UmVjb3JkKHRoaXMsIFwibWFpbC1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcIkBcIixcbiAqICAgcHJpdmF0ZURuc1pvbmVJZDogem9uZS5pZCxcbiAqICAgdHRsOiAzNjAwLFxuICogICByZWNvcmRzOiBbXG4gKiAgICAgeyBwcmVmZXJlbmNlOiAxMCwgZXhjaGFuZ2U6IFwibWFpbDEuaW50ZXJuYWwuZXhhbXBsZS5jb21cIiB9LFxuICogICAgIHsgcHJlZmVyZW5jZTogMjAsIGV4Y2hhbmdlOiBcIm1haWwyLmludGVybmFsLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQcml2YXRlRG5zTXhSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIFBSSVZBVEVfRE5TX01YX1JFQ09SRF9UWVBFLFxuICAgICAgQUxMX1BSSVZBVEVfRE5TX01YX1JFQ09SRF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBQcml2YXRlRG5zTXhSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByaXZhdGVEbnNNeFJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUHJpdmF0ZURuc014UmVjb3JkUHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMucHJpdmF0ZURuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMDYtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUFJJVkFURV9ETlNfTVhfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zTXhSZWNvcmRQcm9wcztcbiAgICBjb25zdCBib2R5OiB7IFtrZXk6IHN0cmluZ106IG9iamVjdCB9ID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB0dGw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgICAgIG14UmVjb3JkczogdHlwZWRQcm9wcy5yZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgICBwcmVmZXJlbmNlOiByLnByZWZlcmVuY2UsXG4gICAgICAgICAgZXhjaGFuZ2U6IHIuZXhjaGFuZ2UsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIChib2R5LnByb3BlcnRpZXMgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLm1ldGFkYXRhID1cbiAgICAgICAgdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQVFIgUkVDT1JEXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVudHJ5IGZvciBhIFBUUiByZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdHJSZWNvcmRFbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgUFRSIHRhcmdldCBkb21haW4gbmFtZVxuICAgKiBAZXhhbXBsZSBcInNlcnZlcjEuaW50ZXJuYWwuZXhhbXBsZS5jb21cIlxuICAgKi9cbiAgcmVhZG9ubHkgcHRyZG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQcml2YXRlIEROUyBQVFIgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpdmF0ZURuc1B0clJlY29yZFByb3BzIGV4dGVuZHMgUHJpdmF0ZURuc1JlY29yZEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBQVFIgcmVjb3JkcyB3aXRoIHB0cmRuYW1lIHZhbHVlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkczogUHRyUmVjb3JkRW50cnlbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBQcml2YXRlIEROUyBQVFIgUmVjb3JkIGltcGxlbWVudGF0aW9uXG4gKlxuICogUFRSIHJlY29yZHMgYXJlIHVzZWQgZm9yIHJldmVyc2UgRE5TIGxvb2t1cHMsIG1hcHBpbmcgSVAgYWRkcmVzc2VzIHRvIGhvc3RuYW1lcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgUFRSIHJlY29yZDpcbiAqIGNvbnN0IHB0clJlY29yZCA9IG5ldyBQcml2YXRlRG5zUHRyUmVjb3JkKHRoaXMsIFwicHRyLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiNC4xLjAuMTAuaW4tYWRkci5hcnBhXCIsXG4gKiAgIHByaXZhdGVEbnNab25lSWQ6IHJldmVyc2Vab25lLmlkLFxuICogICB0dGw6IDM2MDAsXG4gKiAgIHJlY29yZHM6IFtcbiAqICAgICB7IHB0cmRuYW1lOiBcInNlcnZlcjEuaW50ZXJuYWwuZXhhbXBsZS5jb21cIiB9LFxuICogICBdLFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByaXZhdGVEbnNQdHJSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIFBSSVZBVEVfRE5TX1BUUl9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9QUklWQVRFX0ROU19QVFJfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFByaXZhdGVEbnNQdHJSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByaXZhdGVEbnNQdHJSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFBUUiBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBQVFIgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgUFRSIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5mcWRuT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiZnFkblwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFByaXZhdGVEbnNQdHJSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5wcml2YXRlRG5zWm9uZUlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAyNC0wNi0wMVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBQUklWQVRFX0ROU19QVFJfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zUHRyUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgYm9keTogeyBba2V5OiBzdHJpbmddOiBvYmplY3QgfSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdHRsOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgICBwdHJSZWNvcmRzOiB0eXBlZFByb3BzLnJlY29yZHMubWFwKChyKSA9PiAoeyBwdHJkbmFtZTogci5wdHJkbmFtZSB9KSksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAodHlwZWRQcm9wcy5tZXRhZGF0YSAmJiBPYmplY3Qua2V5cyh0eXBlZFByb3BzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAoYm9keS5wcm9wZXJ0aWVzIGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KS5tZXRhZGF0YSA9XG4gICAgICAgIHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGUUROIG9mIHRoZSByZWNvcmRcbiAgICovXG4gIHB1YmxpYyBnZXQgZnFkbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YDtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU09BIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBTT0EgcmVjb3JkIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb2FSZWNvcmRDb25maWcge1xuICAvKipcbiAgICogVGhlIGRvbWFpbiBuYW1lIG9mIHRoZSBhdXRob3JpdGF0aXZlIG5hbWUgc2VydmVyXG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW1haWwgY29udGFjdCBmb3IgdGhpcyB6b25lICh3aXRoIEAgcmVwbGFjZWQgYnkgLilcbiAgICogQGV4YW1wbGUgXCJhZG1pbi5leGFtcGxlLmNvbVwiIChmb3IgYWRtaW5AZXhhbXBsZS5jb20pXG4gICAqL1xuICByZWFkb25seSBlbWFpbD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlcmlhbCBudW1iZXIgZm9yIHRoaXMgem9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VyaWFsTnVtYmVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVmcmVzaCB0aW1lIGluIHNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IHJlZnJlc2hUaW1lPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmV0cnkgdGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSByZXRyeVRpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBleHBpcmUgdGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBleHBpcmVUaW1lPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBUVEwgaW4gc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVR0bD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQcml2YXRlIEROUyBTT0EgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpdmF0ZURuc1NvYVJlY29yZFByb3BzIGV4dGVuZHMgUHJpdmF0ZURuc1JlY29yZEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBTT0EgcmVjb3JkIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNvYVJlY29yZDogU29hUmVjb3JkQ29uZmlnO1xufVxuXG4vKipcbiAqIEF6dXJlIFByaXZhdGUgRE5TIFNPQSBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBTT0EgcmVjb3JkcyBjb250YWluIGFkbWluaXN0cmF0aXZlIGluZm9ybWF0aW9uIGFib3V0IGEgRE5TIHpvbmUuXG4gKiBOb3RlOiBFYWNoIHpvbmUgYXV0b21hdGljYWxseSBoYXMgYW4gU09BIHJlY29yZDsgdGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byB1cGRhdGUgaXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVwZGF0ZSB0aGUgU09BIHJlY29yZDpcbiAqIGNvbnN0IHNvYVJlY29yZCA9IG5ldyBQcml2YXRlRG5zU29hUmVjb3JkKHRoaXMsIFwic29hLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiQFwiLFxuICogICBwcml2YXRlRG5zWm9uZUlkOiB6b25lLmlkLFxuICogICB0dGw6IDM2MDAsXG4gKiAgIHNvYVJlY29yZDoge1xuICogICAgIGVtYWlsOiBcImFkbWluLmV4YW1wbGUuY29tXCIsXG4gKiAgICAgcmVmcmVzaFRpbWU6IDM2MDAsXG4gKiAgICAgcmV0cnlUaW1lOiAzMDAsXG4gKiAgICAgZXhwaXJlVGltZTogMjQxOTIwMCxcbiAqICAgICBtaW5pbXVtVHRsOiAzMDAsXG4gKiAgIH0sXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZURuc1NvYVJlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgUFJJVkFURV9ETlNfU09BX1JFQ09SRF9UWVBFLFxuICAgICAgQUxMX1BSSVZBVEVfRE5TX1NPQV9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUHJpdmF0ZURuc1NvYVJlY29yZFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGZxZG5PdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHJpdmF0ZURuc1NvYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgU09BIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFNPQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuZnFkbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJmcWRuXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBGUUROIG9mIHRoZSBTT0EgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUHJpdmF0ZURuc1NvYVJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLnByaXZhdGVEbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDI0LTA2LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFBSSVZBVEVfRE5TX1NPQV9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFByaXZhdGVEbnNTb2FSZWNvcmRQcm9wcztcbiAgICBjb25zdCBzb2FSZWNvcmQ6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge307XG5cbiAgICBpZiAodHlwZWRQcm9wcy5zb2FSZWNvcmQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzb2FSZWNvcmQuaG9zdCA9IHR5cGVkUHJvcHMuc29hUmVjb3JkLmhvc3Q7XG4gICAgfVxuICAgIGlmICh0eXBlZFByb3BzLnNvYVJlY29yZC5lbWFpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzb2FSZWNvcmQuZW1haWwgPSB0eXBlZFByb3BzLnNvYVJlY29yZC5lbWFpbDtcbiAgICB9XG4gICAgaWYgKHR5cGVkUHJvcHMuc29hUmVjb3JkLnNlcmlhbE51bWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzb2FSZWNvcmQuc2VyaWFsTnVtYmVyID0gdHlwZWRQcm9wcy5zb2FSZWNvcmQuc2VyaWFsTnVtYmVyO1xuICAgIH1cbiAgICBpZiAodHlwZWRQcm9wcy5zb2FSZWNvcmQucmVmcmVzaFRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLnJlZnJlc2hUaW1lID0gdHlwZWRQcm9wcy5zb2FSZWNvcmQucmVmcmVzaFRpbWU7XG4gICAgfVxuICAgIGlmICh0eXBlZFByb3BzLnNvYVJlY29yZC5yZXRyeVRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLnJldHJ5VGltZSA9IHR5cGVkUHJvcHMuc29hUmVjb3JkLnJldHJ5VGltZTtcbiAgICB9XG4gICAgaWYgKHR5cGVkUHJvcHMuc29hUmVjb3JkLmV4cGlyZVRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLmV4cGlyZVRpbWUgPSB0eXBlZFByb3BzLnNvYVJlY29yZC5leHBpcmVUaW1lO1xuICAgIH1cbiAgICBpZiAodHlwZWRQcm9wcy5zb2FSZWNvcmQubWluaW11bVR0bCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzb2FSZWNvcmQubWluaW11bVR0bCA9IHR5cGVkUHJvcHMuc29hUmVjb3JkLm1pbmltdW1UdGw7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keTogeyBba2V5OiBzdHJpbmddOiBvYmplY3QgfSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdHRsOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgICBzb2FSZWNvcmQ6IHNvYVJlY29yZCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIChib2R5LnByb3BlcnRpZXMgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLm1ldGFkYXRhID1cbiAgICAgICAgdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTUlYgUkVDT1JEXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVudHJ5IGZvciBhbiBTUlYgcmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J2UmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIHByaW9yaXR5IG9mIHRoaXMgU1JWIHJlY29yZCAobG93ZXIgdmFsdWVzIGhhdmUgaGlnaGVyIHByaW9yaXR5KVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdlaWdodCBvZiB0aGlzIFNSViByZWNvcmQgKHVzZWQgZm9yIGxvYWQgYmFsYW5jaW5nIGFtb25nIHJlY29yZHMgd2l0aCBzYW1lIHByaW9yaXR5KVxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIHNlcnZpY2VcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBob3N0bmFtZSBwcm92aWRpbmcgdGhlIHNlcnZpY2VcbiAgICogQGV4YW1wbGUgXCJzaXBzZXJ2ZXIuaW50ZXJuYWwuZXhhbXBsZS5jb21cIlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHJpdmF0ZSBETlMgU1JWIFJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaXZhdGVEbnNTcnZSZWNvcmRQcm9wcyBleHRlbmRzIFByaXZhdGVEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgU1JWIHJlY29yZHMgd2l0aCBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0LCBhbmQgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBTcnZSZWNvcmRFbnRyeVtdO1xufVxuXG4vKipcbiAqIEF6dXJlIFByaXZhdGUgRE5TIFNSViBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBTUlYgcmVjb3JkcyBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBzZXJ2aWNlcyBsaWtlIFNJUCwgWE1QUCwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gU1JWIHJlY29yZCBmb3IgYSBTSVAgc2VydmljZTpcbiAqIGNvbnN0IHNydlJlY29yZCA9IG5ldyBQcml2YXRlRG5zU3J2UmVjb3JkKHRoaXMsIFwic2lwLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiX3NpcC5fdGNwXCIsXG4gKiAgIHByaXZhdGVEbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgcHJpb3JpdHk6IDEwLCB3ZWlnaHQ6IDYwLCBwb3J0OiA1MDYwLCB0YXJnZXQ6IFwic2lwc2VydmVyMS5pbnRlcm5hbC5leGFtcGxlLmNvbVwiIH0sXG4gKiAgICAgeyBwcmlvcml0eTogMTAsIHdlaWdodDogNDAsIHBvcnQ6IDUwNjAsIHRhcmdldDogXCJzaXBzZXJ2ZXIyLmludGVybmFsLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQcml2YXRlRG5zU3J2UmVjb3JkIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBQUklWQVRFX0ROU19TUlZfUkVDT1JEX1RZUEUsXG4gICAgICBBTExfUFJJVkFURV9ETlNfU1JWX1JFQ09SRF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBQcml2YXRlRG5zU3J2UmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQcml2YXRlRG5zU3J2UmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBTUlYgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgU1JWIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mcWRuT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImZxZG5cIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEZRRE4gb2YgdGhlIFNSViBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZnFkbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImZxZG5cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zU3J2UmVjb3JkUHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMucHJpdmF0ZURuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMDYtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUFJJVkFURV9ETlNfU1JWX1JFQ09SRF9UWVBFO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1aXJlc0xvY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUHJpdmF0ZURuc1NydlJlY29yZFByb3BzO1xuICAgIGNvbnN0IGJvZHk6IHsgW2tleTogc3RyaW5nXTogb2JqZWN0IH0gPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR0bDogdHlwZWRQcm9wcy50dGwgPz8gMzYwMCxcbiAgICAgICAgc3J2UmVjb3JkczogdHlwZWRQcm9wcy5yZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgICBwcmlvcml0eTogci5wcmlvcml0eSxcbiAgICAgICAgICB3ZWlnaHQ6IHIud2VpZ2h0LFxuICAgICAgICAgIHBvcnQ6IHIucG9ydCxcbiAgICAgICAgICB0YXJnZXQ6IHIudGFyZ2V0LFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAodHlwZWRQcm9wcy5tZXRhZGF0YSAmJiBPYmplY3Qua2V5cyh0eXBlZFByb3BzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAoYm9keS5wcm9wZXJ0aWVzIGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KS5tZXRhZGF0YSA9XG4gICAgICAgIHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGUUROIG9mIHRoZSByZWNvcmRcbiAgICovXG4gIHB1YmxpYyBnZXQgZnFkbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YDtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFhUIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFbnRyeSBmb3IgYSBUWFQgcmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHh0UmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIHRleHQgdmFsdWUgb2YgdGhpcyBUWFQgcmVjb3JkIChhcnJheSBvZiBzdHJpbmdzLCBlYWNoIHVwIHRvIDI1NSBjaGFycylcbiAgICogTG9uZyB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgc3BsaXQgaW50byBtdWx0aXBsZSBzdHJpbmdzXG4gICAqIEBleGFtcGxlIFtcInY9c3BmMSBpbmNsdWRlOnNwZi5wcm90ZWN0aW9uLm91dGxvb2suY29tIC1hbGxcIl1cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQcml2YXRlIEROUyBUWFQgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpdmF0ZURuc1R4dFJlY29yZFByb3BzIGV4dGVuZHMgUHJpdmF0ZURuc1JlY29yZEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBUWFQgcmVjb3JkcyB3aXRoIHN0cmluZyB2YWx1ZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZHM6IFR4dFJlY29yZEVudHJ5W107XG59XG5cbi8qKlxuICogQXp1cmUgUHJpdmF0ZSBETlMgVFhUIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRYVCByZWNvcmRzIHN0b3JlIGFyYml0cmFyeSB0ZXh0IGRhdGEsIGNvbW1vbmx5IHVzZWQgZm9yIFNQRiwgREtJTSwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBUWFQgcmVjb3JkIGZvciBTUEY6XG4gKiBjb25zdCB0eHRSZWNvcmQgPSBuZXcgUHJpdmF0ZURuc1R4dFJlY29yZCh0aGlzLCBcInNwZi1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcIkBcIixcbiAqICAgcHJpdmF0ZURuc1pvbmVJZDogem9uZS5pZCxcbiAqICAgdHRsOiAzNjAwLFxuICogICByZWNvcmRzOiBbXG4gKiAgICAgeyB2YWx1ZTogW1widj1zcGYxIGluY2x1ZGU6c3BmLnByb3RlY3Rpb24ub3V0bG9vay5jb20gLWFsbFwiXSB9LFxuICogICBdLFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByaXZhdGVEbnNUeHRSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIFBSSVZBVEVfRE5TX1RYVF9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9QUklWQVRFX0ROU19UWFRfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFByaXZhdGVEbnNUeHRSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByaXZhdGVEbnNUeHRSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFRYVCBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBUWFQgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgVFhUIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5mcWRuT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiZnFkblwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFByaXZhdGVEbnNUeHRSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5wcml2YXRlRG5zWm9uZUlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAyNC0wNi0wMVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBQUklWQVRFX0ROU19UWFRfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQcml2YXRlRG5zVHh0UmVjb3JkUHJvcHM7XG4gICAgY29uc3QgYm9keTogeyBba2V5OiBzdHJpbmddOiBvYmplY3QgfSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdHRsOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgICB0eHRSZWNvcmRzOiB0eXBlZFByb3BzLnJlY29yZHMubWFwKChyKSA9PiAoeyB2YWx1ZTogci52YWx1ZSB9KSksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAodHlwZWRQcm9wcy5tZXRhZGF0YSAmJiBPYmplY3Qua2V5cyh0eXBlZFByb3BzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAoYm9keS5wcm9wZXJ0aWVzIGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KS5tZXRhZGF0YSA9XG4gICAgICAgIHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGUUROIG9mIHRoZSByZWNvcmRcbiAgICovXG4gIHB1YmxpYyBnZXQgZnFkbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YDtcbiAgfVxufVxuIl19
|