@microsoft/terraform-cdk-constructs 1.8.0 → 2.2.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 +48328 -33656
- package/API.md +56123 -38995
- package/lib/azure-actiongroup/lib/action-group.d.ts +3 -3
- package/lib/azure-actiongroup/lib/action-group.js +5 -5
- package/lib/azure-actiongroup/test/action-group.integ.d.ts +1 -1
- package/lib/azure-actiongroup/test/action-group.integ.js +5 -5
- package/lib/azure-actiongroup/test/action-group.spec.js +9 -9
- package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +3 -3
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +5 -5
- package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +1 -1
- package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +6 -6
- package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +9 -9
- package/lib/azure-aks/lib/aks-cluster.d.ts +6 -6
- package/lib/azure-aks/lib/aks-cluster.js +8 -8
- package/lib/azure-aks/test/aks-cluster.integ.d.ts +1 -1
- package/lib/azure-aks/test/aks-cluster.integ.js +5 -5
- package/lib/azure-aks/test/aks-cluster.spec.js +12 -12
- package/lib/azure-containerapps/index.d.ts +1 -0
- package/lib/azure-containerapps/index.js +18 -0
- package/lib/azure-containerapps/lib/container-app-environment-schemas.d.ts +50 -0
- package/lib/azure-containerapps/lib/container-app-environment-schemas.js +522 -0
- package/lib/azure-containerapps/lib/container-app-environment.d.ts +374 -0
- package/lib/azure-containerapps/lib/container-app-environment.js +310 -0
- package/lib/azure-containerapps/lib/container-app-schemas.d.ts +48 -0
- package/lib/azure-containerapps/lib/container-app-schemas.js +466 -0
- package/lib/azure-containerapps/lib/container-app.d.ts +925 -0
- package/lib/azure-containerapps/lib/container-app.js +320 -0
- package/lib/azure-containerapps/lib/index.d.ts +4 -0
- package/lib/azure-containerapps/lib/index.js +21 -0
- package/lib/azure-containerapps/test/container-app-environment.integ.d.ts +10 -0
- package/lib/azure-containerapps/test/container-app-environment.integ.js +82 -0
- package/lib/azure-containerapps/test/container-app-environment.spec.d.ts +9 -0
- package/lib/azure-containerapps/test/container-app-environment.spec.js +412 -0
- package/lib/azure-containerapps/test/container-app.integ.d.ts +10 -0
- package/lib/azure-containerapps/test/container-app.integ.js +119 -0
- package/lib/azure-containerapps/test/container-app.spec.d.ts +9 -0
- package/lib/azure-containerapps/test/container-app.spec.js +839 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +3 -3
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +5 -5
- package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +9 -9
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +7 -7
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +9 -9
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +4 -4
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +6 -6
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +4 -4
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +6 -6
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +1 -1
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +5 -5
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +11 -11
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +14 -14
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +12 -12
- package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +8 -8
- package/lib/azure-dnsresolver/lib/dns-resolver.js +10 -10
- package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +6 -6
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +8 -8
- package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +7 -7
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +9 -9
- package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +1 -1
- package/lib/azure-dnsresolver/test/dns-resolver.integ.js +5 -5
- package/lib/azure-dnsresolver/test/dns-resolver.spec.js +11 -11
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +1 -1
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +5 -5
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +12 -12
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +1 -1
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +5 -5
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +9 -9
- package/lib/azure-dnszone/lib/dns-zone.d.ts +6 -6
- package/lib/azure-dnszone/lib/dns-zone.js +8 -8
- package/lib/azure-dnszone/lib/records/dns-records.d.ts +31 -31
- package/lib/azure-dnszone/lib/records/dns-records.js +42 -42
- package/lib/azure-dnszone/test/dns-records.integ.d.ts +1 -1
- package/lib/azure-dnszone/test/dns-records.integ.js +5 -5
- package/lib/azure-dnszone/test/dns-records.spec.js +57 -57
- package/lib/azure-dnszone/test/dns-zone.integ.d.ts +1 -1
- package/lib/azure-dnszone/test/dns-zone.integ.js +5 -5
- package/lib/azure-dnszone/test/dns-zone.spec.js +11 -11
- 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.d.ts +3 -3
- package/lib/azure-metricalert/lib/metric-alert.js +5 -5
- package/lib/azure-metricalert/test/metric-alert.integ.d.ts +1 -1
- package/lib/azure-metricalert/test/metric-alert.integ.js +5 -5
- package/lib/azure-metricalert/test/metric-alert.spec.js +9 -9
- package/lib/azure-networkinterface/lib/network-interface.d.ts +5 -5
- package/lib/azure-networkinterface/lib/network-interface.js +7 -7
- package/lib/azure-networkinterface/test/network-interface.integ.d.ts +1 -1
- package/lib/azure-networkinterface/test/network-interface.integ.js +5 -5
- package/lib/azure-networkinterface/test/network-interface.spec.js +11 -11
- package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +6 -6
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +8 -8
- package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +1 -1
- package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +5 -5
- package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +12 -12
- 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.d.ts +3 -3
- package/lib/azure-policyassignment/lib/policy-assignment.js +5 -5
- package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +1 -1
- package/lib/azure-policyassignment/test/policy-assignment.integ.js +5 -5
- package/lib/azure-policyassignment/test/policy-assignment.spec.js +12 -12
- package/lib/azure-policydefinition/lib/policy-definition.d.ts +3 -3
- package/lib/azure-policydefinition/lib/policy-definition.js +5 -5
- package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +1 -1
- package/lib/azure-policydefinition/test/policy-definition.integ.js +5 -5
- package/lib/azure-policydefinition/test/policy-definition.spec.js +19 -19
- 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/private-dns-zone.d.ts +10 -10
- package/lib/azure-privatednszone/lib/private-dns-zone.js +12 -12
- package/lib/azure-privatednszone/lib/records/private-dns-records.d.ts +25 -25
- package/lib/azure-privatednszone/lib/records/private-dns-records.js +34 -34
- package/lib/azure-privatednszone/test/private-dns-records.integ.d.ts +1 -1
- package/lib/azure-privatednszone/test/private-dns-records.integ.js +5 -5
- package/lib/azure-privatednszone/test/private-dns-records.spec.js +49 -49
- package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +1 -1
- package/lib/azure-privatednszone/test/private-dns-zone.integ.js +5 -5
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +12 -12
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +6 -6
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +8 -8
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +1 -1
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +5 -5
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +12 -12
- package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +5 -5
- package/lib/azure-publicipaddress/lib/public-ip-address.js +7 -7
- package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +1 -1
- package/lib/azure-publicipaddress/test/public-ip-address.integ.js +6 -6
- package/lib/azure-publicipaddress/test/public-ip-address.spec.js +11 -11
- package/lib/azure-resourcegroup/lib/resource-group.d.ts +5 -5
- package/lib/azure-resourcegroup/lib/resource-group.js +7 -7
- package/lib/azure-resourcegroup/test/resource-group.integ.d.ts +1 -1
- package/lib/azure-resourcegroup/test/resource-group.integ.js +5 -5
- package/lib/azure-resourcegroup/test/resource-group.spec.js +14 -14
- package/lib/azure-roleassignment/lib/role-assignment.d.ts +3 -3
- package/lib/azure-roleassignment/lib/role-assignment.js +5 -5
- package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +1 -1
- package/lib/azure-roleassignment/test/role-assignment.integ.js +5 -5
- package/lib/azure-roleassignment/test/role-assignment.spec.js +12 -12
- package/lib/azure-roledefinition/lib/role-definition.d.ts +3 -3
- package/lib/azure-roledefinition/lib/role-definition.js +5 -5
- package/lib/azure-roledefinition/test/role-definition.integ.d.ts +1 -1
- package/lib/azure-roledefinition/test/role-definition.integ.js +5 -5
- package/lib/azure-roledefinition/test/role-definition.spec.js +12 -12
- package/lib/azure-storageaccount/lib/storage-account.d.ts +6 -6
- package/lib/azure-storageaccount/lib/storage-account.js +8 -8
- package/lib/azure-storageaccount/test/storage-account.integ.d.ts +1 -1
- package/lib/azure-storageaccount/test/storage-account.integ.js +5 -5
- package/lib/azure-storageaccount/test/storage-account.spec.js +11 -11
- package/lib/azure-subnet/lib/subnet.d.ts +3 -3
- package/lib/azure-subnet/lib/subnet.js +5 -5
- package/lib/azure-subnet/test/subnet.integ.d.ts +1 -1
- package/lib/azure-subnet/test/subnet.integ.js +5 -5
- package/lib/azure-subnet/test/subnet.spec.js +9 -9
- package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +6 -6
- package/lib/azure-virtualmachine/lib/virtual-machine.js +8 -8
- package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +1 -1
- package/lib/azure-virtualmachine/test/virtual-machine.integ.js +5 -5
- package/lib/azure-virtualmachine/test/virtual-machine.spec.js +17 -17
- package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +6 -6
- package/lib/azure-virtualnetwork/lib/virtual-network.js +8 -8
- package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +1 -1
- package/lib/azure-virtualnetwork/test/virtual-network.integ.js +5 -5
- package/lib/azure-virtualnetwork/test/virtual-network.spec.js +12 -12
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway-schemas.js +2 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +9 -7
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +13 -10
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.integ.d.ts +1 -1
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.integ.js +5 -5
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +119 -11
- package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.d.ts +5 -5
- package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +7 -7
- package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.integ.d.ts +1 -1
- package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.integ.js +5 -5
- package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.spec.js +20 -20
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +7 -7
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +9 -9
- package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.js +17 -17
- package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.js +15 -15
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +1 -1
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +5 -5
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +57 -57
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +6 -6
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +8 -8
- package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +1 -1
- package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +5 -5
- package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +12 -12
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +6 -6
- package/lib/core-azure/lib/azapi/azapi-resource.d.ts +7 -7
- package/lib/core-azure/lib/azapi/azapi-resource.js +6 -6
- package/lib/core-azure/lib/azapi/azapi-resource.spec.js +7 -7
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.d.ts +12 -12
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +15 -15
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +35 -35
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +58 -58
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +25 -25
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +49 -49
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +13 -13
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +22 -22
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +24 -24
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +40 -40
- package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +44 -44
- package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +72 -72
- package/lib/core-azure/lib/azapi/providers-azapi/index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +54 -54
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +86 -86
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +65 -65
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +102 -102
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +25 -25
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +62 -62
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +36 -36
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +69 -69
- 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 +12 -0
- package/lib/index.js +14 -2
- package/lib/testing/index.d.ts +1 -1
- package/lib/testing/index.js +8 -8
- package/lib/testing/lib/cleanup.js +1 -1
- package/lib/testing/lib/metadata.js +1 -1
- package/package.json +10 -22
- package/setup.js +2 -2
|
@@ -9,15 +9,15 @@
|
|
|
9
9
|
* - The allTags() method used in createResourceBody includes all tags
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const
|
|
13
|
-
const
|
|
12
|
+
const cdktn_1 = require("cdktn");
|
|
13
|
+
const cdktn = require("cdktn");
|
|
14
14
|
const resource_group_1 = require("../../../azure-resourcegroup/lib/resource-group");
|
|
15
15
|
describe("AzapiResource - Tag Management", () => {
|
|
16
16
|
let app;
|
|
17
17
|
let stack;
|
|
18
18
|
beforeEach(() => {
|
|
19
|
-
app =
|
|
20
|
-
stack = new
|
|
19
|
+
app = cdktn_1.Testing.app();
|
|
20
|
+
stack = new cdktn.TerraformStack(app, "TestStack");
|
|
21
21
|
});
|
|
22
22
|
describe("Tag Immutability", () => {
|
|
23
23
|
it("should store tags separately from readonly props", () => {
|
|
@@ -159,7 +159,7 @@ describe("AzapiResource - Tag Management", () => {
|
|
|
159
159
|
// Verify they're accessible
|
|
160
160
|
expect(rg.tags).toEqual({ initial: "tag" });
|
|
161
161
|
// Synthesize the stack
|
|
162
|
-
const synthesized =
|
|
162
|
+
const synthesized = cdktn_1.Testing.synth(stack);
|
|
163
163
|
const stackConfig = JSON.parse(synthesized);
|
|
164
164
|
// The azapi_resource should exist
|
|
165
165
|
expect(stackConfig.resource).toBeDefined();
|
|
@@ -215,4 +215,4 @@ describe("AzapiResource - Tag Management", () => {
|
|
|
215
215
|
});
|
|
216
216
|
});
|
|
217
217
|
});
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXphcGktcmVzb3VyY2UtdGFncy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlLXRhZ3Muc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7O0FBRUgsaUNBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQixvRkFBZ0Y7QUFFaEYsUUFBUSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtJQUM5QyxJQUFJLEdBQWMsQ0FBQztJQUNuQixJQUFJLEtBQTJCLENBQUM7SUFFaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7YUFDM0IsQ0FBQztZQUVGLE1BQU0sRUFBRSxHQUFHLElBQUksOEJBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXJELHlDQUF5QztZQUN6QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBRWpELHVDQUF1QztZQUN2QyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxP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QUcsRUFBRTtZQUNsRCxNQUFNLEVBQUUsR0FBRyxJQUFJLDhCQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDNUMsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQyxDQUFDO1lBRUgsdUJBQXVCO1lBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFMUMsdUNBQXVDO1lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxNQUFNLEVBQUUsR0FBRyxJQUFJLDhCQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDNUMsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7YUFDdEIsQ0FBQyxDQUFDO1lBRUgsMEJBQTBCO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdEMseUJBQXlCO1lBQ3pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciB0aGUgQXphcGlSZXNvdXJjZSB0YWcgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5XG4gKlxuICogVGhlc2UgdGVzdHMgdmVyaWZ5IHRoYXQgdGhlIGltbXV0YWJpbGl0eSBwYXR0ZXJuIGZvciB0YWdzIHdvcmtzIGNvcnJlY3RseTpcbiAqIC0gVGFncyBmcm9tIHByb3BzIGFyZSBzdG9yZWQgc2VwYXJhdGVseSBmcm9tIHRoZSByZWFkb25seSBwcm9wc1xuICogLSBUYWdzIGFkZGVkIHZpYSBhZGRUYWcoKSBhcmUgY29tYmluZWQgd2l0aCBwcm9wcyB0YWdzXG4gKiAtIFRoZSB0YWdzIGdldHRlciByZXR1cm5zIGFsbCB0YWdzIChwcm9wcyArIGFkZGVkKVxuICogLSBUaGUgYWxsVGFncygpIG1ldGhvZCB1c2VkIGluIGNyZWF0ZVJlc291cmNlQm9keSBpbmNsdWRlcyBhbGwgdGFnc1xuICovXG5cbmltcG9ydCB7IFRlc3RpbmcgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCIuLi8uLi8uLi9henVyZS1yZXNvdXJjZWdyb3VwL2xpYi9yZXNvdXJjZS1ncm91cFwiO1xuXG5kZXNjcmliZShcIkF6YXBpUmVzb3VyY2UgLSBUYWcgTWFuYWdlbWVudFwiLCAoKSA9PiB7XG4gIGxldCBhcHA6IGNka3RmLkFwcDtcbiAgbGV0IHN0YWNrOiBjZGt0Zi5UZXJyYWZvcm1TdGFjaztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIHN0YWNrID0gbmV3IGNka3RmLlRlcnJhZm9ybVN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiVGFnIEltbXV0YWJpbGl0eVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3RvcmUgdGFncyBzZXBhcmF0ZWx5IGZyb20gcmVhZG9ubHkgcHJvcHNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyBpbml0aWFsOiBcInZhbHVlXCIgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHByb3BzKTtcblxuICAgICAgLy8gT3JpZ2luYWwgcHJvcHMgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgIGV4cGVjdChwcm9wcy50YWdzKS50b0VxdWFsKHsgaW5pdGlhbDogXCJ2YWx1ZVwiIH0pO1xuXG4gICAgICAvLyBUYWdzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIHZpYSBnZXR0ZXJcbiAgICAgIGV4cGVjdChyZy50YWdzKS50b0VxdWFsKHsgaW5pdGlhbDogXCJ2YWx1ZVwiIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IG11dGF0ZSBwcm9wcyB3aGVuIGFkZGluZyB0YWdzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHRhZ3M6IHsgaW5pdGlhbDogXCJ2YWx1ZVwiIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCBwcm9wcyk7XG5cbiAgICAgIC8vIEFkZCBhIHRhZ1xuICAgICAgcmcuYWRkVGFnKFwiYWRkZWRcIiwgXCJkeW5hbWljYWxseVwiKTtcblxuICAgICAgLy8gT3JpZ2luYWwgcHJvcHMgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgIGV4cGVjdChwcm9wcy50YWdzKS50b0VxdWFsKHsgaW5pdGlhbDogXCJ2YWx1ZVwiIH0pO1xuICAgICAgZXhwZWN0KChwcm9wcy50YWdzIGFzIGFueSkuYWRkZWQpLnRvQmVVbmRlZmluZWQoKTtcblxuICAgICAgLy8gVGFncyBnZXR0ZXIgc2hvdWxkIGluY2x1ZGUgYm90aFxuICAgICAgZXhwZWN0KHJnLnRhZ3MpLnRvRXF1YWwoe1xuICAgICAgICBpbml0aWFsOiBcInZhbHVlXCIsXG4gICAgICAgIGFkZGVkOiBcImR5bmFtaWNhbGx5XCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSB0YWdzIHdoZW4gbm8gaW5pdGlhbCB0YWdzIGFyZSBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaG91bGQgc3RhcnQgd2l0aCBlbXB0eSB0YWdzXG4gICAgICBleHBlY3QocmcudGFncykudG9FcXVhbCh7fSk7XG5cbiAgICAgIC8vIEFkZCB0YWdzXG4gICAgICByZy5hZGRUYWcoXCJ0YWcxXCIsIFwidmFsdWUxXCIpO1xuICAgICAgcmcuYWRkVGFnKFwidGFnMlwiLCBcInZhbHVlMlwiKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgdGhlIGFkZGVkIHRhZ3NcbiAgICAgIGV4cGVjdChyZy50YWdzKS50b0VxdWFsKHtcbiAgICAgICAgdGFnMTogXCJ2YWx1ZTFcIixcbiAgICAgICAgdGFnMjogXCJ2YWx1ZTJcIixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlRhZyBDb21iaW5hdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY29tYmluZSBwcm9wcyB0YWdzIHdpdGggZHluYW1pY2FsbHkgYWRkZWQgdGFnc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIGVudmlyb25tZW50OiBcInRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0OiBcImNka3RmXCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIG1vcmUgdGFnc1xuICAgICAgcmcuYWRkVGFnKFwib3duZXJcIiwgXCJ0ZWFtQGV4YW1wbGUuY29tXCIpO1xuICAgICAgcmcuYWRkVGFnKFwiY29zdC1jZW50ZXJcIiwgXCJlbmdpbmVlcmluZ1wiKTtcblxuICAgICAgLy8gQWxsIHRhZ3Mgc2hvdWxkIGJlIGFjY2Vzc2libGVcbiAgICAgIGV4cGVjdChyZy50YWdzKS50b0VxdWFsKHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IFwidGVzdFwiLFxuICAgICAgICBwcm9qZWN0OiBcImNka3RmXCIsXG4gICAgICAgIG93bmVyOiBcInRlYW1AZXhhbXBsZS5jb21cIixcbiAgICAgICAgXCJjb3N0LWNlbnRlclwiOiBcImVuZ2luZWVyaW5nXCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGFsbG93IG92ZXJ3cml0aW5nIHRhZ3MgdmlhIGFkZFRhZ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyBlbnZpcm9ubWVudDogXCJkZXZcIiB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE92ZXJ3cml0ZSBleGlzdGluZyB0YWdcbiAgICAgIHJnLmFkZFRhZyhcImVudmlyb25tZW50XCIsIFwicHJvZHVjdGlvblwiKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgdGhlIG5ldyB2YWx1ZVxuICAgICAgZXhwZWN0KHJnLnRhZ3MuZW52aXJvbm1lbnQpLnRvQmUoXCJwcm9kdWN0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgY29weSBmcm9tIHRhZ3MgZ2V0dGVyIHRvIG1haW50YWluIGltbXV0YWJpbGl0eVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyBpbml0aWFsOiBcInZhbHVlXCIgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgdGFncyByZWZlcmVuY2VcbiAgICAgIGNvbnN0IHRhZ3MxID0gcmcudGFncztcbiAgICAgIGNvbnN0IHRhZ3MyID0gcmcudGFncztcblxuICAgICAgLy8gU2hvdWxkIGJlIGRpZmZlcmVudCBvYmplY3RzIChjb3BpZXMpXG4gICAgICBleHBlY3QodGFnczEpLm5vdC50b0JlKHRhZ3MyKTtcblxuICAgICAgLy8gQnV0IHdpdGggc2FtZSBjb250ZW50XG4gICAgICBleHBlY3QodGFnczEpLnRvRXF1YWwodGFnczIpO1xuXG4gICAgICAvLyBNb2RpZnlpbmcgdGhlIHJldHVybmVkIG9iamVjdCBzaG91bGQgbm90IGFmZmVjdCB0aGUgcmVzb3VyY2VcbiAgICAgIHRhZ3MxLm1vZGlmaWVkID0gXCJleHRlcm5hbGx5XCI7XG4gICAgICBleHBlY3QocmcudGFncy5tb2RpZmllZCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIk11bHRpcGxlIFRhZyBPcGVyYXRpb25zXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBoYW5kbGUgbXVsdGlwbGUgYWRkVGFnIGNhbGxzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFkZCBtdWx0aXBsZSB0YWdzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgcmcuYWRkVGFnKGB0YWcke2l9YCwgYHZhbHVlJHtpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBBbGwgdGFncyBzaG91bGQgYmUgcHJlc2VudFxuICAgICAgY29uc3QgdGFncyA9IHJnLnRhZ3M7XG4gICAgICBleHBlY3QoT2JqZWN0LmtleXModGFncykpLnRvSGF2ZUxlbmd0aCgxMCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgZXhwZWN0KHRhZ3NbYHRhZyR7aX1gXSkudG9CZShgdmFsdWUke2l9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRhZyBrZXlzIGFuZCB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgcmcuYWRkVGFnKFwidGFnLXdpdGgtZGFzaFwiLCBcInZhbHVlLXdpdGgtZGFzaFwiKTtcbiAgICAgIHJnLmFkZFRhZyhcInRhZzp3aXRoOmNvbG9uXCIsIFwidmFsdWU6d2l0aDpjb2xvblwiKTtcbiAgICAgIHJnLmFkZFRhZyhcInRhZy53aXRoLmRvdFwiLCBcInZhbHVlLndpdGguZG90XCIpO1xuXG4gICAgICBjb25zdCB0YWdzID0gcmcudGFncztcbiAgICAgIGV4cGVjdCh0YWdzW1widGFnLXdpdGgtZGFzaFwiXSkudG9CZShcInZhbHVlLXdpdGgtZGFzaFwiKTtcbiAgICAgIGV4cGVjdCh0YWdzW1widGFnOndpdGg6Y29sb25cIl0pLnRvQmUoXCJ2YWx1ZTp3aXRoOmNvbG9uXCIpO1xuICAgICAgZXhwZWN0KHRhZ3NbXCJ0YWcud2l0aC5kb3RcIl0pLnRvQmUoXCJ2YWx1ZS53aXRoLmRvdFwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJSZXNvdXJjZSBCb2R5IEludGVncmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBpbmNsdWRlIGFsbCB0YWdzIGluIHN5bnRoZXNpemVkIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uIHdoZW4gYWRkZWQgYmVmb3JlIHN5bnRoZXNpc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyBpbml0aWFsOiBcInRhZ1wiIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVGFncyBhcmUgc2V0IGR1cmluZyBjb25zdHJ1Y3Rpb24gdmlhIHByb3BzXG4gICAgICAvLyBWZXJpZnkgdGhleSdyZSBhY2Nlc3NpYmxlXG4gICAgICBleHBlY3QocmcudGFncykudG9FcXVhbCh7IGluaXRpYWw6IFwidGFnXCIgfSk7XG5cbiAgICAgIC8vIFN5bnRoZXNpemUgdGhlIHN0YWNrXG4gICAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3Rpbmcuc3ludGgoc3RhY2spO1xuICAgICAgY29uc3Qgc3RhY2tDb25maWcgPSBKU09OLnBhcnNlKHN5bnRoZXNpemVkKTtcblxuICAgICAgLy8gVGhlIGF6YXBpX3Jlc291cmNlIHNob3VsZCBleGlzdFxuICAgICAgZXhwZWN0KHN0YWNrQ29uZmlnLnJlc291cmNlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHN0YWNrQ29uZmlnLnJlc291cmNlLmF6YXBpX3Jlc291cmNlKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBGaW5kIHRoZSByZXNvdXJjZSAobmFtZSBtYXkgdmFyeSBiYXNlZCBvbiBjb25zdHJ1Y3QgSUQgZ2VuZXJhdGlvbilcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC52YWx1ZXMoc3RhY2tDb25maWcucmVzb3VyY2UuYXphcGlfcmVzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc291cmNlcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcblxuICAgICAgY29uc3QgcmVzb3VyY2U6IGFueSA9IHJlc291cmNlc1swXTtcblxuICAgICAgLy8gVGFncyBzaG91bGQgYmUgYXQgdGhlIHJlc291cmNlIGxldmVsLCBub3QgaW4gdGhlIGJvZHlcbiAgICAgIC8vIFRoZSBjcmVhdGVBemFwaVJlc291cmNlIG1ldGhvZCBleHRyYWN0cyB0YWdzIGZyb20gYm9keSBhbmQgcGxhY2VzIHRoZW0gYXQgdG9wIGxldmVsXG4gICAgICBleHBlY3QocmVzb3VyY2UudGFncykudG9FcXVhbCh7XG4gICAgICAgIGluaXRpYWw6IFwidGFnXCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG1ha2UgdGFncyBhZGRlZCB2aWEgYWRkVGFnIGFjY2Vzc2libGUgdmlhIHRhZ3MgZ2V0dGVyXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICB0YWdzOiB7IGluaXRpYWw6IFwidGFnXCIgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgdGFnIGFmdGVyIGNvbnN0cnVjdGlvblxuICAgICAgcmcuYWRkVGFnKFwiYWRkZWRcIiwgXCJsYXRlclwiKTtcblxuICAgICAgLy8gVmVyaWZ5IHRhZ3MgYXJlIGFjY2Vzc2libGUgdmlhIGdldHRlclxuICAgICAgZXhwZWN0KHJnLnRhZ3MpLnRvRXF1YWwoe1xuICAgICAgICBpbml0aWFsOiBcInRhZ1wiLFxuICAgICAgICBhZGRlZDogXCJsYXRlclwiLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiSlNJSSBDb21wbGlhbmNlXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBoYXZlIEpTSUktY29tcGxpYW50IGFkZFRhZyBtZXRob2RcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2hvdWxkIGJlIGEgZnVuY3Rpb25cbiAgICAgIGV4cGVjdCh0eXBlb2YgcmcuYWRkVGFnKS50b0JlKFwiZnVuY3Rpb25cIik7XG5cbiAgICAgIC8vIFNob3VsZCB3b3JrIHdpdGggc3RhbmRhcmQgcGFyYW1ldGVyc1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgcmcuYWRkVGFnKFwia2V5XCIsIFwidmFsdWVcIik7XG4gICAgICB9KS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSBKU0lJLWNvbXBsaWFudCB0YWdzIGdldHRlclwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyB0ZXN0OiBcInRhZ1wiIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gU2hvdWxkIHJldHVybiBhbiBvYmplY3RcbiAgICAgIGV4cGVjdCh0eXBlb2YgcmcudGFncykudG9CZShcIm9iamVjdFwiKTtcblxuICAgICAgLy8gU2hvdWxkIGJlIHNlcmlhbGl6YWJsZVxuICAgICAgZXhwZWN0KCgpID0+IEpTT04uc3RyaW5naWZ5KHJnLnRhZ3MpKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXphcGktcmVzb3VyY2UtdGFncy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlLXRhZ3Muc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7O0FBRUgsaUNBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQixvRkFBZ0Y7QUFFaEYsUUFBUSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtJQUM5QyxJQUFJLEdBQWMsQ0FBQztJQUNuQixJQUFJLEtBQTJCLENBQUM7SUFFaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7YUFDM0IsQ0FBQztZQUVGLE1BQU0sRUFBRSxHQUFHLElBQUksOEJBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXJELHlDQUF5QztZQUN6QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBRWpELHVDQUF1QztZQUN2QyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxP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QUcsRUFBRTtZQUNsRCxNQUFNLEVBQUUsR0FBRyxJQUFJLDhCQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDNUMsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQyxDQUFDO1lBRUgsdUJBQXVCO1lBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFMUMsdUNBQXVDO1lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxNQUFNLEVBQUUsR0FBRyxJQUFJLDhCQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDNUMsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7YUFDdEIsQ0FBQyxDQUFDO1lBRUgsMEJBQTBCO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdEMseUJBQXlCO1lBQ3pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciB0aGUgQXphcGlSZXNvdXJjZSB0YWcgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5XG4gKlxuICogVGhlc2UgdGVzdHMgdmVyaWZ5IHRoYXQgdGhlIGltbXV0YWJpbGl0eSBwYXR0ZXJuIGZvciB0YWdzIHdvcmtzIGNvcnJlY3RseTpcbiAqIC0gVGFncyBmcm9tIHByb3BzIGFyZSBzdG9yZWQgc2VwYXJhdGVseSBmcm9tIHRoZSByZWFkb25seSBwcm9wc1xuICogLSBUYWdzIGFkZGVkIHZpYSBhZGRUYWcoKSBhcmUgY29tYmluZWQgd2l0aCBwcm9wcyB0YWdzXG4gKiAtIFRoZSB0YWdzIGdldHRlciByZXR1cm5zIGFsbCB0YWdzIChwcm9wcyArIGFkZGVkKVxuICogLSBUaGUgYWxsVGFncygpIG1ldGhvZCB1c2VkIGluIGNyZWF0ZVJlc291cmNlQm9keSBpbmNsdWRlcyBhbGwgdGFnc1xuICovXG5cbmltcG9ydCB7IFRlc3RpbmcgfSBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCAqIGFzIGNka3RuIGZyb20gXCJjZGt0blwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCIuLi8uLi8uLi9henVyZS1yZXNvdXJjZWdyb3VwL2xpYi9yZXNvdXJjZS1ncm91cFwiO1xuXG5kZXNjcmliZShcIkF6YXBpUmVzb3VyY2UgLSBUYWcgTWFuYWdlbWVudFwiLCAoKSA9PiB7XG4gIGxldCBhcHA6IGNka3RuLkFwcDtcbiAgbGV0IHN0YWNrOiBjZGt0bi5UZXJyYWZvcm1TdGFjaztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIHN0YWNrID0gbmV3IGNka3RuLlRlcnJhZm9ybVN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiVGFnIEltbXV0YWJpbGl0eVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3RvcmUgdGFncyBzZXBhcmF0ZWx5IGZyb20gcmVhZG9ubHkgcHJvcHNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyBpbml0aWFsOiBcInZhbHVlXCIgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHByb3BzKTtcblxuICAgICAgLy8gT3JpZ2luYWwgcHJvcHMgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgIGV4cGVjdChwcm9wcy50YWdzKS50b0VxdWFsKHsgaW5pdGlhbDogXCJ2YWx1ZVwiIH0pO1xuXG4gICAgICAvLyBUYWdzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIHZpYSBnZXR0ZXJcbiAgICAgIGV4cGVjdChyZy50YWdzKS50b0VxdWFsKHsgaW5pdGlhbDogXCJ2YWx1ZVwiIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IG11dGF0ZSBwcm9wcyB3aGVuIGFkZGluZyB0YWdzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHRhZ3M6IHsgaW5pdGlhbDogXCJ2YWx1ZVwiIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCBwcm9wcyk7XG5cbiAgICAgIC8vIEFkZCBhIHRhZ1xuICAgICAgcmcuYWRkVGFnKFwiYWRkZWRcIiwgXCJkeW5hbWljYWxseVwiKTtcblxuICAgICAgLy8gT3JpZ2luYWwgcHJvcHMgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgIGV4cGVjdChwcm9wcy50YWdzKS50b0VxdWFsKHsgaW5pdGlhbDogXCJ2YWx1ZVwiIH0pO1xuICAgICAgZXhwZWN0KChwcm9wcy50YWdzIGFzIGFueSkuYWRkZWQpLnRvQmVVbmRlZmluZWQoKTtcblxuICAgICAgLy8gVGFncyBnZXR0ZXIgc2hvdWxkIGluY2x1ZGUgYm90aFxuICAgICAgZXhwZWN0KHJnLnRhZ3MpLnRvRXF1YWwoe1xuICAgICAgICBpbml0aWFsOiBcInZhbHVlXCIsXG4gICAgICAgIGFkZGVkOiBcImR5bmFtaWNhbGx5XCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSB0YWdzIHdoZW4gbm8gaW5pdGlhbCB0YWdzIGFyZSBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaG91bGQgc3RhcnQgd2l0aCBlbXB0eSB0YWdzXG4gICAgICBleHBlY3QocmcudGFncykudG9FcXVhbCh7fSk7XG5cbiAgICAgIC8vIEFkZCB0YWdzXG4gICAgICByZy5hZGRUYWcoXCJ0YWcxXCIsIFwidmFsdWUxXCIpO1xuICAgICAgcmcuYWRkVGFnKFwidGFnMlwiLCBcInZhbHVlMlwiKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgdGhlIGFkZGVkIHRhZ3NcbiAgICAgIGV4cGVjdChyZy50YWdzKS50b0VxdWFsKHtcbiAgICAgICAgdGFnMTogXCJ2YWx1ZTFcIixcbiAgICAgICAgdGFnMjogXCJ2YWx1ZTJcIixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlRhZyBDb21iaW5hdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY29tYmluZSBwcm9wcyB0YWdzIHdpdGggZHluYW1pY2FsbHkgYWRkZWQgdGFnc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIGVudmlyb25tZW50OiBcInRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0OiBcImNka3RmXCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIG1vcmUgdGFnc1xuICAgICAgcmcuYWRkVGFnKFwib3duZXJcIiwgXCJ0ZWFtQGV4YW1wbGUuY29tXCIpO1xuICAgICAgcmcuYWRkVGFnKFwiY29zdC1jZW50ZXJcIiwgXCJlbmdpbmVlcmluZ1wiKTtcblxuICAgICAgLy8gQWxsIHRhZ3Mgc2hvdWxkIGJlIGFjY2Vzc2libGVcbiAgICAgIGV4cGVjdChyZy50YWdzKS50b0VxdWFsKHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IFwidGVzdFwiLFxuICAgICAgICBwcm9qZWN0OiBcImNka3RmXCIsXG4gICAgICAgIG93bmVyOiBcInRlYW1AZXhhbXBsZS5jb21cIixcbiAgICAgICAgXCJjb3N0LWNlbnRlclwiOiBcImVuZ2luZWVyaW5nXCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGFsbG93IG92ZXJ3cml0aW5nIHRhZ3MgdmlhIGFkZFRhZ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyBlbnZpcm9ubWVudDogXCJkZXZcIiB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE92ZXJ3cml0ZSBleGlzdGluZyB0YWdcbiAgICAgIHJnLmFkZFRhZyhcImVudmlyb25tZW50XCIsIFwicHJvZHVjdGlvblwiKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgdGhlIG5ldyB2YWx1ZVxuICAgICAgZXhwZWN0KHJnLnRhZ3MuZW52aXJvbm1lbnQpLnRvQmUoXCJwcm9kdWN0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgY29weSBmcm9tIHRhZ3MgZ2V0dGVyIHRvIG1haW50YWluIGltbXV0YWJpbGl0eVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyBpbml0aWFsOiBcInZhbHVlXCIgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgdGFncyByZWZlcmVuY2VcbiAgICAgIGNvbnN0IHRhZ3MxID0gcmcudGFncztcbiAgICAgIGNvbnN0IHRhZ3MyID0gcmcudGFncztcblxuICAgICAgLy8gU2hvdWxkIGJlIGRpZmZlcmVudCBvYmplY3RzIChjb3BpZXMpXG4gICAgICBleHBlY3QodGFnczEpLm5vdC50b0JlKHRhZ3MyKTtcblxuICAgICAgLy8gQnV0IHdpdGggc2FtZSBjb250ZW50XG4gICAgICBleHBlY3QodGFnczEpLnRvRXF1YWwodGFnczIpO1xuXG4gICAgICAvLyBNb2RpZnlpbmcgdGhlIHJldHVybmVkIG9iamVjdCBzaG91bGQgbm90IGFmZmVjdCB0aGUgcmVzb3VyY2VcbiAgICAgIHRhZ3MxLm1vZGlmaWVkID0gXCJleHRlcm5hbGx5XCI7XG4gICAgICBleHBlY3QocmcudGFncy5tb2RpZmllZCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIk11bHRpcGxlIFRhZyBPcGVyYXRpb25zXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBoYW5kbGUgbXVsdGlwbGUgYWRkVGFnIGNhbGxzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFkZCBtdWx0aXBsZSB0YWdzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgcmcuYWRkVGFnKGB0YWcke2l9YCwgYHZhbHVlJHtpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBBbGwgdGFncyBzaG91bGQgYmUgcHJlc2VudFxuICAgICAgY29uc3QgdGFncyA9IHJnLnRhZ3M7XG4gICAgICBleHBlY3QoT2JqZWN0LmtleXModGFncykpLnRvSGF2ZUxlbmd0aCgxMCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgZXhwZWN0KHRhZ3NbYHRhZyR7aX1gXSkudG9CZShgdmFsdWUke2l9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRhZyBrZXlzIGFuZCB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgcmcuYWRkVGFnKFwidGFnLXdpdGgtZGFzaFwiLCBcInZhbHVlLXdpdGgtZGFzaFwiKTtcbiAgICAgIHJnLmFkZFRhZyhcInRhZzp3aXRoOmNvbG9uXCIsIFwidmFsdWU6d2l0aDpjb2xvblwiKTtcbiAgICAgIHJnLmFkZFRhZyhcInRhZy53aXRoLmRvdFwiLCBcInZhbHVlLndpdGguZG90XCIpO1xuXG4gICAgICBjb25zdCB0YWdzID0gcmcudGFncztcbiAgICAgIGV4cGVjdCh0YWdzW1widGFnLXdpdGgtZGFzaFwiXSkudG9CZShcInZhbHVlLXdpdGgtZGFzaFwiKTtcbiAgICAgIGV4cGVjdCh0YWdzW1widGFnOndpdGg6Y29sb25cIl0pLnRvQmUoXCJ2YWx1ZTp3aXRoOmNvbG9uXCIpO1xuICAgICAgZXhwZWN0KHRhZ3NbXCJ0YWcud2l0aC5kb3RcIl0pLnRvQmUoXCJ2YWx1ZS53aXRoLmRvdFwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJSZXNvdXJjZSBCb2R5IEludGVncmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBpbmNsdWRlIGFsbCB0YWdzIGluIHN5bnRoZXNpemVkIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uIHdoZW4gYWRkZWQgYmVmb3JlIHN5bnRoZXNpc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyBpbml0aWFsOiBcInRhZ1wiIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVGFncyBhcmUgc2V0IGR1cmluZyBjb25zdHJ1Y3Rpb24gdmlhIHByb3BzXG4gICAgICAvLyBWZXJpZnkgdGhleSdyZSBhY2Nlc3NpYmxlXG4gICAgICBleHBlY3QocmcudGFncykudG9FcXVhbCh7IGluaXRpYWw6IFwidGFnXCIgfSk7XG5cbiAgICAgIC8vIFN5bnRoZXNpemUgdGhlIHN0YWNrXG4gICAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3Rpbmcuc3ludGgoc3RhY2spO1xuICAgICAgY29uc3Qgc3RhY2tDb25maWcgPSBKU09OLnBhcnNlKHN5bnRoZXNpemVkKTtcblxuICAgICAgLy8gVGhlIGF6YXBpX3Jlc291cmNlIHNob3VsZCBleGlzdFxuICAgICAgZXhwZWN0KHN0YWNrQ29uZmlnLnJlc291cmNlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHN0YWNrQ29uZmlnLnJlc291cmNlLmF6YXBpX3Jlc291cmNlKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBGaW5kIHRoZSByZXNvdXJjZSAobmFtZSBtYXkgdmFyeSBiYXNlZCBvbiBjb25zdHJ1Y3QgSUQgZ2VuZXJhdGlvbilcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC52YWx1ZXMoc3RhY2tDb25maWcucmVzb3VyY2UuYXphcGlfcmVzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc291cmNlcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcblxuICAgICAgY29uc3QgcmVzb3VyY2U6IGFueSA9IHJlc291cmNlc1swXTtcblxuICAgICAgLy8gVGFncyBzaG91bGQgYmUgYXQgdGhlIHJlc291cmNlIGxldmVsLCBub3QgaW4gdGhlIGJvZHlcbiAgICAgIC8vIFRoZSBjcmVhdGVBemFwaVJlc291cmNlIG1ldGhvZCBleHRyYWN0cyB0YWdzIGZyb20gYm9keSBhbmQgcGxhY2VzIHRoZW0gYXQgdG9wIGxldmVsXG4gICAgICBleHBlY3QocmVzb3VyY2UudGFncykudG9FcXVhbCh7XG4gICAgICAgIGluaXRpYWw6IFwidGFnXCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG1ha2UgdGFncyBhZGRlZCB2aWEgYWRkVGFnIGFjY2Vzc2libGUgdmlhIHRhZ3MgZ2V0dGVyXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICB0YWdzOiB7IGluaXRpYWw6IFwidGFnXCIgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgdGFnIGFmdGVyIGNvbnN0cnVjdGlvblxuICAgICAgcmcuYWRkVGFnKFwiYWRkZWRcIiwgXCJsYXRlclwiKTtcblxuICAgICAgLy8gVmVyaWZ5IHRhZ3MgYXJlIGFjY2Vzc2libGUgdmlhIGdldHRlclxuICAgICAgZXhwZWN0KHJnLnRhZ3MpLnRvRXF1YWwoe1xuICAgICAgICBpbml0aWFsOiBcInRhZ1wiLFxuICAgICAgICBhZGRlZDogXCJsYXRlclwiLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiSlNJSSBDb21wbGlhbmNlXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBoYXZlIEpTSUktY29tcGxpYW50IGFkZFRhZyBtZXRob2RcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2hvdWxkIGJlIGEgZnVuY3Rpb25cbiAgICAgIGV4cGVjdCh0eXBlb2YgcmcuYWRkVGFnKS50b0JlKFwiZnVuY3Rpb25cIik7XG5cbiAgICAgIC8vIFNob3VsZCB3b3JrIHdpdGggc3RhbmRhcmQgcGFyYW1ldGVyc1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgcmcuYWRkVGFnKFwia2V5XCIsIFwidmFsdWVcIik7XG4gICAgICB9KS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSBKU0lJLWNvbXBsaWFudCB0YWdzIGdldHRlclwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgdGFnczogeyB0ZXN0OiBcInRhZ1wiIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gU2hvdWxkIHJldHVybiBhbiBvYmplY3RcbiAgICAgIGV4cGVjdCh0eXBlb2YgcmcudGFncykudG9CZShcIm9iamVjdFwiKTtcblxuICAgICAgLy8gU2hvdWxkIGJlIHNlcmlhbGl6YWJsZVxuICAgICAgZXhwZWN0KCgpID0+IEpTT04uc3RyaW5naWZ5KHJnLnRhZ3MpKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
*
|
|
19
19
|
* @packageDocumentation
|
|
20
20
|
*/
|
|
21
|
-
import * as
|
|
21
|
+
import * as cdktn from "cdktn";
|
|
22
22
|
import { Construct } from "constructs";
|
|
23
23
|
import type { ActionGroupProps } from "../../../azure-actiongroup/lib/action-group";
|
|
24
24
|
import type { ActivityLogAlertProps } from "../../../azure-activitylogalert/lib/activity-log-alert";
|
|
@@ -92,7 +92,7 @@ export interface MonitoringConfig {
|
|
|
92
92
|
* Combines base resource properties with version management capabilities
|
|
93
93
|
* and advanced configuration options for the unified framework.
|
|
94
94
|
*/
|
|
95
|
-
export interface AzapiResourceProps extends
|
|
95
|
+
export interface AzapiResourceProps extends cdktn.TerraformMetaArguments {
|
|
96
96
|
/**
|
|
97
97
|
* The name of the resource
|
|
98
98
|
*/
|
|
@@ -269,7 +269,7 @@ export declare abstract class AzapiResource extends Construct {
|
|
|
269
269
|
/**
|
|
270
270
|
* The underlying AZAPI Terraform resource
|
|
271
271
|
*/
|
|
272
|
-
protected terraformResource:
|
|
272
|
+
protected terraformResource: cdktn.TerraformResource;
|
|
273
273
|
/**
|
|
274
274
|
* The name of the resource
|
|
275
275
|
*/
|
|
@@ -569,14 +569,14 @@ export declare abstract class AzapiResource extends Construct {
|
|
|
569
569
|
* @param tags - Tags to apply to the resource (passed separately from body for proper idempotency)
|
|
570
570
|
* @returns The created AZAPI resource
|
|
571
571
|
*/
|
|
572
|
-
protected createAzapiResource(properties: Record<string, any>, parentId: string, name: string, location?: string, parentResource?: AzapiResource, dependsOn?:
|
|
572
|
+
protected createAzapiResource(properties: Record<string, any>, parentId: string, name: string, location?: string, parentResource?: AzapiResource, dependsOn?: cdktn.ITerraformDependable[], tags?: Record<string, string>): cdktn.TerraformResource;
|
|
573
573
|
/**
|
|
574
574
|
* Creates an AZAPI data source for reading existing resources
|
|
575
575
|
*
|
|
576
576
|
* @param resourceId - The full resource ID
|
|
577
577
|
* @returns The created Terraform data source
|
|
578
578
|
*/
|
|
579
|
-
protected createAzapiDataSource(resourceId: string):
|
|
579
|
+
protected createAzapiDataSource(resourceId: string): cdktn.TerraformDataSource;
|
|
580
580
|
/**
|
|
581
581
|
* Updates the resource with new properties
|
|
582
582
|
*
|
|
@@ -591,11 +591,11 @@ export declare abstract class AzapiResource extends Construct {
|
|
|
591
591
|
* Gets the underlying Terraform resource for use in dependency declarations
|
|
592
592
|
* This allows explicit dependency management between resources
|
|
593
593
|
*/
|
|
594
|
-
get resource():
|
|
594
|
+
get resource(): cdktn.TerraformResource;
|
|
595
595
|
/**
|
|
596
596
|
* Gets the resource as a Terraform output value
|
|
597
597
|
*/
|
|
598
|
-
get output():
|
|
598
|
+
get output(): cdktn.TerraformOutput;
|
|
599
599
|
/**
|
|
600
600
|
* Adds an access role assignment for a specified Azure AD object
|
|
601
601
|
*
|
|
@@ -23,7 +23,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
23
23
|
*
|
|
24
24
|
* @packageDocumentation
|
|
25
25
|
*/
|
|
26
|
-
const
|
|
26
|
+
const cdktn = require("cdktn");
|
|
27
27
|
const constructs_1 = require("constructs");
|
|
28
28
|
const data_azapi_client_config_1 = require("./providers-azapi/data-azapi-client-config");
|
|
29
29
|
const resource_1 = require("./providers-azapi/resource");
|
|
@@ -663,7 +663,7 @@ class AzapiResource extends constructs_1.Construct {
|
|
|
663
663
|
* @returns The created Terraform data source
|
|
664
664
|
*/
|
|
665
665
|
createAzapiDataSource(resourceId) {
|
|
666
|
-
const dataSource = new
|
|
666
|
+
const dataSource = new cdktn.TerraformDataSource(this, "data", {
|
|
667
667
|
terraformResourceType: "azapi_resource",
|
|
668
668
|
terraformGeneratorMetadata: {
|
|
669
669
|
providerName: "azapi",
|
|
@@ -700,7 +700,7 @@ class AzapiResource extends constructs_1.Construct {
|
|
|
700
700
|
* Gets the resource as a Terraform output value
|
|
701
701
|
*/
|
|
702
702
|
get output() {
|
|
703
|
-
return new
|
|
703
|
+
return new cdktn.TerraformOutput(this, "output", {
|
|
704
704
|
value: this.terraformResource?.fqn,
|
|
705
705
|
});
|
|
706
706
|
}
|
|
@@ -766,7 +766,7 @@ class AzapiResource extends constructs_1.Construct {
|
|
|
766
766
|
}
|
|
767
767
|
exports.AzapiResource = AzapiResource;
|
|
768
768
|
_a = JSII_RTTI_SYMBOL_1;
|
|
769
|
-
AzapiResource[_a] = { fqn: "@microsoft/terraform-cdk-constructs.AzapiResource", version: "
|
|
769
|
+
AzapiResource[_a] = { fqn: "@microsoft/terraform-cdk-constructs.AzapiResource", version: "2.2.0" };
|
|
770
770
|
/**
|
|
771
771
|
* AZAPI-based role assignment construct
|
|
772
772
|
*/
|
|
@@ -789,5 +789,5 @@ class AzapiRoleAssignment extends constructs_1.Construct {
|
|
|
789
789
|
}
|
|
790
790
|
exports.AzapiRoleAssignment = AzapiRoleAssignment;
|
|
791
791
|
_b = JSII_RTTI_SYMBOL_1;
|
|
792
|
-
AzapiRoleAssignment[_b] = { fqn: "@microsoft/terraform-cdk-constructs.AzapiRoleAssignment", version: "
|
|
793
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXphcGktcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS1henVyZS9saWIvYXphcGkvYXphcGktcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILCtCQUErQjtBQUMvQiwyQ0FBdUM7QUFDdkMseUZBQW1GO0FBQ25GLHlEQUFzRTtBQUN0RSwyRUFBc0U7QUFDdEUseUVBQW9FO0FBT3BFLGdGQUEyRTtBQTRMM0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILE1BQXNCLGFBQWMsU0FBUSxzQkFBUztJQUNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ08sTUFBTSxDQUFDLGVBQWUsQ0FDOUIsWUFBb0IsRUFDcEIsUUFBeUI7UUFFekIsdUNBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUE2QkQ7Ozs7O09BS0c7SUFDSCxJQUFXLEVBQUU7UUFDWCxPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hELENBQUM7SUEyREQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBNEIsRUFBRTtRQUN0RSxnQ0FBZ0M7UUFDaEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQWxCbkIsdURBQXVEO1FBQ3BDLDJCQUFzQixHQUFnQixFQUFFLENBQUM7UUFDekMsMkJBQXNCLEdBQWdCLEVBQUUsQ0FBQztRQUN6QyxnQ0FBMkIsR0FBZ0IsRUFBRSxDQUFDO1FBaUIvRCxrRUFBa0U7UUFDbEUsa0VBQWtFO1FBQ2xFLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFX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QUFNO1lBQ3hJLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztTQUNuQixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQW1CO1lBQzdCLElBQUksRUFBRSx5Q0FBeUM7WUFDL0MsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ3JCLElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUM7UUFDRixJQUFJLG1CQUFRLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7O0FBakJILGtEQWtCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXphcGlSZXNvdXJjZSAtIEEgdW5pZmllZCBmcmFtZXdvcmsgZm9yIHZlcnNpb24tYXdhcmUgQXp1cmUgcmVzb3VyY2UgbWFuYWdlbWVudFxuICpcbiAqIFRoaXMgYWJzdHJhY3QgYmFzZSBjbGFzcyBwcm92aWRlcyBhIHNlbGYtY29udGFpbmVkIHVuaWZpZWQgZnJhbWV3b3JrIGFwcHJvYWNoXG4gKiBmb3IgQXp1cmUgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoIGF1dG9tYXRpYyB2ZXJzaW9uIG1hbmFnZW1lbnQsIHNjaGVtYS1kcml2ZW5cbiAqIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uLCBhbmQgbWlncmF0aW9uIGFuYWx5c2lzIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBLZXkgRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gU3VwcG9ydCBmb3IgZXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHlcbiAqIC0gU2NoZW1hLWRyaXZlbiBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbiBiZXR3ZWVuIHZlcnNpb25zXG4gKiAtIE1pZ3JhdGlvbiBhbmFseXNpcyBhbmQgZGVwcmVjYXRpb24gd2FybmluZ3NcbiAqIC0gQnVpbHQtaW4gcm9sZSBhc3NpZ25tZW50IGFuZCBkaWFnbm9zdGljIHNldHRpbmdzIHN1cHBvcnRcbiAqIC0gSlNJSS1jb21wbGlhbnQgZGVzaWduIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKlxuICogVGhpcyBjbGFzcyByZXBsYWNlcyB0aGUgcHJldmlvdXMgZHVhbC1jbGFzcyBhcHByb2FjaCAoQXphcGlSZXNvdXJjZSArIEF6YXBpUmVzb3VyY2UpXG4gKiB3aXRoIGEgc2luZ2xlLCBzZWxmLWNvbnRhaW5lZCBpbXBsZW1lbnRhdGlvbiB0aGF0IGhhbmRsZXMgYWxsIHJlc291cmNlIG1hbmFnZW1lbnQgbmVlZHMuXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRGF0YUF6YXBpQ2xpZW50Q29uZmlnIH0gZnJvbSBcIi4vcHJvdmlkZXJzLWF6YXBpL2RhdGEtYXphcGktY2xpZW50LWNvbmZpZ1wiO1xuaW1wb3J0IHsgUmVzb3VyY2UsIFJlc291cmNlQ29uZmlnIH0gZnJvbSBcIi4vcHJvdmlkZXJzLWF6YXBpL3Jlc291cmNlXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVNjaGVtYVZhbGlkYXRvciB9IGZyb20gXCIuL3Jlc291cmNlLXNjaGVtYS12YWxpZGF0b3JcIjtcbmltcG9ydCB7IFJlc291cmNlVmVyc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi9yZXNvdXJjZS12ZXJzaW9uLW1hbmFnZXJcIjtcblxuLy8gVHlwZS1vbmx5IGltcG9ydHMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG5pbXBvcnQgdHlwZSB7IEFjdGlvbkdyb3VwUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXp1cmUtYWN0aW9uZ3JvdXAvbGliL2FjdGlvbi1ncm91cFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUxvZ0FsZXJ0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXp1cmUtYWN0aXZpdHlsb2dhbGVydC9saWIvYWN0aXZpdHktbG9nLWFsZXJ0XCI7XG5pbXBvcnQgdHlwZSB7IERpYWdub3N0aWNTZXR0aW5nc1Byb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2F6dXJlLWRpYWdub3N0aWNzZXR0aW5ncy9saWIvZGlhZ25vc3RpYy1zZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNBbGVydFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2F6dXJlLW1ldHJpY2FsZXJ0L2xpYi9tZXRyaWMtYWxlcnRcIjtcbmltcG9ydCB7IEFwaVZlcnNpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL3ZlcnNpb24tbWFuYWdlci9hcGktdmVyc2lvbi1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBBcGlTY2hlbWEsXG4gIFZlcnNpb25Db25maWcsXG4gIFZhbGlkYXRpb25SZXN1bHQsXG4gIE1pZ3JhdGlvbkFuYWx5c2lzLFxufSBmcm9tIFwiLi4vdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUmV0ZW50aW9uIHBvbGljeSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0ZW50aW9uUG9saWN5Q29uZmlnIHtcbiAgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGF5czogbnVtYmVyO1xufVxuXG4vKipcbiAqIExvZyBjb25maWd1cmF0aW9uIGZvciBkaWFnbm9zdGljIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc3RpY0xvZ0NvbmZpZyB7XG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xuICByZWFkb25seSBjYXRlZ29yeUdyb3VwPzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICByZWFkb25seSByZXRlbnRpb25Qb2xpY3k/OiBSZXRlbnRpb25Qb2xpY3lDb25maWc7XG59XG5cbi8qKlxuICogTWV0cmljIGNvbmZpZ3VyYXRpb24gZm9yIGRpYWdub3N0aWMgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaWFnbm9zdGljTWV0cmljQ29uZmlnIHtcbiAgLyoqIE1ldHJpYyBjYXRlZ29yeSBuYW1lICh1c2VkIGluIG5ld2VyIEFQSSB2ZXJzaW9ucykgKi9cbiAgcmVhZG9ubHkgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIC8qKiBUaW1lIGdyYWluIGZvciBtZXRyaWNzIGluIElTTyA4NjAxIGR1cmF0aW9uIGZvcm1hdCAodXNlZCBpbiBBUEkgdmVyc2lvbiAyMDE2LTA5LTAxLCBlLmcuLCBcIlBUMU1cIikgKi9cbiAgcmVhZG9ubHkgdGltZUdyYWluPzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICByZWFkb25seSByZXRlbnRpb25Qb2xpY3k/OiBSZXRlbnRpb25Qb2xpY3lDb25maWc7XG59XG5cbi8qKlxuICogTW9uaXRvcmluZyBjb25maWd1cmF0aW9uIGZvciBBenVyZSByZXNvdXJjZXNcbiAqXG4gKiBQcm92aWRlcyBpbnRlZ3JhdGVkIG1vbml0b3JpbmcgY2FwYWJpbGl0aWVzIGluY2x1ZGluZyBkaWFnbm9zdGljIHNldHRpbmdzLFxuICogbWV0cmljIGFsZXJ0cywgYW5kIGFjdGl2aXR5IGxvZyBhbGVydHMuIEFsbCBtb25pdG9yaW5nIGlzIG9wdGlvbmFsIGFuZFxuICogZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yaW5nQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgbW9uaXRvcmluZyBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpYWdub3N0aWMgc2V0dGluZ3MgY29uZmlndXJhdGlvblxuICAgKiBVc2VzIHRoZSBmdWxsIERpYWdub3N0aWNTZXR0aW5ncyBjb25zdHJ1Y3QgZm9yIGNvbnNpc3RlbmN5XG4gICAqL1xuICByZWFkb25seSBkaWFnbm9zdGljU2V0dGluZ3M/OiBEaWFnbm9zdGljU2V0dGluZ3NQcm9wcztcblxuICAvKipcbiAgICogQWN0aW9uIGdyb3VwcyB0byBjcmVhdGUgZm9yIHRoaXMgcmVzb3VyY2VcbiAgICogQ3JlYXRlcyBuZXcgQWN0aW9uR3JvdXAgaW5zdGFuY2VzIGFzIGNoaWxkIGNvbnN0cnVjdHNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbkdyb3Vwcz86IEFjdGlvbkdyb3VwUHJvcHNbXTtcblxuICAvKipcbiAgICogTWV0cmljIGFsZXJ0cyBjb25maWd1cmF0aW9uXG4gICAqIENyZWF0ZXMgTWV0cmljQWxlcnQgaW5zdGFuY2VzIHNjb3BlZCB0byB0aGlzIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNBbGVydHM/OiBNZXRyaWNBbGVydFByb3BzW107XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IGxvZyBhbGVydHMgY29uZmlndXJhdGlvblxuICAgKiBDcmVhdGVzIEFjdGl2aXR5TG9nQWxlcnQgaW5zdGFuY2VzIGZvciB0aGlzIHJlc291cmNlJ3Mgb3BlcmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZpdHlMb2dBbGVydHM/OiBBY3Rpdml0eUxvZ0FsZXJ0UHJvcHNbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB2ZXJzaW9uZWQgQXp1cmUgcmVzb3VyY2VzXG4gKlxuICogQ29tYmluZXMgYmFzZSByZXNvdXJjZSBwcm9wZXJ0aWVzIHdpdGggdmVyc2lvbiBtYW5hZ2VtZW50IGNhcGFiaWxpdGllc1xuICogYW5kIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHVuaWZpZWQgZnJhbWV3b3JrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF6YXBpUmVzb3VyY2VQcm9wcyBleHRlbmRzIGNka3RmLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gd2hlcmUgdGhlIHJlc291cmNlIHNob3VsZCBiZSBjcmVhdGVkXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIExvY2F0aW9uIGhhbmRsaW5nIHZhcmllcyBieSByZXNvdXJjZSB0eXBlOlxuICAgKiAtICoqVG9wLWxldmVsIHJlc291cmNlcyoqOiBNb3N0IHJlcXVpcmUgYW4gZXhwbGljaXQgbG9jYXRpb24gKGUuZy4sIFwiZWFzdHVzXCIsIFwid2VzdHVzXCIpXG4gICAqIC0gKipHbG9iYWwgcmVzb3VyY2VzKio6IFNvbWUgdXNlIFwiZ2xvYmFsXCIgYXMgbG9jYXRpb24gKGUuZy4sIFByaXZhdGUgRE5TIFpvbmVzKVxuICAgKiAtICoqQ2hpbGQgcmVzb3VyY2VzKio6IEluaGVyaXQgbG9jYXRpb24gZnJvbSBwYXJlbnQgYW5kIHNob3VsZCBOT1Qgc2V0IHRoaXMgcHJvcGVydHlcbiAgICpcbiAgICogRWFjaCByZXNvdXJjZSB0eXBlIG1heSBwcm92aWRlIGl0cyBvd24gZGVmYXVsdCB0aHJvdWdoIHRoZSBgcmVzb2x2ZUxvY2F0aW9uKClgIG1ldGhvZC5cbiAgICogSWYgbm8gbG9jYXRpb24gaXMgc3BlY2lmaWVkIGFuZCBubyBkZWZhdWx0IGV4aXN0cywgcmVzb3VyY2UgY3JlYXRpb24gbWF5IGZhaWwuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEV4cGxpY2l0IGxvY2F0aW9uIGZvciBtb3N0IHJlc291cmNlc1xuICAgKiBsb2NhdGlvbjogXCJlYXN0dXNcIlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBHbG9iYWwgcmVzb3VyY2UgKFByaXZhdGUgRE5TIFpvbmUpXG4gICAqIGxvY2F0aW9uOiBcImdsb2JhbFwiXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENoaWxkIHJlc291cmNlIChTdWJuZXQpIC0gZG8gbm90IHNldCBsb2NhdGlvblxuICAgKiAvLyBsb2NhdGlvbjogdW5kZWZpbmVkIChpbmhlcml0ZWQgZnJvbSBwYXJlbnQgVmlydHVhbCBOZXR3b3JrKVxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFZhcmllcyBieSByZXNvdXJjZSB0eXBlIC0gc2VlIHNwZWNpZmljIHJlc291cmNlIGRvY3VtZW50YXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYWdzIHRvIGFwcGx5IHRvIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBBUEkgdmVyc2lvbiB0byB1c2UgZm9yIHRoaXMgcmVzb3VyY2VcbiAgICpcbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGxhdGVzdCBhY3RpdmUgdmVyc2lvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZWQuXG4gICAqIFVzZSB0aGlzIGZvciB2ZXJzaW9uIHBpbm5pbmcgd2hlbiBzdGFiaWxpdHkgaXMgcmVxdWlyZWQgb3ZlciBsYXRlc3QgZmVhdHVyZXMuXG4gICAqXG4gICAqIEBleGFtcGxlIFwiMjAyNC0xMS0wMVwiXG4gICAqIEBkZWZhdWx0VmFsdWUgTGF0ZXN0IGFjdGl2ZSB2ZXJzaW9uIGZyb20gQXBpVmVyc2lvbk1hbmFnZXJcbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIG1pZ3JhdGlvbiBhbmFseXNpcyB3YXJuaW5nc1xuICAgKlxuICAgKiBXaGVuIHRydWUsIHRoZSBmcmFtZXdvcmsgd2lsbCBhbmFseXplIHRoZSBjdXJyZW50IHZlcnNpb24gZm9yIGRlcHJlY2F0aW9uXG4gICAqIHN0YXR1cyBhbmQgcHJvdmlkZSBtaWdyYXRpb24gcmVjb21tZW5kYXRpb25zIGluIHRoZSBkZXBsb3ltZW50IG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVNaWdyYXRpb25BbmFseXNpcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmFsaWRhdGUgcHJvcGVydGllcyBhZ2FpbnN0IHRoZSBzY2hlbWFcbiAgICpcbiAgICogV2hlbiB0cnVlLCBhbGwgcHJvcGVydGllcyB3aWxsIGJlIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBBUEkgc2NoZW1hIGJlZm9yZVxuICAgKiByZXNvdXJjZSBjcmVhdGlvbi4gVmFsaWRhdGlvbiBlcnJvcnMgd2lsbCBjYXVzZSBkZXBsb3ltZW50IGZhaWx1cmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVZhbGlkYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFwcGx5IHByb3BlcnR5IHRyYW5zZm9ybWF0aW9ucyBhdXRvbWF0aWNhbGx5XG4gICAqXG4gICAqIFdoZW4gdHJ1ZSwgcHJvcGVydGllcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgdHJhbnNmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZVxuICAgKiB0YXJnZXQgc2NoZW1hJ3MgdHJhbnNmb3JtYXRpb24gcnVsZXMuIFRoaXMgZW5hYmxlcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVRyYW5zZm9ybWF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTW9uaXRvcmluZyBjb25maWd1cmF0aW9uIGZvciB0aGlzIHJlc291cmNlXG4gICAqXG4gICAqIEVuYWJsZXMgaW50ZWdyYXRlZCBtb25pdG9yaW5nIHdpdGggZGlhZ25vc3RpYyBzZXR0aW5ncywgbWV0cmljIGFsZXJ0cyxcbiAgICogYW5kIGFjdGl2aXR5IGxvZyBhbGVydHMuIEFsbCBtb25pdG9yaW5nIGlzIG9wdGlvbmFsIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBtb25pdG9yaW5nOiB7XG4gICAqICAgZW5hYmxlZDogdHJ1ZSxcbiAgICogICBkaWFnbm9zdGljU2V0dGluZ3M6IHtcbiAgICogICAgIHdvcmtzcGFjZUlkOiBsb2dBbmFseXRpY3MuaWQsXG4gICAqICAgICBtZXRyaWNzOiBbJ0FsbE1ldHJpY3MnXSxcbiAgICogICAgIGxvZ3M6IFsnQXVkaXRMb2dzJ11cbiAgICogICB9LFxuICAgKiAgIG1ldHJpY0FsZXJ0czogW3tcbiAgICogICAgIG5hbWU6ICdoaWdoLWNwdS1hbGVydCcsXG4gICAqICAgICBzZXZlcml0eTogMixcbiAgICogICAgIHNjb3BlczogW10sIC8vIEF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoaXMgcmVzb3VyY2VcbiAgICogICAgIGNyaXRlcmlhOiB7IC4uLiB9LFxuICAgKiAgICAgYWN0aW9uczogW3sgYWN0aW9uR3JvdXBJZDogYWN0aW9uR3JvdXAuaWQgfV1cbiAgICogICB9XVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBtb25pdG9yaW5nPzogTW9uaXRvcmluZ0NvbmZpZztcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB2ZXJzaW9uLWF3YXJlIEF6dXJlIHJlc291cmNlIG1hbmFnZW1lbnRcbiAqXG4gKiBBemFwaVJlc291cmNlIHByb3ZpZGVzIGEgdW5pZmllZCBmcmFtZXdvcmsgZm9yIGNyZWF0aW5nIEF6dXJlIHJlc291cmNlc1xuICogd2l0aCBhdXRvbWF0aWMgdmVyc2lvbiBtYW5hZ2VtZW50LCBzY2hlbWEgdmFsaWRhdGlvbiwgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24sXG4gKiBhbmQgbWlncmF0aW9uIGFuYWx5c2lzLiBJdCBleHRlbmRzIHRoZSBleGlzdGluZyBBemFwaVJlc291cmNlIGNsYXNzIHdoaWxlXG4gKiBtYWludGFpbmluZyBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBjb3JlIGZyYW1ld29yayB0aGF0IGVuYWJsZXM6XG4gKiAtIEF1dG9tYXRpYyByZXNvbHV0aW9uIG9mIHRoZSBsYXRlc3QgQVBJIHZlcnNpb24gd2hlbiBub25lIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIGVudmlyb25tZW50cyByZXF1aXJpbmcgc3RhYmlsaXR5XG4gKiAtIFNjaGVtYS1kcml2ZW4gcHJvcGVydHkgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gTWlncmF0aW9uIGFuYWx5c2lzIHdpdGggYnJlYWtpbmcgY2hhbmdlIGRldGVjdGlvblxuICogLSBEZXByZWNhdGlvbiB3YXJuaW5ncyBhbmQgdXBncmFkZSByZWNvbW1lbmRhdGlvbnNcbiAqXG4gKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBhYnN0cmFjdCBtZXRob2RzIHRvIHByb3ZpZGUgcmVzb3VyY2Utc3BlY2lmaWNcbiAqIGNvbmZpZ3VyYXRpb24gd2hpbGUgdGhlIGZyYW1ld29yayBoYW5kbGVzIGFsbCB2ZXJzaW9uIG1hbmFnZW1lbnQgY29tcGxleGl0eS5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZSB3aXRoIGF1dG9tYXRpYyB2ZXJzaW9uIHJlc29sdXRpb246XG4gKiBjbGFzcyBNeVJlc291cmNlIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gKiAgIHByb3RlY3RlZCBnZXREZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICogICAgIHJldHVybiBcIjIwMjQtMTEtMDFcIjsgLy8gZmFsbGJhY2sgaWYgbm8gdmVyc2lvbnMgcmVnaXN0ZXJlZFxuICogICB9XG4gKlxuICogICBwcm90ZWN0ZWQgZ2V0UmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gKiAgICAgcmV0dXJuIFwiTWljcm9zb2Z0LlJlc291cmNlcy9yZXNvdXJjZUdyb3Vwc1wiO1xuICogICB9XG4gKlxuICogICBwcm90ZWN0ZWQgZ2V0QXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gKiAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICogICB9XG4gKlxuICogICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICogICAgIHJldHVybiB7IGxvY2F0aW9uOiBwcm9wcy5sb2NhdGlvbiwgdGFnczogcHJvcHMudGFncyB8fCB7fSB9O1xuICogICB9XG4gKiB9XG4gKlxuICogQGV4YW1wbGUgVXNhZ2Ugd2l0aCBleHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmc6XG4gKiBuZXcgTXlSZXNvdXJjZSh0aGlzLCBcInJlc291cmNlXCIsIHtcbiAqICAgbmFtZTogXCJteS1yZXNvdXJjZVwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgYXBpVmVyc2lvbjogXCIyMDI0LTAxLTAxXCIgLy8gUGluIHRvIHNwZWNpZmljIHZlcnNpb25cbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBemFwaVJlc291cmNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFN0YXRpYyBoZWxwZXIgZm9yIGNoaWxkIGNsYXNzZXMgdG8gcmVnaXN0ZXIgdGhlaXIgc2NoZW1hcyBpbiBzdGF0aWMgaW5pdGlhbGl6ZXJzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgaW4gYSBzdGF0aWMgaW5pdGlhbGl6ZXIgYmxvY2sgb2YgZWFjaCBjaGlsZCBjbGFzc1xuICAgKiB0byByZWdpc3RlciBhbGwgc3VwcG9ydGVkIEFQSSB2ZXJzaW9ucyBhbmQgdGhlaXIgc2NoZW1hcyB3aXRoIHRoZSBBcGlWZXJzaW9uTWFuYWdlci5cbiAgICogVGhlIHN0YXRpYyBibG9jayBydW5zIG9uY2Ugd2hlbiB0aGUgY2xhc3MgaXMgZmlyc3QgbG9hZGVkLCBlbnN1cmluZyBzY2hlbWFzIGFyZVxuICAgKiByZWdpc3RlcmVkIGJlZm9yZSBhbnkgaW5zdGFuY2VzIGFyZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2VUeXBlIC0gVGhlIEF6dXJlIHJlc291cmNlIHR5cGUgKGUuZy4sIFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzXCIpXG4gICAqIEBwYXJhbSB2ZXJzaW9ucyAtIEFycmF5IG9mIHZlcnNpb24gY29uZmlndXJhdGlvbnMgY29udGFpbmluZyBzY2hlbWFzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHN0YXRpYyB7XG4gICAqICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAqICAgICBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrc1wiLFxuICAgKiAgICAgQUxMX1ZJUlRVQUxfTkVUV09SS19WRVJTSU9OU1xuICAgKiAgICk7XG4gICAqIH1cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgcmVnaXN0ZXJTY2hlbWFzKFxuICAgIHJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgIHZlcnNpb25zOiBWZXJzaW9uQ29uZmlnW10sXG4gICk6IHZvaWQge1xuICAgIEFwaVZlcnNpb25NYW5hZ2VyLmluc3RhbmNlKCkucmVnaXN0ZXJSZXNvdXJjZVR5cGUocmVzb3VyY2VUeXBlLCB2ZXJzaW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEF6dXJlIHJlc291cmNlIHR5cGUgKGUuZy4sIFwiTWljcm9zb2Z0LlJlc291cmNlcy9yZXNvdXJjZUdyb3Vwc1wiKVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfcmVzb3VyY2VUeXBlITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIHZlcnNpb24gdG8gdXNlIGZvciB0aGlzIHJlc291cmNlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBBWkFQSSBUZXJyYWZvcm0gcmVzb3VyY2VcbiAgICovXG4gIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZSE6IGNka3RmLlRlcnJhZm9ybVJlc291cmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgcmVzb3VyY2UgKG9wdGlvbmFsIC0gbm90IGFsbCByZXNvdXJjZXMgaGF2ZSBhIGxvY2F0aW9uKVxuICAgKiBDaGlsZCByZXNvdXJjZXMgdHlwaWNhbGx5IGluaGVyaXQgbG9jYXRpb24gZnJvbSB0aGVpciBwYXJlbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEF6dXJlIHJlc291cmNlIElEXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIHVuZGVybHlpbmcgVGVycmFmb3JtIHJlc291cmNlLlxuICAgKiBDaGlsZCBjbGFzc2VzIG5vIGxvbmdlciBuZWVkIHRvIGltcGxlbWVudCB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LmlkfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIEFQSSB2ZXJzaW9uIGJlaW5nIHVzZWQgZm9yIHRoaXMgcmVzb3VyY2UgaW5zdGFuY2VcbiAgICpcbiAgICogVGhpcyBpcyB0aGUgYWN0dWFsIHZlcnNpb24gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBBenVyZSBBUEkgY2FsbCxcbiAgICogZWl0aGVyIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHByb3BzIG9yIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZWQgdG9cbiAgICogdGhlIGxhdGVzdCBhY3RpdmUgdmVyc2lvbi5cbiAgICovXG4gIHB1YmxpYyByZXNvbHZlZEFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqXG4gICAqIENvbnRhaW5zIHRoZSBjb21wbGV0ZSBzY2hlbWEgZGVmaW5pdGlvbiBpbmNsdWRpbmcgcHJvcGVydGllcywgdmFsaWRhdGlvblxuICAgKiBydWxlcywgYW5kIHRyYW5zZm9ybWF0aW9uIG1hcHBpbmdzIGZvciB0aGUgcmVzb2x2ZWQgQVBJIHZlcnNpb24uXG4gICAqL1xuICBwdWJsaWMgc2NoZW1hITogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKlxuICAgKiBDb250YWlucyBsaWZlY3ljbGUgaW5mb3JtYXRpb24sIGJyZWFraW5nIGNoYW5nZXMsIGFuZCBtaWdyYXRpb24gbWV0YWRhdGFcbiAgICogZm9yIHRoZSByZXNvbHZlZCBBUEkgdmVyc2lvbi5cbiAgICovXG4gIHB1YmxpYyB2ZXJzaW9uQ29uZmlnITogVmVyc2lvbkNvbmZpZztcblxuICAvKipcbiAgICogVmFsaWRhdGlvbiByZXN1bHRzIGZvciB0aGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKlxuICAgKiBBdmFpbGFibGUgYWZ0ZXIgY29uc3RydWN0aW9uIGlmIHZhbGlkYXRpb24gaXMgZW5hYmxlZC4gQ29udGFpbnMgZGV0YWlsZWRcbiAgICogaW5mb3JtYXRpb24gYWJvdXQgYW55IHZhbGlkYXRpb24gZXJyb3JzIG9yIHdhcm5pbmdzLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRpb25SZXN1bHQ/OiBWYWxpZGF0aW9uUmVzdWx0O1xuXG4gIC8qKlxuICAgKiBNaWdyYXRpb24gYW5hbHlzaXMgcmVzdWx0c1xuICAgKlxuICAgKiBBdmFpbGFibGUgYWZ0ZXIgY29uc3RydWN0aW9uIGlmIG1pZ3JhdGlvbiBhbmFseXNpcyBpcyBlbmFibGVkIGFuZCBhXG4gICAqIHByZXZpb3VzIHZlcnNpb24gY2FuIGJlIGRldGVybWluZWQgZm9yIGNvbXBhcmlzb24uXG4gICAqL1xuICBwdWJsaWMgbWlncmF0aW9uQW5hbHlzaXM/OiBNaWdyYXRpb25BbmFseXNpcztcblxuICAvLyBGcmFtZXdvcmsgY29tcG9uZW50c1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcGlWZXJzaW9uTWFuYWdlcjogQXBpVmVyc2lvbk1hbmFnZXI7XG4gIHByaXZhdGUgX3ZlcnNpb25NYW5hZ2VyITogUmVzb3VyY2VWZXJzaW9uTWFuYWdlcjtcbiAgcHJpdmF0ZSBfc2NoZW1hVmFsaWRhdG9yITogUmVzb3VyY2VTY2hlbWFWYWxpZGF0b3I7XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG11dGFibGUgdGFncyBzdG9yYWdlIHNlcGFyYXRlIGZyb20gaW5wdXQgcHJvcHNcbiAgICogQ29tYmluZXMgcHJvcHMudGFncyB3aXRoIGR5bmFtaWNhbGx5IGFkZGVkIHRhZ3MgdmlhIGFkZFRhZygpXG4gICAqL1xuICBwcml2YXRlIF90YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8vIE1vbml0b3JpbmcgcmVzb3VyY2VzIChwcm90ZWN0ZWQgZm9yIHN1YmNsYXNzIGFjY2VzcylcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1vbml0b3JpbmdBY3Rpb25Hcm91cHM6IENvbnN0cnVjdFtdID0gW107XG4gIHByb3RlY3RlZCByZWFkb25seSBtb25pdG9yaW5nTWV0cmljQWxlcnRzOiBDb25zdHJ1Y3RbXSA9IFtdO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9uaXRvcmluZ0FjdGl2aXR5TG9nQWxlcnRzOiBDb25zdHJ1Y3RbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6YXBpUmVzb3VyY2UgaW5zdGFuY2VcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGhhbmRsZXMgYWxsIGZyYW1ld29yayBpbml0aWFsaXphdGlvbiBpbmNsdWRpbmcgdmVyc2lvbiByZXNvbHV0aW9uLFxuICAgKiBzY2hlbWEgbG9hZGluZywgcHJvcGVydHkgdmFsaWRhdGlvbiwgdHJhbnNmb3JtYXRpb24sIGFuZCBtaWdyYXRpb24gYW5hbHlzaXMuXG4gICAqIEl0IG1haW50YWlucyBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgQXphcGlSZXNvdXJjZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgcmVzb3VyY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMgPSB7fSkge1xuICAgIC8vIEluaXRpYWxpemUgdGhlIGJhc2UgQ29uc3RydWN0XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEluaXRpYWxpemUgYmFzaWMgcHJvcGVydGllcyB0aGF0IGRvbid0IHJlcXVpcmUgYWJzdHJhY3QgbWV0aG9kc1xuICAgIC8vIFVzZSBwcm9wcy5uYW1lIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGNvbnN0cnVjdCBJRFxuICAgIC8vIFRoaXMgc3VwcG9ydHMgYm90aCBleHBsaWNpdCBuYW1pbmcgYW5kIGF1dG9tYXRpYyBJRC1iYXNlZCBuYW1pbmdcbiAgICB0aGlzLm5hbWUgPSB0aGlzLnJlc29sdmVOYW1lKHByb3BzKTtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5yZXNvbHZlTG9jYXRpb24ocHJvcHMpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgQVBJIHZlcnNpb24gbWFuYWdlclxuICAgIHRoaXMuX2FwaVZlcnNpb25NYW5hZ2VyID0gQXBpVmVyc2lvbk1hbmFnZXIuaW5zdGFuY2UoKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGFncyBzdG9yYWdlIHdpdGggZW1wdHkgb2JqZWN0ICh3aWxsIGJlIHBvcHVsYXRlZCBpbiBpbml0aWFsaXplKCkpXG4gICAgdGhpcy5fdGFncyA9IHt9O1xuXG4gICAgLy8gTm90ZTogV2UgY2Fubm90IGluaXRpYWxpemUgdmVyc2lvbiBtYW5hZ2VyIGhlcmUgYmVjYXVzZSBpdCByZXF1aXJlc1xuICAgIC8vIGNhbGxpbmcgYWJzdHJhY3QgbWV0aG9kcyAocmVzb3VyY2VUeXBlKCkgYW5kIGRlZmF1bHRWZXJzaW9uKCkpXG4gICAgLy8gd2hpY2ggYXJlIG5vdCB5ZXQgYXZhaWxhYmxlIGluIHRoZSBiYXNlIGNvbnN0cnVjdG9yLlxuICAgIC8vIFZlcnNpb24gcmVzb2x1dGlvbiBpcyBkZWZlcnJlZCB0byBpbml0aWFsaXplKCkgbWV0aG9kLlxuXG4gICAgLy8gU3RlcCAxOiBSZXNvbHZlIHRoZSBBUEkgdmVyc2lvbiB0byB1c2UgKGRvZXNuJ3QgY2FsbCBhYnN0cmFjdCBtZXRob2RzIHlldClcbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgdGhhdCB3aWxsIGJlIHByb3Blcmx5IHNldCBpbiBpbml0aWFsaXplKClcbiAgICB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbiA9IHByb3BzLmFwaVZlcnNpb24gfHwgXCJcIjtcbiAgICB0aGlzLmFwaVZlcnNpb24gPSB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbjtcblxuICAgIC8vIFN0ZXAgMjogQ2FsbCBpbml0aWFsaXplKCkgdG8gY29tcGxldGUgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgY2hpbGQgY2xhc3MgaXMgcmVhZHlcbiAgICB0aGlzLmluaXRpYWxpemUocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RlY3RlZCBpbml0aWFsaXphdGlvbiBtZXRob2QgY2FsbGVkIGFmdGVyIHRoZSBjb25zdHJ1Y3RvciBjb21wbGV0ZXNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIGNvbnN0cnVjdG9yIHRvIHBlcmZvcm0gaW5pdGlhbGl6YXRpb25cbiAgICogdGhhdCByZXF1aXJlcyBjYWxsaW5nIGFic3RyYWN0IG1ldGhvZHMuIENoaWxkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kXG4gICAqIGlmIHRoZXkgbmVlZCB0byBleHRlbmQgaW5pdGlhbGl6YXRpb24gbG9naWMsIGJ1dCB0aGV5IE1VU1QgY2FsbCBzdXBlci5pbml0aWFsaXplKHByb3BzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHByb3RlY3RlZCBpbml0aWFsaXplKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiB2b2lkIHtcbiAgICAvLyBTdGVwIDI6IFNldCByZXF1aXJlZCBhYnN0cmFjdCBwcm9wZXJ0aWVzIChub3cgc2FmZSB0byBjYWxsIGFic3RyYWN0IG1ldGhvZHMpXG4gICAgdGhpcy5fcmVzb3VyY2VUeXBlID0gdGhpcy5yZXNvdXJjZVR5cGUoKTtcblxuICAgIC8vIFN0ZXAgMzogSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBtYW5hZ2VyIGFuZCByZXNvbHZlIHRoZSBBUEkgdmVyc2lvblxuICAgIHRoaXMuX3ZlcnNpb25NYW5hZ2VyID0gbmV3IFJlc291cmNlVmVyc2lvbk1hbmFnZXIoXG4gICAgICB0aGlzLl9yZXNvdXJjZVR5cGUsXG4gICAgICB0aGlzLmRlZmF1bHRWZXJzaW9uKCksXG4gICAgKTtcbiAgICB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbiA9IHRoaXMuX3ZlcnNpb25NYW5hZ2VyLnJlc29sdmVBcGlWZXJzaW9uKFxuICAgICAgcHJvcHMuYXBpVmVyc2lvbixcbiAgICApO1xuICAgIHRoaXMuYXBpVmVyc2lvbiA9IHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uO1xuXG4gICAgLy8gU3RlcCAzLjU6IEluaXRpYWxpemUgdGFncyBmcm9tIHByb3BzIG9ubHkgaWYgdGhpcyByZXNvdXJjZSB0eXBlIHN1cHBvcnRzIHRhZ3NcbiAgICAvLyBUaGlzIGNyZWF0ZXMgYSBtdXRhYmxlIGNvcHkgc2VwYXJhdGUgZnJvbSB0aGUgcmVhZG9ubHkgcHJvcHNcbiAgICAvLyBTb21lIHJlc291cmNlcyBsaWtlIFBvbGljeSBEZWZpbml0aW9ucyBkb24ndCBzdXBwb3J0IHRhZ3NcbiAgICBpZiAodGhpcy5zdXBwb3J0c1RhZ3MoKSkge1xuICAgICAgdGhpcy5fdGFncyA9IHsgLi4uKHByb3BzLnRhZ3MgfHwge30pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RhZ3MgPSB7fTtcbiAgICAgIC8vIFdhcm4gaWYgdXNlciB0cmllZCB0byBzZXQgdGFncyBvbiBhIHJlc291cmNlIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoZW1cbiAgICAgIGlmIChwcm9wcy50YWdzICYmIE9iamVjdC5rZXlzKHByb3BzLnRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBXYXJuaW5nOiBUYWdzIHdlcmUgc3BlY2lmaWVkIGZvciAke3RoaXMucmVzb3VyY2VUeXBlKCl9IGJ1dCB0aGlzIHJlc291cmNlIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0YWdzLiBUYWdzIHdpbGwgYmUgaWdub3JlZC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN0ZXAgNDogTG9hZCB0aGUgc2NoZW1hIGFuZCB2ZXJzaW9uIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlIHZlcnNpb24gbWFuYWdlclxuICAgIHRoaXMuc2NoZW1hID0gdGhpcy5fdmVyc2lvbk1hbmFnZXIuc2NoZW1hRm9yVmVyc2lvbihcbiAgICAgIHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uLFxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbkNvbmZpZyA9IHRoaXMuX3ZlcnNpb25NYW5hZ2VyLnZlcnNpb25Db25maWcoXG4gICAgICB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbixcbiAgICApO1xuXG4gICAgaWYgKCF2ZXJzaW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBWZXJzaW9uIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kIGZvciAke3RoaXMucmVzb3VyY2VUeXBlKCl9QCR7dGhpcy5yZXNvbHZlZEFwaVZlcnNpb259LiBgICtcbiAgICAgICAgICBgUGxlYXNlIGVuc3VyZSB0aGUgdmVyc2lvbiBpcyByZWdpc3RlcmVkIHdpdGggdGhlIEFwaVZlcnNpb25NYW5hZ2VyLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnZlcnNpb25Db25maWcgPSB2ZXJzaW9uQ29uZmlnO1xuXG4gICAgLy8gU3RlcCA1OiBJbml0aWFsaXplIHRoZSBzY2hlbWEgdmFsaWRhdG9yXG4gICAgdGhpcy5fc2NoZW1hVmFsaWRhdG9yID0gbmV3IFJlc291cmNlU2NoZW1hVmFsaWRhdG9yKHRoaXMuc2NoZW1hKTtcblxuICAgIC8vIFN0ZXAgNjogUHJvY2VzcyBwcm9wZXJ0aWVzIHRocm91Z2ggdGhlIGZyYW1ld29yayBwaXBlbGluZVxuICAgIGNvbnN0IHByb2Nlc3NlZFByb3BzID0gdGhpcy5fcHJvY2Vzc1Byb3BlcnRpZXMocHJvcHMpO1xuXG4gICAgLy8gU3RlcCA3OiBQZXJmb3JtIHZhbGlkYXRpb24gaWYgZW5hYmxlZFxuICAgIGlmIChwcm9wcy5lbmFibGVWYWxpZGF0aW9uICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uUmVzdWx0ID1cbiAgICAgICAgdGhpcy5fc2NoZW1hVmFsaWRhdG9yLnZhbGlkYXRlUHJvcHMocHJvY2Vzc2VkUHJvcHMpO1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRpb25SZXN1bHQudmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQcm9wZXJ0eSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHt0aGlzLnJlc291cmNlVHlwZSgpfTpcXG5gICtcbiAgICAgICAgICAgIHRoaXMuX3NjaGVtYVZhbGlkYXRvclxuICAgICAgICAgICAgICAuZm9ybWF0VmFsaWRhdGlvbkVycm9ycyh0aGlzLnZhbGlkYXRpb25SZXN1bHQpXG4gICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN0ZXAgODogUGVyZm9ybSBtaWdyYXRpb24gYW5hbHlzaXMgaWYgZW5hYmxlZFxuICAgIGlmIChwcm9wcy5lbmFibGVNaWdyYXRpb25BbmFseXNpcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWlncmF0aW9uQW5hbHlzaXMgPSB0aGlzLl9wZXJmb3JtTWlncmF0aW9uQW5hbHlzaXMoKTtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDk6IENyZWF0ZSB0aGUgQXp1cmUgcmVzb3VyY2VcbiAgICB0aGlzLl9jcmVhdGVBenVyZVJlc291cmNlKHByb2Nlc3NlZFByb3BzKTtcblxuICAgIC8vIFN0ZXAgMTA6IENyZWF0ZSBtb25pdG9yaW5nIHJlc291cmNlcyBpZiBjb25maWd1cmVkXG4gICAgLy8gTm90ZTogTW9uaXRvcmluZyByZXNvdXJjZXMgYXJlIGNyZWF0ZWQgbGF6aWx5IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICAgIGlmIChwcm9wcy5tb25pdG9yaW5nKSB7XG4gICAgICB2b2lkIHRoaXMuY3JlYXRlTW9uaXRvcmluZ1Jlc291cmNlcyhwcm9wcy5tb25pdG9yaW5nKTtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDExOiBMb2cgd2FybmluZ3MgYW5kIG1pZ3JhdGlvbiBndWlkYW5jZVxuICAgIHRoaXMuX2xvZ0ZyYW1ld29ya01lc3NhZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGVmYXVsdCBBUEkgdmVyc2lvbiB0byB1c2Ugd2hlbiBubyBleHBsaWNpdCB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgc2Vuc2libGUgZGVmYXVsdCB2ZXJzaW9uIHRoYXQgY2FuIGJlIHVzZWRcbiAgICogYXMgYSBmYWxsYmFjayBpZiB0aGUgQXBpVmVyc2lvbk1hbmFnZXIgZG9lc24ndCBoYXZlIGFueSB2ZXJzaW9ucyByZWdpc3RlcmVkXG4gICAqIGZvciB0aGlzIHJlc291cmNlIHR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHN0cmluZyAoZS5nLiwgXCIyMDI0LTExLTAxXCIpXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciB0aGlzIHJlc291cmNlXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIGZ1bGwgQXp1cmUgcmVzb3VyY2UgdHlwZSBpZGVudGlmaWVyIHRoYXRcbiAgICogd2lsbCBiZSB1c2VkIGZvciBBUEkgY2FsbHMgYW5kIHZlcnNpb24gbWFuYWdlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIEF6dXJlIHJlc291cmNlIHR5cGUgKGUuZy4sIFwiTWljcm9zb2Z0LlJlc291cmNlcy9yZXNvdXJjZUdyb3Vwc1wiKVxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlc291cmNlVHlwZSgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIGNvbXBsZXRlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uLFxuICAgKiBpbmNsdWRpbmcgYWxsIHByb3BlcnR5IGRlZmluaXRpb25zLCB2YWxpZGF0aW9uIHJ1bGVzLCBhbmQgdHJhbnNmb3JtYXRpb25cbiAgICogbWFwcGluZ3MuIFVzZSB0aGUgcmVzb2x2ZVNjaGVtYSgpIGhlbHBlciBtZXRob2QgZm9yIHN0YW5kYXJkIHNjaGVtYSByZXNvbHV0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICpcbiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIHRyYW5zZm9ybSB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGJvZHkgZm9ybWF0XG4gICAqIGV4cGVjdGVkIGJ5IHRoZSBBenVyZSBSRVNUIEFQSSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb24uIFRoZSBmcmFtZXdvcmsgd2lsbFxuICAgKiBoYXZlIGFscmVhZHkgYXBwbGllZCBhbnkgbmVjZXNzYXJ5IHByb3BlcnR5IHRyYW5zZm9ybWF0aW9ucyBhbmQgdmFsaWRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb2Nlc3NlZCBhbmQgdmFsaWRhdGVkIHByb3BlcnRpZXMgZm9yIHRoZSByZXNvdXJjZVxuICAgKiBAcmV0dXJucyBUaGUgcmVzb3VyY2UgYm9keSBvYmplY3QgdG8gc2VuZCB0byBBenVyZSBBUElcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgaW4gY2hpbGQgY2xhc3NlcyB0byBwcm92aWRlIGRlZmF1bHQgbG9jYXRpb25cbiAgICogQHJldHVybnMgRGVmYXVsdCBsb2NhdGlvbiBvciB1bmRlZmluZWRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0TG9jYXRpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGluIGNoaWxkIGNsYXNzZXMgdG8gaW5kaWNhdGUgaWYgbG9jYXRpb24gaXMgcmVxdWlyZWRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBsb2NhdGlvbiBpcyBtYW5kYXRvcnkgZm9yIHRoaXMgcmVzb3VyY2UgdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGluIGNoaWxkIGNsYXNzZXMgdG8gc3BlY2lmeSBwYXJlbnQgcmVzb3VyY2UgZm9yIGxvY2F0aW9uIGluaGVyaXRhbmNlXG4gICAqIEByZXR1cm5zIFBhcmVudCByZXNvdXJjZSBvciB1bmRlZmluZWRcbiAgICovXG4gIHByb3RlY3RlZCBwYXJlbnRSZXNvdXJjZUZvckxvY2F0aW9uKCk6IEF6YXBpUmVzb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgaW4gY2hpbGQgY2xhc3NlcyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzb3VyY2UgdHlwZSBzdXBwb3J0cyB0YWdzXG4gICAqIFNvbWUgQXp1cmUgcmVzb3VyY2VzIChlLmcuLCBQb2xpY3kgRGVmaW5pdGlvbnMsIFBvbGljeSBBc3NpZ25tZW50cykgZG8gbm90IHN1cHBvcnQgdGFnc1xuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSByZXNvdXJjZSBzdXBwb3J0cyB0YWdzIChkZWZhdWx0KSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGxvY2F0aW9uIHVzaW5nIHRlbXBsYXRlIG1ldGhvZCBwYXR0ZXJuXG4gICAqIFByaW9yaXR5OiBwcm9wcy5sb2NhdGlvbiA+IHBhcmVudCBsb2NhdGlvbiA+IGRlZmF1bHQgbG9jYXRpb24gPiB2YWxpZGF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZUxvY2F0aW9uKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIDEuIEV4cGxpY2l0IGxvY2F0aW9uIGluIHByb3BzXG4gICAgaWYgKHByb3BzLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gcHJvcHMubG9jYXRpb247XG4gICAgfVxuXG4gICAgLy8gMi4gSW5oZXJpdCBmcm9tIHBhcmVudCByZXNvdXJjZVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50UmVzb3VyY2VGb3JMb2NhdGlvbigpO1xuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gcGFyZW50LmxvY2F0aW9uO1xuICAgIH1cblxuICAgIC8vIDMuIFVzZSBjaGlsZCBjbGFzcyBkZWZhdWx0XG4gICAgY29uc3QgZGVmYXVsdExvYyA9IHRoaXMuZGVmYXVsdExvY2F0aW9uKCk7XG4gICAgaWYgKGRlZmF1bHRMb2MpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0TG9jO1xuICAgIH1cblxuICAgIC8vIDQuIFZhbGlkYXRlIGlmIHJlcXVpcmVkXG4gICAgaWYgKHRoaXMucmVxdWlyZXNMb2NhdGlvbigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBMb2NhdGlvbiBpcyByZXF1aXJlZCBmb3IgJHt0aGlzLnJlc291cmNlVHlwZSgpfSBidXQgd2FzIG5vdCBwcm92aWRlZCBgICtcbiAgICAgICAgICBgYW5kIGNvdWxkIG5vdCBiZSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgcmVzb3VyY2UuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgbmFtZSBmb3IgdGhpcyByZXNvdXJjZVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjZW50cmFsaXplcyBuYW1lIHJlc29sdXRpb24gbG9naWMuIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlXG4gICAqIHByb3ZpZGVkIG5hbWUgb3IgZmFsbHMgYmFjayB0byB0aGUgY29uc3RydWN0IElELlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVOYW1lKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9wcy5uYW1lIHx8IHRoaXMubm9kZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBzdGFuZGFyZCBzY2hlbWEgcmVzb2x1dGlvblxuICAgKlxuICAgKiBTdWJjbGFzc2VzIGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gcmVzb2x2ZSB0aGUgc2NoZW1hIGZvciB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAqIGZyb20gdGhlIEFwaVZlcnNpb25NYW5hZ2VyLiBUaGlzIHByb3ZpZGVzIGEgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24gdGhhdFxuICAgKiBtb3N0IHJlc291cmNlcyBjYW4gdXNlIHdpdGhvdXQgY3VzdG9tIGxvZ2ljLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgc2NoZW1hIGNhbm5vdCBiZSByZXNvbHZlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICBjb25zdCB2ZXJzaW9uQ29uZmlnID0gdGhpcy5fYXBpVmVyc2lvbk1hbmFnZXIudmVyc2lvbkNvbmZpZyhcbiAgICAgIHRoaXMucmVzb3VyY2VUeXBlKCksXG4gICAgICB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbixcbiAgICApO1xuXG4gICAgaWYgKCF2ZXJzaW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzb2x2ZSBzY2hlbWE6IHZlcnNpb24gY29uZmlndXJhdGlvbiBub3QgZm91bmQgZm9yIGAgK1xuICAgICAgICAgIGAke3RoaXMucmVzb3VyY2VUeXBlKCl9QCR7dGhpcy5yZXNvbHZlZEFwaVZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcnNpb25Db25maWcuc2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBmb3IgdGhpcyByZXNvdXJjZSB0eXBlXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiBsb2dpY1xuICAgKiBmb3IgdXNlIGluIHN1YmNsYXNzZXMgb3IgZXh0ZXJuYWwgdG9vbGluZy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiwgb3IgdW5kZWZpbmVkIGlmIG5vbmUgZm91bmRcbiAgICovXG4gIHB1YmxpYyBsYXRlc3RWZXJzaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnNpb25NYW5hZ2VyXG4gICAgICA/IHRoaXMuX3ZlcnNpb25NYW5hZ2VyLmxhdGVzdFZlcnNpb24oKVxuICAgICAgOiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5sYXRlc3RWZXJzaW9uKHRoaXMucmVzb3VyY2VUeXBlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHN1cHBvcnRlZCB2ZXJzaW9ucyBmb3IgdGhpcyByZXNvdXJjZSB0eXBlXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdmVyc2lvbiByZWdpc3RyeSBmb3IgdXNlIGluXG4gICAqIHN1YmNsYXNzZXMgb3IgZXh0ZXJuYWwgdG9vbGluZy5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2Ygc3VwcG9ydGVkIHZlcnNpb24gc3RyaW5ncywgc29ydGVkIGJ5IHJlbGVhc2UgZGF0ZVxuICAgKi9cbiAgcHVibGljIHN1cHBvcnRlZFZlcnNpb25zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdmVyc2lvbk1hbmFnZXJcbiAgICAgID8gdGhpcy5fdmVyc2lvbk1hbmFnZXIuc3VwcG9ydGVkVmVyc2lvbnMoKVxuICAgICAgOiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5zdXBwb3J0ZWRWZXJzaW9ucyh0aGlzLnJlc291cmNlVHlwZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXplcyBtaWdyYXRpb24gZnJvbSBjdXJyZW50IHZlcnNpb24gdG8gYSB0YXJnZXQgdmVyc2lvblxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBlbmFibGVzIGV4dGVybmFsIHRvb2xzIHRvIGFuYWx5emUgbWlncmF0aW9uIHJlcXVpcmVtZW50c1xuICAgKiBiZXR3ZWVuIHZlcnNpb25zIGZvciBwbGFubmluZyBhbmQgYXV0b21hdGlvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldFZlcnNpb24gLSBUaGUgdGFyZ2V0IHZlcnNpb24gdG8gYW5hbHl6ZSBtaWdyYXRpb24gdG9cbiAgICogQHJldHVybnMgRGV0YWlsZWQgbWlncmF0aW9uIGFuYWx5c2lzIHJlc3VsdHNcbiAgICovXG4gIHB1YmxpYyBhbmFseXplTWlncmF0aW9uVG8odGFyZ2V0VmVyc2lvbjogc3RyaW5nKTogTWlncmF0aW9uQW5hbHlzaXMge1xuICAgIHJldHVybiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5hbmFseXplTWlncmF0aW9uKFxuICAgICAgdGhpcy5yZXNvdXJjZVR5cGUoKSxcbiAgICAgIHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uLFxuICAgICAgdGFyZ2V0VmVyc2lvbixcbiAgICApO1xuICB9XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSU1QTEVNRU5UQVRJT04gTUVUSE9EU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgcHJvcGVydGllcyB0aHJvdWdoIHRoZSBmcmFtZXdvcmsgcGlwZWxpbmVcbiAgICovXG4gIHByaXZhdGUgX3Byb2Nlc3NQcm9wZXJ0aWVzKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBhbnkge1xuICAgIGxldCBwcm9jZXNzZWRQcm9wcyA9IHsgLi4ucHJvcHMgfTtcblxuICAgIC8vIEVuc3VyZSBuYW1lIGlzIHNldCBiZWZvcmUgcHJvY2Vzc2luZ1xuICAgIC8vIFRoaXMgaXMgY3JpdGljYWwgZm9yIHZhbGlkYXRpb24gdG8gd29yayBjb3JyZWN0bHlcbiAgICBpZiAoIXByb2Nlc3NlZFByb3BzLm5hbWUpIHtcbiAgICAgIHByb2Nlc3NlZFByb3BzLm5hbWUgPSB0aGlzLnJlc29sdmVOYW1lKHByb3BzKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBzY2hlbWEgdXNpbmcgdGhlIHZhbGlkYXRvclxuICAgIHByb2Nlc3NlZFByb3BzID0gdGhpcy5fc2NoZW1hVmFsaWRhdG9yLmFwcGx5RGVmYXVsdHMocHJvY2Vzc2VkUHJvcHMpO1xuXG4gICAgLy8gQXBwbHkgcHJvcGVydHkgdHJhbnNmb3JtYXRpb25zIGlmIGVuYWJsZWRcbiAgICBpZiAocHJvcHMuZW5hYmxlVHJhbnNmb3JtYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAvLyBGb3IgdHJhbnNmb3JtYXRpb24sIHdlIHdvdWxkIG5lZWQgYSBzb3VyY2Ugc2NoZW1hLCBidXQgc2luY2Ugd2UncmUgbm90XG4gICAgICAvLyBtaWdyYXRpbmcgZnJvbSBhIGRpZmZlcmVudCB2ZXJzaW9uIGluIHRoaXMgY29udGV4dCwgd2UnbGwgc2tpcCB0cmFuc2Zvcm1hdGlvblxuICAgICAgLy8gVGhpcyB3b3VsZCBiZSB1c2VkIHdoZW4gdXBncmFkaW5nIGZyb20gb25lIHZlcnNpb24gdG8gYW5vdGhlclxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRQcm9wcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBtaWdyYXRpb24gYW5hbHlzaXMgZm9yIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICovXG4gIHByaXZhdGUgX3BlcmZvcm1NaWdyYXRpb25BbmFseXNpcygpOiBNaWdyYXRpb25BbmFseXNpcyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyBkZXByZWNhdGVkIHVzaW5nIHRoZSB2ZXJzaW9uIG1hbmFnZXJcbiAgICBpZiAodGhpcy5fdmVyc2lvbk1hbmFnZXIuaXNEZXByZWNhdGVkKHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uKSkge1xuICAgICAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IHRoaXMuX3ZlcnNpb25NYW5hZ2VyLmxhdGVzdFZlcnNpb24oKTtcbiAgICAgIGlmIChsYXRlc3RWZXJzaW9uICYmIGxhdGVzdFZlcnNpb24gIT09IHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5hbmFseXplTWlncmF0aW9uKFxuICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlKCksXG4gICAgICAgICAgdGhpcy5yZXNvbHZlZEFwaVZlcnNpb24sXG4gICAgICAgICAgbGF0ZXN0VmVyc2lvbixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHVuZGVybHlpbmcgQXp1cmUgcmVzb3VyY2VcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUF6dXJlUmVzb3VyY2UocHJvcHM6IGFueSk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBuYW1lIGlzIHNldCBpbiBwcm9wcyBmb3IgdmFsaWRhdGlvblxuICAgIGNvbnN0IHByb3BzV2l0aE5hbWUgPSB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUgfHwgdGhpcy5yZXNvbHZlTmFtZShwcm9wcyksXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSB0aGUgcmVzb3VyY2UgYm9keSB1c2luZyB0aGUgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25cbiAgICBjb25zdCByZXNvdXJjZUJvZHkgPSB0aGlzLmNyZWF0ZVJlc291cmNlQm9keShwcm9wc1dpdGhOYW1lKTtcblxuICAgIC8vIERldGVybWluZSB0aGUgcGFyZW50IElEIHVzaW5nIHRoZSBvdmVycmlkZWFibGUgbWV0aG9kXG4gICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJlc29sdmVQYXJlbnRJZChwcm9wc1dpdGhOYW1lKTtcblxuICAgIC8vIEZpbmQgcGFyZW50IEF6YXBpUmVzb3VyY2UgY29uc3RydWN0IGlmIHBhcmVudCBJRCByZWZlcmVuY2VzIGEgcmVzb3VyY2VcbiAgICBjb25zdCBwYXJlbnRSZXNvdXJjZSA9IHRoaXMuX2ZpbmRQYXJlbnRBemFwaVJlc291cmNlKHBhcmVudElkKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgQVpBUEkgcmVzb3VyY2UgdXNpbmcgdGhlIGJhc2UgY2xhc3MgbWV0aG9kXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gdGhpcy5yZXNvbHZlTmFtZShwcm9wcyk7XG4gICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZSA9IHRoaXMuY3JlYXRlQXphcGlSZXNvdXJjZShcbiAgICAgIHJlc291cmNlQm9keSxcbiAgICAgIHBhcmVudElkLFxuICAgICAgcmVzb3VyY2VOYW1lLFxuICAgICAgdGhpcy5sb2NhdGlvbixcbiAgICAgIHBhcmVudFJlc291cmNlLFxuICAgICAgcHJvcHNXaXRoTmFtZS5kZXBlbmRzT24sXG4gICAgICB0aGlzLl90YWdzLCAvLyBQYXNzIHRhZ3MgZGlyZWN0bHkgaW5zdGVhZCBvZiBleHRyYWN0aW5nIGZyb20gYm9keVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIHBhcmVudCBBemFwaVJlc291cmNlIGNvbnN0cnVjdCBpZiB0aGUgcGFyZW50SWQgcmVmZXJlbmNlcyBhIHJlc291cmNlXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHBhcmVudElkIGlzIGEgc3RhdGljIHN0cmluZyBvciBwYXJlbnQgbm90IGZvdW5kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9maW5kUGFyZW50QXphcGlSZXNvdXJjZShcbiAgICBwYXJlbnRJZDogc3RyaW5nLFxuICApOiBBemFwaVJlc291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgcGFyZW50IGlzIGEgc3RyaW5nIGludGVycG9sYXRpb24gcmVmZXJlbmNpbmcgYW5vdGhlciByZXNvdXJjZVxuICAgIC8vIFBhdHRlcm46ICR7YXphcGlfcmVzb3VyY2UucmVzb3VyY2VfbmFtZV9IQVNILmlkfSBvciAke2NvbnN0cnVjdC5mcW59LmlkXG4gICAgaWYgKCFwYXJlbnRJZC5pbmNsdWRlcyhcIiR7XCIpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBQYXJlbnQgaXMgYSBzdGF0aWMgc3RyaW5nIElELCBub3QgYSByZXNvdXJjZSByZWZlcmVuY2VcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gZmluZCB0aGUgcGFyZW50IEF6YXBpUmVzb3VyY2UgaW4gdGhlIGNvbnN0cnVjdCB0cmVlXG4gICAgLy8gV2UgbmVlZCB0byBzZWFyY2ggdGhlIGVudGlyZSB0cmVlIHRvIGZpbmQgdGhlIG1hdGNoaW5nIHBhcmVudFxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9maW5kUm9vdCgpO1xuICAgIHJldHVybiB0aGlzLl9maW5kUGFyZW50UmVzb3VyY2Uocm9vdCwgcGFyZW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSByb290IG9mIHRoZSBjb25zdHJ1Y3QgdHJlZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZFJvb3QoKTogQ29uc3RydWN0IHtcbiAgICBsZXQgY3VycmVudDogQ29uc3RydWN0ID0gdGhpcztcbiAgICB3aGlsZSAoY3VycmVudC5ub2RlLnNjb3BlKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5ub2RlLnNjb3BlO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBzZWFyY2hlcyBmb3IgYSBwYXJlbnQgcmVzb3VyY2UgYnkgbWF0Y2hpbmcgcGFyZW50SWQgcGF0dGVybnNcbiAgICogRW5oYW5jZWQgdG8gYmV0dGVyIGhhbmRsZSBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvbiBzeW50YXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2ZpbmRQYXJlbnRSZXNvdXJjZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICk6IEF6YXBpUmVzb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIC8vIENoZWNrIGFsbCBjaGlsZHJlbiBvZiB0aGlzIHNjb3BlXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBzY29wZS5ub2RlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkIGluc3RhbmNlb2YgQXphcGlSZXNvdXJjZSAmJlxuICAgICAgICBjaGlsZCAhPT0gdGhpcyAmJlxuICAgICAgICBjaGlsZC50ZXJyYWZvcm1SZXNvdXJjZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkRnFuID0gY2hpbGQudGVycmFmb3JtUmVzb3VyY2UuZnFuO1xuXG4gICAgICAgIC8vIE1hdGNoIGlmIHRoZSBjaGlsZCdzIEZRTiBhcHBlYXJzIGFueXdoZXJlIGluIHRoZSBwYXJlbnRJZCBzdHJpbmdcbiAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGNhc2VzIGxpa2U6ICR7YXphcGlfcmVzb3VyY2UuZG5zLXJlc29sdmVyX3Jlc291cmNlX0YxNTE3QkU0LmlkfVxuICAgICAgICAvLyB3aGVyZSBjaGlsZEZxbiB3b3VsZCBiZTogYXphcGlfcmVzb3VyY2UuZG5zLXJlc29sdmVyX3Jlc291cmNlX0YxNTE3QkU0XG4gICAgICAgIGlmIChwYXJlbnRJZC5pbmNsdWRlcyhjaGlsZEZxbikpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVjdXJzaXZlbHkgc2VhcmNoIGluIGNoaWxkJ3Mgc3VidHJlZVxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9maW5kUGFyZW50UmVzb3VyY2UoY2hpbGQsIHBhcmVudElkKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgcGFyZW50IHJlc291cmNlIElEIGZvciB0aGlzIHJlc291cmNlLlxuICAgKlxuICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBjaGlsZCByZXNvdXJjZSBjbGFzc2VzIChsaWtlIFN1Ym5ldCkgdGhhdCBuZWVkXG4gICAqIGN1c3RvbSBwYXJlbnQgSUQgcmVzb2x1dGlvbiBsb2dpYy4gQnkgZGVmYXVsdCwgdGhpcyBkZWxlZ2F0ZXMgdG8gdGhlXG4gICAqIHByaXZhdGUgX2RldGVybWluZVBhcmVudElkIG1ldGhvZCB3aGljaCBoYW5kbGVzIHN0YW5kYXJkIHJlc291cmNlIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBUaGUgcGFyZW50IHJlc291cmNlIElEXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZXRlcm1pbmVQYXJlbnRJZChwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgcGFyZW50IElEIGZvciB0aGUgcmVzb3VyY2UgKGludGVybmFsIGltcGxlbWVudGF0aW9uKVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyB0aGUgZGVmYXVsdCBwYXJlbnQgSUQgcmVzb2x1dGlvbiBsb2dpYy5cbiAgICogUmVzb3VyY2Utc3BlY2lmaWMgbG9naWMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSBvdmVycmlkZWFibGUgcmVzb2x2ZVBhcmVudElkKCkgbWV0aG9kLlxuICAgKlxuICAgKiBEZWZhdWx0IGJlaGF2aW9yOlxuICAgKiAtIElmIHJlc291cmNlR3JvdXBJZCBpcyBwcm92aWRlZCBpbiBwcm9wcywgdXNlIGl0XG4gICAqIC0gT3RoZXJ3aXNlLCBkZWZhdWx0IHRvIHN1YnNjcmlwdGlvbiBzY29wZVxuICAgKi9cbiAgcHJpdmF0ZSBfZGV0ZXJtaW5lUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgLy8gSWYgcmVzb3VyY2UgZ3JvdXAgSUQgaXMgcHJvdmlkZWQsIHVzZSBpdCBhcyBwYXJlbnRcbiAgICBpZiAocHJvcHMucmVzb3VyY2VHcm91cElkKSB7XG4gICAgICByZXR1cm4gcHJvcHMucmVzb3VyY2VHcm91cElkO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgdG8gc3Vic2NyaXB0aW9uIHNjb3BlIGZvciByZXNvdXJjZXMgd2l0aG91dCBleHBsaWNpdCBwYXJlbnRcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSBuZXcgRGF0YUF6YXBpQ2xpZW50Q29uZmlnKFxuICAgICAgdGhpcyxcbiAgICAgIFwiY2xpZW50X2NvbmZpZ19kZWZhdWx0XCIsXG4gICAgICB7fSxcbiAgICApO1xuICAgIHJldHVybiBgL3N1YnNjcmlwdGlvbnMvXFwkeyR7Y2xpZW50Q29uZmlnLmZxbn0uc3Vic2NyaXB0aW9uX2lkfWA7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBmcmFtZXdvcmsgbWVzc2FnZXMgaW5jbHVkaW5nIHdhcm5pbmdzIGFuZCBtaWdyYXRpb24gZ3VpZGFuY2VcbiAgICovXG4gIHByaXZhdGUgX2xvZ0ZyYW1ld29ya01lc3NhZ2VzKCk6IHZvaWQge1xuICAgIC8vIEFOU0kgY29sb3IgY29kZXMgZm9yIHRlcm1pbmFsIG91dHB1dFxuICAgIGNvbnN0IFJFRCA9IFwiXFx4MWJbMzFtXCI7XG4gICAgY29uc3QgWUVMTE9XID0gXCJcXHgxYlszM21cIjtcbiAgICBjb25zdCBSRVNFVCA9IFwiXFx4MWJbMG1cIjtcbiAgICBjb25zdCBCT0xEID0gXCJcXHgxYlsxbVwiO1xuXG4gICAgLy8gTG9nIGRlcHJlY2F0aW9uIHdhcm5pbmdzIHVzaW5nIHRoZSB2ZXJzaW9uIG1hbmFnZXJcbiAgICBpZiAoXG4gICAgICB0aGlzLl92ZXJzaW9uTWFuYWdlci5pc0RlcHJlY2F0ZWQodGhpcy5yZXNvbHZlZEFwaVZlcnNpb24pICYmXG4gICAgICAhdGhpcy5fdmVyc2lvbk1hbmFnZXIuaXNTdW5zZXQodGhpcy5yZXNvbHZlZEFwaVZlcnNpb24pXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGAke1lFTExPV33imqDvuI8gIEFQSSB2ZXJzaW9uICR7dGhpcy5yZXNvbHZlZEFwaVZlcnNpb259IGZvciAke3RoaXMucmVzb3VyY2VUeXBlKCl9IGlzIGRlcHJlY2F0ZWQuIGAgK1xuICAgICAgICAgIGBDb25zaWRlciB1cGdyYWRpbmcgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uOiAke3RoaXMubGF0ZXN0VmVyc2lvbigpfSR7UkVTRVR9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb25NYW5hZ2VyLmlzU3Vuc2V0KHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCR7UkVEfSR7Qk9MRH3wn5qoIEFQSSB2ZXJzaW9uICR7dGhpcy5yZXNvbHZlZEFwaVZlcnNpb259IGZvciAke3RoaXMucmVzb3VyY2VUeXBlKCl9IGhhcyByZWFjaGVkIHN1bnNldC4gYCArXG4gICAgICAgICAgYEltbWVkaWF0ZSBtaWdyYXRpb24gdG8gJHt0aGlzLmxhdGVzdFZlcnNpb24oKX0gaXMgcmVxdWlyZWQuJHtSRVNFVH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgbWlncmF0aW9uIGFuYWx5c2lzIHJlc3VsdHNcbiAgICBpZiAodGhpcy5taWdyYXRpb25BbmFseXNpcyAmJiAhdGhpcy5taWdyYXRpb25BbmFseXNpcy5jb21wYXRpYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGAke1lFTExPV31NaWdyYXRpb24gZnJvbSAke3RoaXMubWlncmF0aW9uQW5hbHlzaXMuZnJvbVZlcnNpb259IHRvICR7dGhpcy5taWdyYXRpb25BbmFseXNpcy50b1ZlcnNpb259IGAgK1xuICAgICAgICAgIGBoYXMgJHt0aGlzLm1pZ3JhdGlvbkFuYWx5c2lzLmJyZWFraW5nQ2hhbmdlcy5sZW5ndGh9IGJyZWFraW5nIGNoYW5nZXMuIGAgK1xuICAgICAgICAgIGBFc3RpbWF0ZWQgZWZmb3J0OiAke3RoaXMubWlncmF0aW9uQW5hbHlzaXMuZXN0aW1hdGVkRWZmb3J0fSR7UkVTRVR9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9nIHZhbGlkYXRpb24gd2FybmluZ3NcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uUmVzdWx0Py53YXJuaW5ncy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtZRUxMT1d94pqg77iPICBQcm9wZXJ0eSB2YWxpZGF0aW9uIHdhcm5pbmc6ICR7d2FybmluZ30ke1JFU0VUfWAsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNT05JVE9SSU5HIElOVEVHUkFUSU9OIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ3JlYXRlcyBtb25pdG9yaW5nIHJlc291cmNlcyBiYXNlZCBvbiB0aGUgbW9uaXRvcmluZyBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBjb25zdHJ1Y3Rpb24gaWYgbW9uaXRvcmluZyBpcyBjb25maWd1cmVkLlxuICAgKiBJdCBjcmVhdGVzIGFjdGlvbiBncm91cHMsIG1ldHJpYyBhbGVydHMsIGFuZCBhY3Rpdml0eSBsb2cgYWxlcnRzIGFzIGNoaWxkIGNvbnN0cnVjdHMuXG4gICAqXG4gICAqIFByb3RlY3RlZCB0byBhbGxvdyBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCBtb25pdG9yaW5nIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIG1vbml0b3JpbmcgY29uZmlndXJhdGlvbiBmcm9tIHByb3BzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTW9uaXRvcmluZ1Jlc291cmNlcyhcbiAgICBjb25maWc6IE1vbml0b3JpbmdDb25maWcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNraXAgaWYgbW9uaXRvcmluZyBpcyBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYgKGNvbmZpZy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBkaWFnbm9zdGljIHNldHRpbmdzIHVzaW5nIGR5bmFtaWMgaW1wb3J0IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgICBpZiAoY29uZmlnLmRpYWdub3N0aWNTZXR0aW5ncykge1xuICAgICAgY29uc3QgeyBEaWFnbm9zdGljU2V0dGluZ3MgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgXCIuLi8uLi8uLi9henVyZS1kaWFnbm9zdGljc2V0dGluZ3MvbGliL2RpYWdub3N0aWMtc2V0dGluZ3NcIlxuICAgICAgKTtcbiAgICAgIG5ldyBEaWFnbm9zdGljU2V0dGluZ3ModGhpcywgXCJtb25pdG9yaW5nLWRpYWdub3N0aWMtc2V0dGluZ3NcIiwge1xuICAgICAgICAuLi5jb25maWcuZGlhZ25vc3RpY1NldHRpbmdzLFxuICAgICAgICB0YXJnZXRSZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlSWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYWN0aW9uIGdyb3VwcyB1c2luZyBkeW5hbWljIGltcG9ydFxuICAgIGlmIChjb25maWcuYWN0aW9uR3JvdXBzICYmIGNvbmZpZy5hY3Rpb25Hcm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgeyBBY3Rpb25Hcm91cCB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICBcIi4uLy4uLy4uL2F6dXJlLWFjdGlvbmdyb3VwL2xpYi9hY3Rpb24tZ3JvdXBcIlxuICAgICAgKTtcbiAgICAgIGNvbmZpZy5hY3Rpb25Hcm91cHMuZm9yRWFjaCgoYWN0aW9uR3JvdXBQcm9wcywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uR3JvdXAgPSBuZXcgQWN0aW9uR3JvdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgbW9uaXRvcmluZy1hY3Rpb24tZ3JvdXAtJHtpbmRleH1gLFxuICAgICAgICAgIGFjdGlvbkdyb3VwUHJvcHMsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubW9uaXRvcmluZ0FjdGlvbkdyb3Vwcy5wdXNoKGFjdGlvbkdyb3VwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBtZXRyaWMgYWxlcnRzIHVzaW5nIGR5bmFtaWMgaW1wb3J0XG4gICAgaWYgKGNvbmZpZy5tZXRyaWNBbGVydHMgJiYgY29uZmlnLm1ldHJpY0FsZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IE1ldHJpY0FsZXJ0IH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgICAgIFwiLi4vLi4vLi4vYXp1cmUtbWV0cmljYWxlcnQvbGliL21ldHJpYy1hbGVydFwiXG4gICAgICApO1xuICAgICAgY29uZmlnLm1ldHJpY0FsZXJ0cy5mb3JFYWNoKChtZXRyaWNBbGVydFByb3BzLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBJZiBzY29wZXMgbm90IHByb3ZpZGVkLCBkZWZhdWx0IHRvIHRoaXMgcmVzb3VyY2VcbiAgICAgICAgY29uc3QgcHJvcHNXaXRoU2NvcGU6IE1ldHJpY0FsZXJ0UHJvcHMgPSB7XG4gICAgICAgICAgLi4ubWV0cmljQWxlcnRQcm9wcyxcbiAgICAgICAgICBzY29wZXM6IG1ldHJpY0FsZXJ0UHJvcHMuc2NvcGVzIHx8IFt0aGlzLnJlc291cmNlSWRdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG1ldHJpY0FsZXJ0ID0gbmV3IE1ldHJpY0FsZXJ0KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYG1vbml0b3JpbmctbWV0cmljLWFsZXJ0LSR7aW5kZXh9YCxcbiAgICAgICAgICBwcm9wc1dpdGhTY29wZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tb25pdG9yaW5nTWV0cmljQWxlcnRzLnB1c2gobWV0cmljQWxlcnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFjdGl2aXR5IGxvZyBhbGVydHMgdXNpbmcgZHluYW1pYyBpbXBvcnRcbiAgICBpZiAoY29uZmlnLmFjdGl2aXR5TG9nQWxlcnRzICYmIGNvbmZpZy5hY3Rpdml0eUxvZ0FsZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IEFjdGl2aXR5TG9nQWxlcnQgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgXCIuLi8uLi8uLi9henVyZS1hY3Rpdml0eWxvZ2FsZXJ0L2xpYi9hY3Rpdml0eS1sb2ctYWxlcnRcIlxuICAgICAgKTtcbiAgICAgIGNvbmZpZy5hY3Rpdml0eUxvZ0FsZXJ0cy5mb3JFYWNoKChhY3Rpdml0eUxvZ0FsZXJ0UHJvcHMsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIElmIHNjb3BlcyBub3QgcHJvdmlkZWQsIGRlZmF1bHQgdG8gdGhpcyByZXNvdXJjZVxuICAgICAgICBjb25zdCBwcm9wc1dpdGhTY29wZTogQWN0aXZpdHlMb2dBbGVydFByb3BzID0ge1xuICAgICAgICAgIC4uLmFjdGl2aXR5TG9nQWxlcnRQcm9wcyxcbiAgICAgICAgICBzY29wZXM6IGFjdGl2aXR5TG9nQWxlcnRQcm9wcy5zY29wZXMgfHwgW3RoaXMucmVzb3VyY2VJZF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYWN0aXZpdHlMb2dBbGVydCA9IG5ldyBBY3Rpdml0eUxvZ0FsZXJ0KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYG1vbml0b3JpbmctYWN0aXZpdHktbG9nLWFsZXJ0LSR7aW5kZXh9YCxcbiAgICAgICAgICBwcm9wc1dpdGhTY29wZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tb25pdG9yaW5nQWN0aXZpdHlMb2dBbGVydHMucHVzaChhY3Rpdml0eUxvZ0FsZXJ0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU09VUkNFIE1BTkFHRU1FTlQgTUVUSE9EUyAoZnJvbSBBemFwaVJlc291cmNlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgY2hpbGQgY2xhc3NlcyB0byBjdXN0b21pemUgdGhlIFJlc291cmNlQ29uZmlnIGJlZm9yZSByZXNvdXJjZSBjcmVhdGlvblxuICAgKlxuICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhZGQgcmVzb3VyY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBsaWtlOlxuICAgKiAtIHNjaGVtYVZhbGlkYXRpb25FbmFibGVkOiBmYWxzZSAoZm9yIHJlc291cmNlcyB3aXRoIGNvbXBsZXggbmVzdGVkIHN0cnVjdHVyZXMpXG4gICAqIC0gaWdub3JlTWlzc2luZ1Byb3BlcnR5OiB0cnVlIChmb3IgcmVzb3VyY2VzIHdpdGggZHluYW1pYy91bmtub3duIHByb3BlcnRpZXMpXG4gICAqIC0gaWdub3JlTnVsbFByb3BlcnR5OiB0cnVlIChmb3IgcmVzb3VyY2VzIHRoYXQgc2hvdWxkIHNraXAgbnVsbCB2YWx1ZXMpXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgYmFzZSBSZXNvdXJjZUNvbmZpZyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIHJlc291cmNlXG4gICAqIEByZXR1cm5zIFRoZSBwb3RlbnRpYWxseSBtb2RpZmllZCBSZXNvdXJjZUNvbmZpZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm90ZWN0ZWQgY3VzdG9taXplUmVzb3VyY2VDb25maWcoY29uZmlnOiBSZXNvdXJjZUNvbmZpZyk6IFJlc291cmNlQ29uZmlnIHtcbiAgICogICByZXR1cm4ge1xuICAgKiAgICAgLi4uY29uZmlnLFxuICAgKiAgICAgc2NoZW1hVmFsaWRhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgKiAgICAgaWdub3JlTWlzc2luZ1Byb3BlcnR5OiB0cnVlLFxuICAgKiAgIH07XG4gICAqIH1cbiAgICovXG4gIHByb3RlY3RlZCBjdXN0b21pemVSZXNvdXJjZUNvbmZpZyhjb25maWc6IGFueSk6IGFueSB7XG4gICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbjogbm8gY3VzdG9taXphdGlvblxuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgdW5kZXJseWluZyBBWkFQSSBUZXJyYWZvcm0gcmVzb3VyY2UgdXNpbmcgdGhlIGdlbmVyYXRlZCBwcm92aWRlciBjbGFzc2VzXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIHByb3BlcnRpZXMgb2JqZWN0IHRvIHNlbmQgdG8gdGhlIEF6dXJlIEFQSSAoc2hvdWxkIGluY2x1ZGUgbG9jYXRpb24gaWYgbmVlZGVkKVxuICAgKiBAcGFyYW0gcGFyZW50SWQgLSBUaGUgcGFyZW50IHJlc291cmNlIElEIChlLmcuLCBzdWJzY3JpcHRpb24gb3IgcmVzb3VyY2UgZ3JvdXApXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSBsb2NhdGlvbiAtIFRoZSBsb2NhdGlvbiBvZiB0aGUgcmVzb3VyY2UgKG9wdGlvbmFsLCBvbmx5IGZvciB0b3AtbGV2ZWwgcmVzb3VyY2VzIHdpdGhvdXQgbG9jYXRpb24gaW4gYm9keSlcbiAgICogQHBhcmFtIHBhcmVudFJlc291cmNlIC0gVGhlIHBhcmVudCByZXNvdXJjZSBmb3IgZGVwZW5kZW5jeSB0cmFja2luZ1xuICAgKiBAcGFyYW0gZGVwZW5kc09uIC0gRXhwbGljaXQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHJlc291cmNlXG4gICAqIEBwYXJhbSB0YWdzIC0gVGFncyB0byBhcHBseSB0byB0aGUgcmVzb3VyY2UgKHBhc3NlZCBzZXBhcmF0ZWx5IGZyb20gYm9keSBmb3IgcHJvcGVyIGlkZW1wb3RlbmN5KVxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBBWkFQSSByZXNvdXJjZVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUF6YXBpUmVzb3VyY2UoXG4gICAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwYXJlbnRJZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBsb2NhdGlvbj86IHN0cmluZyxcbiAgICBwYXJlbnRSZXNvdXJjZT86IEF6YXBpUmVzb3VyY2UsXG4gICAgZGVwZW5kc09uPzogY2RrdGYuSVRlcnJhZm9ybURlcGVuZGFibGVbXSxcbiAgICB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgKTogY2RrdGYuVGVycmFmb3JtUmVzb3VyY2Uge1xuICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgY2hpbGQgcmVzb3VyY2UgYnkgY291bnRpbmcgcGF0aCBzZWdtZW50c1xuICAgIC8vIENoaWxkIHJlc291cmNlcyBoYXZlIG11bHRpcGxlIHNlZ21lbnRzIChlLmcuLCBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrcy9zdWJuZXRzXCIpXG4gICAgLy8gVG9wLWxldmVsIHJlc291cmNlcyBoYXZlIG9uZSBzZWdtZW50IChlLmcuLCBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrc1wiKVxuICAgIGNvbnN0IHJlc291cmNlVHlwZVBhcnRzID0gdGhpcy5fcmVzb3VyY2VUeXBlLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCBpc0NoaWxkUmVzb3VyY2UgPSByZXNvdXJjZVR5cGVQYXJ0cy5sZW5ndGggPiAyO1xuXG4gICAgLy8gUmVtb3ZlIHRhZ3MgZnJvbSBwcm9wZXJ0aWVzIHRvIGF2b2lkIGR1cGxpY2F0ZSBzcGVjaWZpY2F0aW9uIGVycm9yXG4gICAgLy8gVGhlIEFaQVBJIHByb3ZpZGVyIHJlcXVpcmVzIHRhZ3MgYXQgdGhlIHRvcCBsZXZlbCBvbmx5LCBub3QgaW4gdGhlIGJvZHlcbiAgICAvLyBUaGlzIHByZXZlbnRzOiBcImNhbid0IHNwZWNpZnkgYm90aCB0aGUgYXJndW1lbnQgJ3RhZ3MnIGFuZCAndGFncycgaW4gdGhlIGFyZ3VtZW50ICdib2R5J1wiXG4gICAgLy8gVGFncyBhcmUgbm93IHBhc3NlZCBhcyBhIHNlcGFyYXRlIHBhcmFtZXRlciBmb3IgYmV0dGVyIGNsYXJpdHkgYW5kIGlkZW1wb3RlbmN5XG4gICAgY29uc3QgYm9keVdpdGhvdXRUYWdzID0geyAuLi5wcm9wZXJ0aWVzIH07XG4gICAgZGVsZXRlIGJvZHlXaXRob3V0VGFncy50YWdzO1xuXG4gICAgLy8gQnVpbGQgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgZ2VuZXJhdGVkIEFaQVBJIFJlc291cmNlIGNsYXNzXG4gICAgLy8gQWRkIGxvY2F0aW9uIG9ubHkgaWY6XG4gICAgLy8gMS4gVGhpcyBpcyBhIHRvcC1sZXZlbCByZXNvdXJjZSAobm90IGEgY2hpbGQgcmVzb3VyY2UpXG4gICAgLy8gMi4gTG9jYXRpb24gaXMgcHJvdmlkZWQgYXMgcGFyYW1ldGVyXG4gICAgLy8gMy4gTG9jYXRpb24gaXMgbm90IGFscmVhZHkgaW4gdGhlIGJvZHlcbiAgICAvLyBDaGlsZCByZXNvdXJjZXMgaW5oZXJpdCBsb2NhdGlvbiBmcm9tIHRoZWlyIHBhcmVudCBhbmQgc2hvdWxkIG5vdCBzcGVjaWZ5IGl0XG5cbiAgICAvLyBDb21iaW5lIGRlcGVuZHNPbiBhcnJheXM6IGV4cGxpY2l0IGRlcGVuZGVuY2llcyArIHBhcmVudCByZXNvdXJjZSBkZXBlbmRlbmN5XG4gICAgY29uc3QgY29tYmluZWREZXBlbmRzT246IGNka3RmLklUZXJyYWZvcm1EZXBlbmRhYmxlW10gPSBbXTtcbiAgICBpZiAoZGVwZW5kc09uICYmIGRlcGVuZHNPbi5sZW5ndGggPiAwKSB7XG4gICAgICBjb21iaW5lZERlcGVuZHNPbi5wdXNoKC4uLmRlcGVuZHNPbik7XG4gICAgfVxuXG4gICAgLy8gQ1JJVElDQUw6IEFsd2F5cyBhZGQgcGFyZW50IGRlcGVuZGVuY3kgd2hlbiBwYXJlbnRfaWQgY29udGFpbnMgaW50ZXJwb2xhdGlvbnNcbiAgICAvLyBUaGlzIGVuc3VyZXMgcHJvcGVyIGRlc3Ryb3ktdGltZSBvcmRlcmluZyBldmVuIGlmIHBhcmVudCBkZXRlY3Rpb24gZmFpbHNcbiAgICBpZiAocGFyZW50UmVzb3VyY2U/LnRlcnJhZm9ybVJlc291cmNlKSB7XG4gICAgICBjb21iaW5lZERlcGVuZHNPbi5wdXNoKHBhcmVudFJlc291cmNlLnRlcnJhZm9ybVJlc291cmNlKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgYmFzZSBjb25maWd1cmF0aW9uXG4gICAgbGV0IGNvbmZpZzogUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICB0eXBlOiBgJHt0aGlzLl9yZXNvdXJjZVR5cGV9QCR7dGhpcy5hcGlWZXJzaW9ufWAsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgcGFyZW50SWQ6IHBhcmVudElkLFxuICAgICAgYm9keTogYm9keVdpdGhvdXRUYWdzLFxuICAgICAgLi4uKCFpc0NoaWxkUmVzb3VyY2UgJiYgbG9jYXRpb24gJiYgIXByb3BlcnRpZXMubG9jYXRpb24gJiYgeyBsb2NhdGlvbiB9KSxcbiAgICAgIC8vIEFkZCB0YWdzIGF0IHRoZSB0b3AgbGV2ZWwgb25seSBpZiB0aGlzIHJlc291cmNlIHR5cGUgc3VwcG9ydHMgdGFnc1xuICAgICAgLy8gU29tZSByZXNvdXJjZXMgbGlrZSBQb2xpY3kgRGVmaW5pdGlvbnMgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgICAuLi4odGhpcy5zdXBwb3J0c1RhZ3MoKSAmJlxuICAgICAgICB0YWdzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKHRhZ3MpLmxlbmd0aCA+IDAgJiYgeyB0YWdzIH0pLFxuICAgICAgLy8gQWRkIGRlcGVuZHNfb24gZm9yIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBhbmQgcGFyZW50IHJlc291cmNlXG4gICAgICAuLi4oY29tYmluZWREZXBlbmRzT24ubGVuZ3RoID4gMCAmJiB7IGRlcGVuZHNPbjogY29tYmluZWREZXBlbmRzT24gfSksXG4gICAgfTtcblxuICAgIC8vIEFsbG93IGNoaWxkIGNsYXNzZXMgdG8gY3VzdG9taXplIHRoZSBjb25maWd1cmF0aW9uXG4gICAgY29uZmlnID0gdGhpcy5jdXN0b21pemVSZXNvdXJjZUNvbmZpZyhjb25maWcpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBBWkFQSSByZXNvdXJjZSB1c2luZyB0aGUgZ2VuZXJhdGVkIHByb3ZpZGVyIGNsYXNzXG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZSh0aGlzLCBcInJlc291cmNlXCIsIGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBBWkFQSSBkYXRhIHNvdXJjZSBmb3IgcmVhZGluZyBleGlzdGluZyByZXNvdXJjZXNcbiAgICpcbiAgICogQHBhcmFtIHJlc291cmNlSWQgLSBUaGUgZnVsbCByZXNvdXJjZSBJRFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBUZXJyYWZvcm0gZGF0YSBzb3VyY2VcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVBemFwaURhdGFTb3VyY2UoXG4gICAgcmVzb3VyY2VJZDogc3RyaW5nLFxuICApOiBjZGt0Zi5UZXJyYWZvcm1EYXRhU291cmNlIHtcbiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IGNka3RmLlRlcnJhZm9ybURhdGFTb3VyY2UodGhpcywgXCJkYXRhXCIsIHtcbiAgICAgIHRlcnJhZm9ybVJlc291cmNlVHlwZTogXCJhemFwaV9yZXNvdXJjZVwiLFxuICAgICAgdGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGE6IHtcbiAgICAgICAgcHJvdmlkZXJOYW1lOiBcImF6YXBpXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGF0YVNvdXJjZS5hZGRPdmVycmlkZShcInR5cGVcIiwgdGhpcy5fcmVzb3VyY2VUeXBlKTtcbiAgICBkYXRhU291cmNlLmFkZE92ZXJyaWRlKFwicmVzb3VyY2VfaWRcIiwgcmVzb3VyY2VJZCk7XG5cbiAgICByZXR1cm4gZGF0YVNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByZXNvdXJjZSB3aXRoIG5ldyBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIG5ldyBwcm9wZXJ0aWVzIHRvIGFwcGx5XG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlQXphcGlSZXNvdXJjZShwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGVycmFmb3JtUmVzb3VyY2UpIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJib2R5XCIsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmdWxsIHJlc291cmNlIElEXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZT8uZnFuIHx8IHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdW5kZXJseWluZyBUZXJyYWZvcm0gcmVzb3VyY2UgZm9yIHVzZSBpbiBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uc1xuICAgKiBUaGlzIGFsbG93cyBleHBsaWNpdCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQgYmV0d2VlbiByZXNvdXJjZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2UoKTogY2RrdGYuVGVycmFmb3JtUmVzb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlc291cmNlIGFzIGEgVGVycmFmb3JtIG91dHB1dCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBvdXRwdXQoKTogY2RrdGYuVGVycmFmb3JtT3V0cHV0IHtcbiAgICByZXR1cm4gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm91dHB1dFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy50ZXJyYWZvcm1SZXNvdXJjZT8uZnFuLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gYWNjZXNzIHJvbGUgYXNzaWdubWVudCBmb3IgYSBzcGVjaWZpZWQgQXp1cmUgQUQgb2JqZWN0XG4gICAqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIGNyZWF0ZXMgcm9sZSBhc3NpZ25tZW50cyB1c2luZyBBWkFQSSBpbnN0ZWFkIG9mIEF6dXJlUk0gcHJvdmlkZXIuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3RJZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgQXp1cmUgQUQgb2JqZWN0XG4gICAqIEBwYXJhbSByb2xlRGVmaW5pdGlvbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgQXp1cmUgUkJBQyByb2xlIHRvIGJlIGFzc2lnbmVkXG4gICAqL1xuICBwdWJsaWMgYWRkQWNjZXNzKG9iamVjdElkOiBzdHJpbmcsIHJvbGVEZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IEF6YXBpUm9sZUFzc2lnbm1lbnQodGhpcywgYHJiYWMtJHtvYmplY3RJZH0tJHtyb2xlRGVmaW5pdGlvbk5hbWV9YCwge1xuICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxuICAgICAgcm9sZURlZmluaXRpb25OYW1lOiByb2xlRGVmaW5pdGlvbk5hbWUsXG4gICAgICBzY29wZTogdGhpcy5yZXNvdXJjZUlkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB0YWcgdG8gdGhpcyByZXNvdXJjZS4gVGhlIHRhZyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBBenVyZSByZXNvdXJjZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgcHJvcGVyIGltbXV0YWJpbGl0eSBieSBzdG9yaW5nIHRhZ3Mgc2VwYXJhdGVseSBmcm9tIHByb3BzLlxuICAgKiBUYWdzIGFkZGVkIHZpYSB0aGlzIG1ldGhvZCBhcmUgY29tYmluZWQgd2l0aCB0YWdzIGZyb20gcHJvcHMgYW5kIGluY2x1ZGVkIGluXG4gICAqIHRoZSBkZXBsb3llZCBBenVyZSByZXNvdXJjZS5cbiAgICpcbiAgICogKipJbXBvcnRhbnQ6KiogSW4gQ0RLIGZvciBUZXJyYWZvcm0sIHRhZ3Mgc2hvdWxkIGlkZWFsbHkgYmUgc2V0IGR1cmluZyByZXNvdXJjZVxuICAgKiBjb25zdHJ1Y3Rpb24gdmlhIHByb3BzLiBXaGlsZSB0aGlzIG1ldGhvZCBhbGxvd3MgYWRkaW5nIHRhZ3MgYWZ0ZXIgY29uc3RydWN0aW9uLFxuICAgKiB0aG9zZSB0YWdzIGFyZSBvbmx5IGluY2x1ZGVkIGlmIGFkZGVkIGJlZm9yZSB0aGUgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gaXNcbiAgICogc3ludGhlc2l6ZWQuIEZvciBiZXN0IHJlc3VsdHMsIGFkZCBhbGwgdGFncyB2aWEgcHJvcHMgb3IgY2FsbCBhZGRUYWcoKSBpbiB0aGVcbiAgICogc2FtZSBzY29wZSB3aGVyZSB0aGUgcmVzb3VyY2UgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSB0YWcga2V5XG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0YWcgdmFsdWVcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVzb3VyY2UgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IHRhZ3NcbiAgICovXG4gIHB1YmxpYyBhZGRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VwcG9ydHNUYWdzKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBhZGQgdGFncyB0byAke3RoaXMucmVzb3VyY2VUeXBlKCl9OiB0aGlzIHJlc291cmNlIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0YWdzYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3RhZ3Nba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCB0YWdzIG9uIHRoaXMgcmVzb3VyY2UgKHJlYWRvbmx5IHZpZXcpXG4gICAqXG4gICAqIFRoaXMgZ2V0dGVyIHByb3ZpZGVzIGNvbnZlbmllbnQgYWNjZXNzIHRvIGFsbCB0YWdzIGluY2x1ZGluZyB0aG9zZSBmcm9tIHByb3BzXG4gICAqIGFuZCB0aG9zZSBhZGRlZCBkeW5hbWljYWxseSB2aWEgYWRkVGFnKCkuIFJldHVybnMgYSBjb3B5IHRvIG1haW50YWluIGltbXV0YWJpbGl0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFncygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4geyAuLi50aGlzLl90YWdzIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvdGVjdGVkIG1ldGhvZCB0byByZXRyaWV2ZSBhbGwgdGFncyBmb3IgdXNlIGluIGNyZWF0ZVJlc291cmNlQm9keSBpbXBsZW1lbnRhdGlvbnNcbiAgICpcbiAgICogU3ViY2xhc3NlcyBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIHdoZW4gY3JlYXRpbmcgcmVzb3VyY2UgYm9kaWVzIHRvIGVuc3VyZVxuICAgKiBhbGwgdGFncyAoZnJvbSBwcm9wcyBhbmQgYWRkVGFnKCkpIGFyZSBpbmNsdWRlZCBpbiB0aGUgQXp1cmUgcmVzb3VyY2UuXG4gICAqIFVzZXMgYSBub24tZ2V0dGVyIG5hbWUgdG8gYXZvaWQgSlNJSSBjb25mbGljdHMgd2l0aCB0aGUgdGFncyBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRhZ3NcbiAgICovXG4gIHByb3RlY3RlZCBhbGxUYWdzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX3RhZ3MgfTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSEVMUEVSIENMQVNTRVMgQU5EIElOVEVSRkFDRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgQVpBUEkgcm9sZSBhc3NpZ25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXphcGlSb2xlQXNzaWdubWVudFByb3BzIHtcbiAgcmVhZG9ubHkgb2JqZWN0SWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcm9sZURlZmluaXRpb25OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3BlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVpBUEktYmFzZWQgcm9sZSBhc3NpZ25tZW50IGNvbnN0cnVjdFxuICovXG5leHBvcnQgY2xhc3MgQXphcGlSb2xlQXNzaWdubWVudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBemFwaVJvbGVBc3NpZ25tZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIHByaW5jaXBhbElkOiBwcm9wcy5vYmplY3RJZCxcbiAgICAgIHJvbGVEZWZpbml0aW9uSWQ6IGBbc3Vic2NyaXB0aW9uUmVzb3VyY2VJZCgnTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcm9sZURlZmluaXRpb25zJywgcm9sZURlZmluaXRpb25JZCgnJHtwcm9wcy5yb2xlRGVmaW5pdGlvbk5hbWV9JykpXWAsXG4gICAgICBzY29wZTogcHJvcHMuc2NvcGUsXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbmZpZzogUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICB0eXBlOiBcIk1pY3Jvc29mdC5BdXRob3JpemF0aW9uL3JvbGVBc3NpZ25tZW50c1wiLFxuICAgICAgbmFtZTogXCJbZ3VpZCgpXVwiLFxuICAgICAgcGFyZW50SWQ6IHByb3BzLnNjb3BlLFxuICAgICAgYm9keTogcHJvcGVydGllcyxcbiAgICB9O1xuICAgIG5ldyBSZXNvdXJjZSh0aGlzLCBcInJvbGUtYXNzaWdubWVudFwiLCBjb25maWcpO1xuICB9XG59XG4iXX0=
|
|
792
|
+
AzapiRoleAssignment[_b] = { fqn: "@microsoft/terraform-cdk-constructs.AzapiRoleAssignment", version: "2.2.0" };
|
|
793
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXphcGktcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS1henVyZS9saWIvYXphcGkvYXphcGktcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILCtCQUErQjtBQUMvQiwyQ0FBdUM7QUFDdkMseUZBQW1GO0FBQ25GLHlEQUFzRTtBQUN0RSwyRUFBc0U7QUFDdEUseUVBQW9FO0FBT3BFLGdGQUEyRTtBQTRMM0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILE1BQXNCLGFBQWMsU0FBUSxzQkFBUztJQUNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ08sTUFBTSxDQUFDLGVBQWUsQ0FDOUIsWUFBb0IsRUFDcEIsUUFBeUI7UUFFekIsdUNBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUE2QkQ7Ozs7O09BS0c7SUFDSCxJQUFXLEVBQUU7UUFDWCxPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hELENBQUM7SUEyREQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBNEIsRUFBRTtRQUN0RSxnQ0FBZ0M7UUFDaEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQWxCbkIsdURBQXVEO1FBQ3BDLDJCQUFzQixHQUFnQixFQUFFLENBQUM7UUFDekMsMkJBQXNCLEdBQWdCLEVBQUUsQ0FBQztRQUN6QyxnQ0FBMkIsR0FBZ0IsRUFBRSxDQUFDO1FBaUIvRCxrRUFBa0U7UUFDbEUsa0VBQWtFO1FBQ2xFLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFX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QUFNO1lBQ3hJLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztTQUNuQixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQW1CO1lBQzdCLElBQUksRUFBRSx5Q0FBeUM7WUFDL0MsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ3JCLElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUM7UUFDRixJQUFJLG1CQUFRLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7O0FBakJILGtEQWtCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXphcGlSZXNvdXJjZSAtIEEgdW5pZmllZCBmcmFtZXdvcmsgZm9yIHZlcnNpb24tYXdhcmUgQXp1cmUgcmVzb3VyY2UgbWFuYWdlbWVudFxuICpcbiAqIFRoaXMgYWJzdHJhY3QgYmFzZSBjbGFzcyBwcm92aWRlcyBhIHNlbGYtY29udGFpbmVkIHVuaWZpZWQgZnJhbWV3b3JrIGFwcHJvYWNoXG4gKiBmb3IgQXp1cmUgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoIGF1dG9tYXRpYyB2ZXJzaW9uIG1hbmFnZW1lbnQsIHNjaGVtYS1kcml2ZW5cbiAqIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uLCBhbmQgbWlncmF0aW9uIGFuYWx5c2lzIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBLZXkgRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gU3VwcG9ydCBmb3IgZXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHlcbiAqIC0gU2NoZW1hLWRyaXZlbiBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbiBiZXR3ZWVuIHZlcnNpb25zXG4gKiAtIE1pZ3JhdGlvbiBhbmFseXNpcyBhbmQgZGVwcmVjYXRpb24gd2FybmluZ3NcbiAqIC0gQnVpbHQtaW4gcm9sZSBhc3NpZ25tZW50IGFuZCBkaWFnbm9zdGljIHNldHRpbmdzIHN1cHBvcnRcbiAqIC0gSlNJSS1jb21wbGlhbnQgZGVzaWduIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKlxuICogVGhpcyBjbGFzcyByZXBsYWNlcyB0aGUgcHJldmlvdXMgZHVhbC1jbGFzcyBhcHByb2FjaCAoQXphcGlSZXNvdXJjZSArIEF6YXBpUmVzb3VyY2UpXG4gKiB3aXRoIGEgc2luZ2xlLCBzZWxmLWNvbnRhaW5lZCBpbXBsZW1lbnRhdGlvbiB0aGF0IGhhbmRsZXMgYWxsIHJlc291cmNlIG1hbmFnZW1lbnQgbmVlZHMuXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdG4gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRGF0YUF6YXBpQ2xpZW50Q29uZmlnIH0gZnJvbSBcIi4vcHJvdmlkZXJzLWF6YXBpL2RhdGEtYXphcGktY2xpZW50LWNvbmZpZ1wiO1xuaW1wb3J0IHsgUmVzb3VyY2UsIFJlc291cmNlQ29uZmlnIH0gZnJvbSBcIi4vcHJvdmlkZXJzLWF6YXBpL3Jlc291cmNlXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVNjaGVtYVZhbGlkYXRvciB9IGZyb20gXCIuL3Jlc291cmNlLXNjaGVtYS12YWxpZGF0b3JcIjtcbmltcG9ydCB7IFJlc291cmNlVmVyc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi9yZXNvdXJjZS12ZXJzaW9uLW1hbmFnZXJcIjtcblxuLy8gVHlwZS1vbmx5IGltcG9ydHMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG5pbXBvcnQgdHlwZSB7IEFjdGlvbkdyb3VwUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXp1cmUtYWN0aW9uZ3JvdXAvbGliL2FjdGlvbi1ncm91cFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUxvZ0FsZXJ0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXp1cmUtYWN0aXZpdHlsb2dhbGVydC9saWIvYWN0aXZpdHktbG9nLWFsZXJ0XCI7XG5pbXBvcnQgdHlwZSB7IERpYWdub3N0aWNTZXR0aW5nc1Byb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2F6dXJlLWRpYWdub3N0aWNzZXR0aW5ncy9saWIvZGlhZ25vc3RpYy1zZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNBbGVydFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2F6dXJlLW1ldHJpY2FsZXJ0L2xpYi9tZXRyaWMtYWxlcnRcIjtcbmltcG9ydCB7IEFwaVZlcnNpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL3ZlcnNpb24tbWFuYWdlci9hcGktdmVyc2lvbi1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBBcGlTY2hlbWEsXG4gIFZlcnNpb25Db25maWcsXG4gIFZhbGlkYXRpb25SZXN1bHQsXG4gIE1pZ3JhdGlvbkFuYWx5c2lzLFxufSBmcm9tIFwiLi4vdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUmV0ZW50aW9uIHBvbGljeSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0ZW50aW9uUG9saWN5Q29uZmlnIHtcbiAgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGF5czogbnVtYmVyO1xufVxuXG4vKipcbiAqIExvZyBjb25maWd1cmF0aW9uIGZvciBkaWFnbm9zdGljIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc3RpY0xvZ0NvbmZpZyB7XG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xuICByZWFkb25seSBjYXRlZ29yeUdyb3VwPzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICByZWFkb25seSByZXRlbnRpb25Qb2xpY3k/OiBSZXRlbnRpb25Qb2xpY3lDb25maWc7XG59XG5cbi8qKlxuICogTWV0cmljIGNvbmZpZ3VyYXRpb24gZm9yIGRpYWdub3N0aWMgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaWFnbm9zdGljTWV0cmljQ29uZmlnIHtcbiAgLyoqIE1ldHJpYyBjYXRlZ29yeSBuYW1lICh1c2VkIGluIG5ld2VyIEFQSSB2ZXJzaW9ucykgKi9cbiAgcmVhZG9ubHkgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIC8qKiBUaW1lIGdyYWluIGZvciBtZXRyaWNzIGluIElTTyA4NjAxIGR1cmF0aW9uIGZvcm1hdCAodXNlZCBpbiBBUEkgdmVyc2lvbiAyMDE2LTA5LTAxLCBlLmcuLCBcIlBUMU1cIikgKi9cbiAgcmVhZG9ubHkgdGltZUdyYWluPzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICByZWFkb25seSByZXRlbnRpb25Qb2xpY3k/OiBSZXRlbnRpb25Qb2xpY3lDb25maWc7XG59XG5cbi8qKlxuICogTW9uaXRvcmluZyBjb25maWd1cmF0aW9uIGZvciBBenVyZSByZXNvdXJjZXNcbiAqXG4gKiBQcm92aWRlcyBpbnRlZ3JhdGVkIG1vbml0b3JpbmcgY2FwYWJpbGl0aWVzIGluY2x1ZGluZyBkaWFnbm9zdGljIHNldHRpbmdzLFxuICogbWV0cmljIGFsZXJ0cywgYW5kIGFjdGl2aXR5IGxvZyBhbGVydHMuIEFsbCBtb25pdG9yaW5nIGlzIG9wdGlvbmFsIGFuZFxuICogZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yaW5nQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgbW9uaXRvcmluZyBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpYWdub3N0aWMgc2V0dGluZ3MgY29uZmlndXJhdGlvblxuICAgKiBVc2VzIHRoZSBmdWxsIERpYWdub3N0aWNTZXR0aW5ncyBjb25zdHJ1Y3QgZm9yIGNvbnNpc3RlbmN5XG4gICAqL1xuICByZWFkb25seSBkaWFnbm9zdGljU2V0dGluZ3M/OiBEaWFnbm9zdGljU2V0dGluZ3NQcm9wcztcblxuICAvKipcbiAgICogQWN0aW9uIGdyb3VwcyB0byBjcmVhdGUgZm9yIHRoaXMgcmVzb3VyY2VcbiAgICogQ3JlYXRlcyBuZXcgQWN0aW9uR3JvdXAgaW5zdGFuY2VzIGFzIGNoaWxkIGNvbnN0cnVjdHNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbkdyb3Vwcz86IEFjdGlvbkdyb3VwUHJvcHNbXTtcblxuICAvKipcbiAgICogTWV0cmljIGFsZXJ0cyBjb25maWd1cmF0aW9uXG4gICAqIENyZWF0ZXMgTWV0cmljQWxlcnQgaW5zdGFuY2VzIHNjb3BlZCB0byB0aGlzIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNBbGVydHM/OiBNZXRyaWNBbGVydFByb3BzW107XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IGxvZyBhbGVydHMgY29uZmlndXJhdGlvblxuICAgKiBDcmVhdGVzIEFjdGl2aXR5TG9nQWxlcnQgaW5zdGFuY2VzIGZvciB0aGlzIHJlc291cmNlJ3Mgb3BlcmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZpdHlMb2dBbGVydHM/OiBBY3Rpdml0eUxvZ0FsZXJ0UHJvcHNbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB2ZXJzaW9uZWQgQXp1cmUgcmVzb3VyY2VzXG4gKlxuICogQ29tYmluZXMgYmFzZSByZXNvdXJjZSBwcm9wZXJ0aWVzIHdpdGggdmVyc2lvbiBtYW5hZ2VtZW50IGNhcGFiaWxpdGllc1xuICogYW5kIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHVuaWZpZWQgZnJhbWV3b3JrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF6YXBpUmVzb3VyY2VQcm9wcyBleHRlbmRzIGNka3RuLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gd2hlcmUgdGhlIHJlc291cmNlIHNob3VsZCBiZSBjcmVhdGVkXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIExvY2F0aW9uIGhhbmRsaW5nIHZhcmllcyBieSByZXNvdXJjZSB0eXBlOlxuICAgKiAtICoqVG9wLWxldmVsIHJlc291cmNlcyoqOiBNb3N0IHJlcXVpcmUgYW4gZXhwbGljaXQgbG9jYXRpb24gKGUuZy4sIFwiZWFzdHVzXCIsIFwid2VzdHVzXCIpXG4gICAqIC0gKipHbG9iYWwgcmVzb3VyY2VzKio6IFNvbWUgdXNlIFwiZ2xvYmFsXCIgYXMgbG9jYXRpb24gKGUuZy4sIFByaXZhdGUgRE5TIFpvbmVzKVxuICAgKiAtICoqQ2hpbGQgcmVzb3VyY2VzKio6IEluaGVyaXQgbG9jYXRpb24gZnJvbSBwYXJlbnQgYW5kIHNob3VsZCBOT1Qgc2V0IHRoaXMgcHJvcGVydHlcbiAgICpcbiAgICogRWFjaCByZXNvdXJjZSB0eXBlIG1heSBwcm92aWRlIGl0cyBvd24gZGVmYXVsdCB0aHJvdWdoIHRoZSBgcmVzb2x2ZUxvY2F0aW9uKClgIG1ldGhvZC5cbiAgICogSWYgbm8gbG9jYXRpb24gaXMgc3BlY2lmaWVkIGFuZCBubyBkZWZhdWx0IGV4aXN0cywgcmVzb3VyY2UgY3JlYXRpb24gbWF5IGZhaWwuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEV4cGxpY2l0IGxvY2F0aW9uIGZvciBtb3N0IHJlc291cmNlc1xuICAgKiBsb2NhdGlvbjogXCJlYXN0dXNcIlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBHbG9iYWwgcmVzb3VyY2UgKFByaXZhdGUgRE5TIFpvbmUpXG4gICAqIGxvY2F0aW9uOiBcImdsb2JhbFwiXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENoaWxkIHJlc291cmNlIChTdWJuZXQpIC0gZG8gbm90IHNldCBsb2NhdGlvblxuICAgKiAvLyBsb2NhdGlvbjogdW5kZWZpbmVkIChpbmhlcml0ZWQgZnJvbSBwYXJlbnQgVmlydHVhbCBOZXR3b3JrKVxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFZhcmllcyBieSByZXNvdXJjZSB0eXBlIC0gc2VlIHNwZWNpZmljIHJlc291cmNlIGRvY3VtZW50YXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYWdzIHRvIGFwcGx5IHRvIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBBUEkgdmVyc2lvbiB0byB1c2UgZm9yIHRoaXMgcmVzb3VyY2VcbiAgICpcbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGxhdGVzdCBhY3RpdmUgdmVyc2lvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZWQuXG4gICAqIFVzZSB0aGlzIGZvciB2ZXJzaW9uIHBpbm5pbmcgd2hlbiBzdGFiaWxpdHkgaXMgcmVxdWlyZWQgb3ZlciBsYXRlc3QgZmVhdHVyZXMuXG4gICAqXG4gICAqIEBleGFtcGxlIFwiMjAyNC0xMS0wMVwiXG4gICAqIEBkZWZhdWx0VmFsdWUgTGF0ZXN0IGFjdGl2ZSB2ZXJzaW9uIGZyb20gQXBpVmVyc2lvbk1hbmFnZXJcbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIG1pZ3JhdGlvbiBhbmFseXNpcyB3YXJuaW5nc1xuICAgKlxuICAgKiBXaGVuIHRydWUsIHRoZSBmcmFtZXdvcmsgd2lsbCBhbmFseXplIHRoZSBjdXJyZW50IHZlcnNpb24gZm9yIGRlcHJlY2F0aW9uXG4gICAqIHN0YXR1cyBhbmQgcHJvdmlkZSBtaWdyYXRpb24gcmVjb21tZW5kYXRpb25zIGluIHRoZSBkZXBsb3ltZW50IG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVNaWdyYXRpb25BbmFseXNpcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmFsaWRhdGUgcHJvcGVydGllcyBhZ2FpbnN0IHRoZSBzY2hlbWFcbiAgICpcbiAgICogV2hlbiB0cnVlLCBhbGwgcHJvcGVydGllcyB3aWxsIGJlIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBBUEkgc2NoZW1hIGJlZm9yZVxuICAgKiByZXNvdXJjZSBjcmVhdGlvbi4gVmFsaWRhdGlvbiBlcnJvcnMgd2lsbCBjYXVzZSBkZXBsb3ltZW50IGZhaWx1cmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVZhbGlkYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFwcGx5IHByb3BlcnR5IHRyYW5zZm9ybWF0aW9ucyBhdXRvbWF0aWNhbGx5XG4gICAqXG4gICAqIFdoZW4gdHJ1ZSwgcHJvcGVydGllcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgdHJhbnNmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZVxuICAgKiB0YXJnZXQgc2NoZW1hJ3MgdHJhbnNmb3JtYXRpb24gcnVsZXMuIFRoaXMgZW5hYmxlcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVRyYW5zZm9ybWF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTW9uaXRvcmluZyBjb25maWd1cmF0aW9uIGZvciB0aGlzIHJlc291cmNlXG4gICAqXG4gICAqIEVuYWJsZXMgaW50ZWdyYXRlZCBtb25pdG9yaW5nIHdpdGggZGlhZ25vc3RpYyBzZXR0aW5ncywgbWV0cmljIGFsZXJ0cyxcbiAgICogYW5kIGFjdGl2aXR5IGxvZyBhbGVydHMuIEFsbCBtb25pdG9yaW5nIGlzIG9wdGlvbmFsIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBtb25pdG9yaW5nOiB7XG4gICAqICAgZW5hYmxlZDogdHJ1ZSxcbiAgICogICBkaWFnbm9zdGljU2V0dGluZ3M6IHtcbiAgICogICAgIHdvcmtzcGFjZUlkOiBsb2dBbmFseXRpY3MuaWQsXG4gICAqICAgICBtZXRyaWNzOiBbJ0FsbE1ldHJpY3MnXSxcbiAgICogICAgIGxvZ3M6IFsnQXVkaXRMb2dzJ11cbiAgICogICB9LFxuICAgKiAgIG1ldHJpY0FsZXJ0czogW3tcbiAgICogICAgIG5hbWU6ICdoaWdoLWNwdS1hbGVydCcsXG4gICAqICAgICBzZXZlcml0eTogMixcbiAgICogICAgIHNjb3BlczogW10sIC8vIEF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoaXMgcmVzb3VyY2VcbiAgICogICAgIGNyaXRlcmlhOiB7IC4uLiB9LFxuICAgKiAgICAgYWN0aW9uczogW3sgYWN0aW9uR3JvdXBJZDogYWN0aW9uR3JvdXAuaWQgfV1cbiAgICogICB9XVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBtb25pdG9yaW5nPzogTW9uaXRvcmluZ0NvbmZpZztcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB2ZXJzaW9uLWF3YXJlIEF6dXJlIHJlc291cmNlIG1hbmFnZW1lbnRcbiAqXG4gKiBBemFwaVJlc291cmNlIHByb3ZpZGVzIGEgdW5pZmllZCBmcmFtZXdvcmsgZm9yIGNyZWF0aW5nIEF6dXJlIHJlc291cmNlc1xuICogd2l0aCBhdXRvbWF0aWMgdmVyc2lvbiBtYW5hZ2VtZW50LCBzY2hlbWEgdmFsaWRhdGlvbiwgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24sXG4gKiBhbmQgbWlncmF0aW9uIGFuYWx5c2lzLiBJdCBleHRlbmRzIHRoZSBleGlzdGluZyBBemFwaVJlc291cmNlIGNsYXNzIHdoaWxlXG4gKiBtYWludGFpbmluZyBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBjb3JlIGZyYW1ld29yayB0aGF0IGVuYWJsZXM6XG4gKiAtIEF1dG9tYXRpYyByZXNvbHV0aW9uIG9mIHRoZSBsYXRlc3QgQVBJIHZlcnNpb24gd2hlbiBub25lIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIGVudmlyb25tZW50cyByZXF1aXJpbmcgc3RhYmlsaXR5XG4gKiAtIFNjaGVtYS1kcml2ZW4gcHJvcGVydHkgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gTWlncmF0aW9uIGFuYWx5c2lzIHdpdGggYnJlYWtpbmcgY2hhbmdlIGRldGVjdGlvblxuICogLSBEZXByZWNhdGlvbiB3YXJuaW5ncyBhbmQgdXBncmFkZSByZWNvbW1lbmRhdGlvbnNcbiAqXG4gKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBhYnN0cmFjdCBtZXRob2RzIHRvIHByb3ZpZGUgcmVzb3VyY2Utc3BlY2lmaWNcbiAqIGNvbmZpZ3VyYXRpb24gd2hpbGUgdGhlIGZyYW1ld29yayBoYW5kbGVzIGFsbCB2ZXJzaW9uIG1hbmFnZW1lbnQgY29tcGxleGl0eS5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZSB3aXRoIGF1dG9tYXRpYyB2ZXJzaW9uIHJlc29sdXRpb246XG4gKiBjbGFzcyBNeVJlc291cmNlIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gKiAgIHByb3RlY3RlZCBnZXREZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICogICAgIHJldHVybiBcIjIwMjQtMTEtMDFcIjsgLy8gZmFsbGJhY2sgaWYgbm8gdmVyc2lvbnMgcmVnaXN0ZXJlZFxuICogICB9XG4gKlxuICogICBwcm90ZWN0ZWQgZ2V0UmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gKiAgICAgcmV0dXJuIFwiTWljcm9zb2Z0LlJlc291cmNlcy9yZXNvdXJjZUdyb3Vwc1wiO1xuICogICB9XG4gKlxuICogICBwcm90ZWN0ZWQgZ2V0QXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gKiAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICogICB9XG4gKlxuICogICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICogICAgIHJldHVybiB7IGxvY2F0aW9uOiBwcm9wcy5sb2NhdGlvbiwgdGFnczogcHJvcHMudGFncyB8fCB7fSB9O1xuICogICB9XG4gKiB9XG4gKlxuICogQGV4YW1wbGUgVXNhZ2Ugd2l0aCBleHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmc6XG4gKiBuZXcgTXlSZXNvdXJjZSh0aGlzLCBcInJlc291cmNlXCIsIHtcbiAqICAgbmFtZTogXCJteS1yZXNvdXJjZVwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgYXBpVmVyc2lvbjogXCIyMDI0LTAxLTAxXCIgLy8gUGluIHRvIHNwZWNpZmljIHZlcnNpb25cbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBemFwaVJlc291cmNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFN0YXRpYyBoZWxwZXIgZm9yIGNoaWxkIGNsYXNzZXMgdG8gcmVnaXN0ZXIgdGhlaXIgc2NoZW1hcyBpbiBzdGF0aWMgaW5pdGlhbGl6ZXJzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgaW4gYSBzdGF0aWMgaW5pdGlhbGl6ZXIgYmxvY2sgb2YgZWFjaCBjaGlsZCBjbGFzc1xuICAgKiB0byByZWdpc3RlciBhbGwgc3VwcG9ydGVkIEFQSSB2ZXJzaW9ucyBhbmQgdGhlaXIgc2NoZW1hcyB3aXRoIHRoZSBBcGlWZXJzaW9uTWFuYWdlci5cbiAgICogVGhlIHN0YXRpYyBibG9jayBydW5zIG9uY2Ugd2hlbiB0aGUgY2xhc3MgaXMgZmlyc3QgbG9hZGVkLCBlbnN1cmluZyBzY2hlbWFzIGFyZVxuICAgKiByZWdpc3RlcmVkIGJlZm9yZSBhbnkgaW5zdGFuY2VzIGFyZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2VUeXBlIC0gVGhlIEF6dXJlIHJlc291cmNlIHR5cGUgKGUuZy4sIFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzXCIpXG4gICAqIEBwYXJhbSB2ZXJzaW9ucyAtIEFycmF5IG9mIHZlcnNpb24gY29uZmlndXJhdGlvbnMgY29udGFpbmluZyBzY2hlbWFzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHN0YXRpYyB7XG4gICAqICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAqICAgICBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrc1wiLFxuICAgKiAgICAgQUxMX1ZJUlRVQUxfTkVUV09SS19WRVJTSU9OU1xuICAgKiAgICk7XG4gICAqIH1cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgcmVnaXN0ZXJTY2hlbWFzKFxuICAgIHJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgIHZlcnNpb25zOiBWZXJzaW9uQ29uZmlnW10sXG4gICk6IHZvaWQge1xuICAgIEFwaVZlcnNpb25NYW5hZ2VyLmluc3RhbmNlKCkucmVnaXN0ZXJSZXNvdXJjZVR5cGUocmVzb3VyY2VUeXBlLCB2ZXJzaW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEF6dXJlIHJlc291cmNlIHR5cGUgKGUuZy4sIFwiTWljcm9zb2Z0LlJlc291cmNlcy9yZXNvdXJjZUdyb3Vwc1wiKVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfcmVzb3VyY2VUeXBlITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIHZlcnNpb24gdG8gdXNlIGZvciB0aGlzIHJlc291cmNlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBBWkFQSSBUZXJyYWZvcm0gcmVzb3VyY2VcbiAgICovXG4gIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZSE6IGNka3RuLlRlcnJhZm9ybVJlc291cmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgcmVzb3VyY2UgKG9wdGlvbmFsIC0gbm90IGFsbCByZXNvdXJjZXMgaGF2ZSBhIGxvY2F0aW9uKVxuICAgKiBDaGlsZCByZXNvdXJjZXMgdHlwaWNhbGx5IGluaGVyaXQgbG9jYXRpb24gZnJvbSB0aGVpciBwYXJlbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEF6dXJlIHJlc291cmNlIElEXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIHVuZGVybHlpbmcgVGVycmFmb3JtIHJlc291cmNlLlxuICAgKiBDaGlsZCBjbGFzc2VzIG5vIGxvbmdlciBuZWVkIHRvIGltcGxlbWVudCB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LmlkfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIEFQSSB2ZXJzaW9uIGJlaW5nIHVzZWQgZm9yIHRoaXMgcmVzb3VyY2UgaW5zdGFuY2VcbiAgICpcbiAgICogVGhpcyBpcyB0aGUgYWN0dWFsIHZlcnNpb24gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBBenVyZSBBUEkgY2FsbCxcbiAgICogZWl0aGVyIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHByb3BzIG9yIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZWQgdG9cbiAgICogdGhlIGxhdGVzdCBhY3RpdmUgdmVyc2lvbi5cbiAgICovXG4gIHB1YmxpYyByZXNvbHZlZEFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqXG4gICAqIENvbnRhaW5zIHRoZSBjb21wbGV0ZSBzY2hlbWEgZGVmaW5pdGlvbiBpbmNsdWRpbmcgcHJvcGVydGllcywgdmFsaWRhdGlvblxuICAgKiBydWxlcywgYW5kIHRyYW5zZm9ybWF0aW9uIG1hcHBpbmdzIGZvciB0aGUgcmVzb2x2ZWQgQVBJIHZlcnNpb24uXG4gICAqL1xuICBwdWJsaWMgc2NoZW1hITogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKlxuICAgKiBDb250YWlucyBsaWZlY3ljbGUgaW5mb3JtYXRpb24sIGJyZWFraW5nIGNoYW5nZXMsIGFuZCBtaWdyYXRpb24gbWV0YWRhdGFcbiAgICogZm9yIHRoZSByZXNvbHZlZCBBUEkgdmVyc2lvbi5cbiAgICovXG4gIHB1YmxpYyB2ZXJzaW9uQ29uZmlnITogVmVyc2lvbkNvbmZpZztcblxuICAvKipcbiAgICogVmFsaWRhdGlvbiByZXN1bHRzIGZvciB0aGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKlxuICAgKiBBdmFpbGFibGUgYWZ0ZXIgY29uc3RydWN0aW9uIGlmIHZhbGlkYXRpb24gaXMgZW5hYmxlZC4gQ29udGFpbnMgZGV0YWlsZWRcbiAgICogaW5mb3JtYXRpb24gYWJvdXQgYW55IHZhbGlkYXRpb24gZXJyb3JzIG9yIHdhcm5pbmdzLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRpb25SZXN1bHQ/OiBWYWxpZGF0aW9uUmVzdWx0O1xuXG4gIC8qKlxuICAgKiBNaWdyYXRpb24gYW5hbHlzaXMgcmVzdWx0c1xuICAgKlxuICAgKiBBdmFpbGFibGUgYWZ0ZXIgY29uc3RydWN0aW9uIGlmIG1pZ3JhdGlvbiBhbmFseXNpcyBpcyBlbmFibGVkIGFuZCBhXG4gICAqIHByZXZpb3VzIHZlcnNpb24gY2FuIGJlIGRldGVybWluZWQgZm9yIGNvbXBhcmlzb24uXG4gICAqL1xuICBwdWJsaWMgbWlncmF0aW9uQW5hbHlzaXM/OiBNaWdyYXRpb25BbmFseXNpcztcblxuICAvLyBGcmFtZXdvcmsgY29tcG9uZW50c1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcGlWZXJzaW9uTWFuYWdlcjogQXBpVmVyc2lvbk1hbmFnZXI7XG4gIHByaXZhdGUgX3ZlcnNpb25NYW5hZ2VyITogUmVzb3VyY2VWZXJzaW9uTWFuYWdlcjtcbiAgcHJpdmF0ZSBfc2NoZW1hVmFsaWRhdG9yITogUmVzb3VyY2VTY2hlbWFWYWxpZGF0b3I7XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG11dGFibGUgdGFncyBzdG9yYWdlIHNlcGFyYXRlIGZyb20gaW5wdXQgcHJvcHNcbiAgICogQ29tYmluZXMgcHJvcHMudGFncyB3aXRoIGR5bmFtaWNhbGx5IGFkZGVkIHRhZ3MgdmlhIGFkZFRhZygpXG4gICAqL1xuICBwcml2YXRlIF90YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8vIE1vbml0b3JpbmcgcmVzb3VyY2VzIChwcm90ZWN0ZWQgZm9yIHN1YmNsYXNzIGFjY2VzcylcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1vbml0b3JpbmdBY3Rpb25Hcm91cHM6IENvbnN0cnVjdFtdID0gW107XG4gIHByb3RlY3RlZCByZWFkb25seSBtb25pdG9yaW5nTWV0cmljQWxlcnRzOiBDb25zdHJ1Y3RbXSA9IFtdO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9uaXRvcmluZ0FjdGl2aXR5TG9nQWxlcnRzOiBDb25zdHJ1Y3RbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6YXBpUmVzb3VyY2UgaW5zdGFuY2VcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGhhbmRsZXMgYWxsIGZyYW1ld29yayBpbml0aWFsaXphdGlvbiBpbmNsdWRpbmcgdmVyc2lvbiByZXNvbHV0aW9uLFxuICAgKiBzY2hlbWEgbG9hZGluZywgcHJvcGVydHkgdmFsaWRhdGlvbiwgdHJhbnNmb3JtYXRpb24sIGFuZCBtaWdyYXRpb24gYW5hbHlzaXMuXG4gICAqIEl0IG1haW50YWlucyBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgQXphcGlSZXNvdXJjZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgcmVzb3VyY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMgPSB7fSkge1xuICAgIC8vIEluaXRpYWxpemUgdGhlIGJhc2UgQ29uc3RydWN0XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEluaXRpYWxpemUgYmFzaWMgcHJvcGVydGllcyB0aGF0IGRvbid0IHJlcXVpcmUgYWJzdHJhY3QgbWV0aG9kc1xuICAgIC8vIFVzZSBwcm9wcy5uYW1lIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGNvbnN0cnVjdCBJRFxuICAgIC8vIFRoaXMgc3VwcG9ydHMgYm90aCBleHBsaWNpdCBuYW1pbmcgYW5kIGF1dG9tYXRpYyBJRC1iYXNlZCBuYW1pbmdcbiAgICB0aGlzLm5hbWUgPSB0aGlzLnJlc29sdmVOYW1lKHByb3BzKTtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5yZXNvbHZlTG9jYXRpb24ocHJvcHMpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgQVBJIHZlcnNpb24gbWFuYWdlclxuICAgIHRoaXMuX2FwaVZlcnNpb25NYW5hZ2VyID0gQXBpVmVyc2lvbk1hbmFnZXIuaW5zdGFuY2UoKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGFncyBzdG9yYWdlIHdpdGggZW1wdHkgb2JqZWN0ICh3aWxsIGJlIHBvcHVsYXRlZCBpbiBpbml0aWFsaXplKCkpXG4gICAgdGhpcy5fdGFncyA9IHt9O1xuXG4gICAgLy8gTm90ZTogV2UgY2Fubm90IGluaXRpYWxpemUgdmVyc2lvbiBtYW5hZ2VyIGhlcmUgYmVjYXVzZSBpdCByZXF1aXJlc1xuICAgIC8vIGNhbGxpbmcgYWJzdHJhY3QgbWV0aG9kcyAocmVzb3VyY2VUeXBlKCkgYW5kIGRlZmF1bHRWZXJzaW9uKCkpXG4gICAgLy8gd2hpY2ggYXJlIG5vdCB5ZXQgYXZhaWxhYmxlIGluIHRoZSBiYXNlIGNvbnN0cnVjdG9yLlxuICAgIC8vIFZlcnNpb24gcmVzb2x1dGlvbiBpcyBkZWZlcnJlZCB0byBpbml0aWFsaXplKCkgbWV0aG9kLlxuXG4gICAgLy8gU3RlcCAxOiBSZXNvbHZlIHRoZSBBUEkgdmVyc2lvbiB0byB1c2UgKGRvZXNuJ3QgY2FsbCBhYnN0cmFjdCBtZXRob2RzIHlldClcbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgdGhhdCB3aWxsIGJlIHByb3Blcmx5IHNldCBpbiBpbml0aWFsaXplKClcbiAgICB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbiA9IHByb3BzLmFwaVZlcnNpb24gfHwgXCJcIjtcbiAgICB0aGlzLmFwaVZlcnNpb24gPSB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbjtcblxuICAgIC8vIFN0ZXAgMjogQ2FsbCBpbml0aWFsaXplKCkgdG8gY29tcGxldGUgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgY2hpbGQgY2xhc3MgaXMgcmVhZHlcbiAgICB0aGlzLmluaXRpYWxpemUocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RlY3RlZCBpbml0aWFsaXphdGlvbiBtZXRob2QgY2FsbGVkIGFmdGVyIHRoZSBjb25zdHJ1Y3RvciBjb21wbGV0ZXNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIGNvbnN0cnVjdG9yIHRvIHBlcmZvcm0gaW5pdGlhbGl6YXRpb25cbiAgICogdGhhdCByZXF1aXJlcyBjYWxsaW5nIGFic3RyYWN0IG1ldGhvZHMuIENoaWxkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kXG4gICAqIGlmIHRoZXkgbmVlZCB0byBleHRlbmQgaW5pdGlhbGl6YXRpb24gbG9naWMsIGJ1dCB0aGV5IE1VU1QgY2FsbCBzdXBlci5pbml0aWFsaXplKHByb3BzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHByb3RlY3RlZCBpbml0aWFsaXplKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiB2b2lkIHtcbiAgICAvLyBTdGVwIDI6IFNldCByZXF1aXJlZCBhYnN0cmFjdCBwcm9wZXJ0aWVzIChub3cgc2FmZSB0byBjYWxsIGFic3RyYWN0IG1ldGhvZHMpXG4gICAgdGhpcy5fcmVzb3VyY2VUeXBlID0gdGhpcy5yZXNvdXJjZVR5cGUoKTtcblxuICAgIC8vIFN0ZXAgMzogSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBtYW5hZ2VyIGFuZCByZXNvbHZlIHRoZSBBUEkgdmVyc2lvblxuICAgIHRoaXMuX3ZlcnNpb25NYW5hZ2VyID0gbmV3IFJlc291cmNlVmVyc2lvbk1hbmFnZXIoXG4gICAgICB0aGlzLl9yZXNvdXJjZVR5cGUsXG4gICAgICB0aGlzLmRlZmF1bHRWZXJzaW9uKCksXG4gICAgKTtcbiAgICB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbiA9IHRoaXMuX3ZlcnNpb25NYW5hZ2VyLnJlc29sdmVBcGlWZXJzaW9uKFxuICAgICAgcHJvcHMuYXBpVmVyc2lvbixcbiAgICApO1xuICAgIHRoaXMuYXBpVmVyc2lvbiA9IHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uO1xuXG4gICAgLy8gU3RlcCAzLjU6IEluaXRpYWxpemUgdGFncyBmcm9tIHByb3BzIG9ubHkgaWYgdGhpcyByZXNvdXJjZSB0eXBlIHN1cHBvcnRzIHRhZ3NcbiAgICAvLyBUaGlzIGNyZWF0ZXMgYSBtdXRhYmxlIGNvcHkgc2VwYXJhdGUgZnJvbSB0aGUgcmVhZG9ubHkgcHJvcHNcbiAgICAvLyBTb21lIHJlc291cmNlcyBsaWtlIFBvbGljeSBEZWZpbml0aW9ucyBkb24ndCBzdXBwb3J0IHRhZ3NcbiAgICBpZiAodGhpcy5zdXBwb3J0c1RhZ3MoKSkge1xuICAgICAgdGhpcy5fdGFncyA9IHsgLi4uKHByb3BzLnRhZ3MgfHwge30pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RhZ3MgPSB7fTtcbiAgICAgIC8vIFdhcm4gaWYgdXNlciB0cmllZCB0byBzZXQgdGFncyBvbiBhIHJlc291cmNlIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoZW1cbiAgICAgIGlmIChwcm9wcy50YWdzICYmIE9iamVjdC5rZXlzKHByb3BzLnRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBXYXJuaW5nOiBUYWdzIHdlcmUgc3BlY2lmaWVkIGZvciAke3RoaXMucmVzb3VyY2VUeXBlKCl9IGJ1dCB0aGlzIHJlc291cmNlIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0YWdzLiBUYWdzIHdpbGwgYmUgaWdub3JlZC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN0ZXAgNDogTG9hZCB0aGUgc2NoZW1hIGFuZCB2ZXJzaW9uIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlIHZlcnNpb24gbWFuYWdlclxuICAgIHRoaXMuc2NoZW1hID0gdGhpcy5fdmVyc2lvbk1hbmFnZXIuc2NoZW1hRm9yVmVyc2lvbihcbiAgICAgIHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uLFxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbkNvbmZpZyA9IHRoaXMuX3ZlcnNpb25NYW5hZ2VyLnZlcnNpb25Db25maWcoXG4gICAgICB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbixcbiAgICApO1xuXG4gICAgaWYgKCF2ZXJzaW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBWZXJzaW9uIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kIGZvciAke3RoaXMucmVzb3VyY2VUeXBlKCl9QCR7dGhpcy5yZXNvbHZlZEFwaVZlcnNpb259LiBgICtcbiAgICAgICAgICBgUGxlYXNlIGVuc3VyZSB0aGUgdmVyc2lvbiBpcyByZWdpc3RlcmVkIHdpdGggdGhlIEFwaVZlcnNpb25NYW5hZ2VyLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnZlcnNpb25Db25maWcgPSB2ZXJzaW9uQ29uZmlnO1xuXG4gICAgLy8gU3RlcCA1OiBJbml0aWFsaXplIHRoZSBzY2hlbWEgdmFsaWRhdG9yXG4gICAgdGhpcy5fc2NoZW1hVmFsaWRhdG9yID0gbmV3IFJlc291cmNlU2NoZW1hVmFsaWRhdG9yKHRoaXMuc2NoZW1hKTtcblxuICAgIC8vIFN0ZXAgNjogUHJvY2VzcyBwcm9wZXJ0aWVzIHRocm91Z2ggdGhlIGZyYW1ld29yayBwaXBlbGluZVxuICAgIGNvbnN0IHByb2Nlc3NlZFByb3BzID0gdGhpcy5fcHJvY2Vzc1Byb3BlcnRpZXMocHJvcHMpO1xuXG4gICAgLy8gU3RlcCA3OiBQZXJmb3JtIHZhbGlkYXRpb24gaWYgZW5hYmxlZFxuICAgIGlmIChwcm9wcy5lbmFibGVWYWxpZGF0aW9uICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uUmVzdWx0ID1cbiAgICAgICAgdGhpcy5fc2NoZW1hVmFsaWRhdG9yLnZhbGlkYXRlUHJvcHMocHJvY2Vzc2VkUHJvcHMpO1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRpb25SZXN1bHQudmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQcm9wZXJ0eSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHt0aGlzLnJlc291cmNlVHlwZSgpfTpcXG5gICtcbiAgICAgICAgICAgIHRoaXMuX3NjaGVtYVZhbGlkYXRvclxuICAgICAgICAgICAgICAuZm9ybWF0VmFsaWRhdGlvbkVycm9ycyh0aGlzLnZhbGlkYXRpb25SZXN1bHQpXG4gICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN0ZXAgODogUGVyZm9ybSBtaWdyYXRpb24gYW5hbHlzaXMgaWYgZW5hYmxlZFxuICAgIGlmIChwcm9wcy5lbmFibGVNaWdyYXRpb25BbmFseXNpcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWlncmF0aW9uQW5hbHlzaXMgPSB0aGlzLl9wZXJmb3JtTWlncmF0aW9uQW5hbHlzaXMoKTtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDk6IENyZWF0ZSB0aGUgQXp1cmUgcmVzb3VyY2VcbiAgICB0aGlzLl9jcmVhdGVBenVyZVJlc291cmNlKHByb2Nlc3NlZFByb3BzKTtcblxuICAgIC8vIFN0ZXAgMTA6IENyZWF0ZSBtb25pdG9yaW5nIHJlc291cmNlcyBpZiBjb25maWd1cmVkXG4gICAgLy8gTm90ZTogTW9uaXRvcmluZyByZXNvdXJjZXMgYXJlIGNyZWF0ZWQgbGF6aWx5IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICAgIGlmIChwcm9wcy5tb25pdG9yaW5nKSB7XG4gICAgICB2b2lkIHRoaXMuY3JlYXRlTW9uaXRvcmluZ1Jlc291cmNlcyhwcm9wcy5tb25pdG9yaW5nKTtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDExOiBMb2cgd2FybmluZ3MgYW5kIG1pZ3JhdGlvbiBndWlkYW5jZVxuICAgIHRoaXMuX2xvZ0ZyYW1ld29ya01lc3NhZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGVmYXVsdCBBUEkgdmVyc2lvbiB0byB1c2Ugd2hlbiBubyBleHBsaWNpdCB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgc2Vuc2libGUgZGVmYXVsdCB2ZXJzaW9uIHRoYXQgY2FuIGJlIHVzZWRcbiAgICogYXMgYSBmYWxsYmFjayBpZiB0aGUgQXBpVmVyc2lvbk1hbmFnZXIgZG9lc24ndCBoYXZlIGFueSB2ZXJzaW9ucyByZWdpc3RlcmVkXG4gICAqIGZvciB0aGlzIHJlc291cmNlIHR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHN0cmluZyAoZS5nLiwgXCIyMDI0LTExLTAxXCIpXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciB0aGlzIHJlc291cmNlXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIGZ1bGwgQXp1cmUgcmVzb3VyY2UgdHlwZSBpZGVudGlmaWVyIHRoYXRcbiAgICogd2lsbCBiZSB1c2VkIGZvciBBUEkgY2FsbHMgYW5kIHZlcnNpb24gbWFuYWdlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIEF6dXJlIHJlc291cmNlIHR5cGUgKGUuZy4sIFwiTWljcm9zb2Z0LlJlc291cmNlcy9yZXNvdXJjZUdyb3Vwc1wiKVxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlc291cmNlVHlwZSgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIGNvbXBsZXRlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uLFxuICAgKiBpbmNsdWRpbmcgYWxsIHByb3BlcnR5IGRlZmluaXRpb25zLCB2YWxpZGF0aW9uIHJ1bGVzLCBhbmQgdHJhbnNmb3JtYXRpb25cbiAgICogbWFwcGluZ3MuIFVzZSB0aGUgcmVzb2x2ZVNjaGVtYSgpIGhlbHBlciBtZXRob2QgZm9yIHN0YW5kYXJkIHNjaGVtYSByZXNvbHV0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICpcbiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIHRyYW5zZm9ybSB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGJvZHkgZm9ybWF0XG4gICAqIGV4cGVjdGVkIGJ5IHRoZSBBenVyZSBSRVNUIEFQSSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb24uIFRoZSBmcmFtZXdvcmsgd2lsbFxuICAgKiBoYXZlIGFscmVhZHkgYXBwbGllZCBhbnkgbmVjZXNzYXJ5IHByb3BlcnR5IHRyYW5zZm9ybWF0aW9ucyBhbmQgdmFsaWRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb2Nlc3NlZCBhbmQgdmFsaWRhdGVkIHByb3BlcnRpZXMgZm9yIHRoZSByZXNvdXJjZVxuICAgKiBAcmV0dXJucyBUaGUgcmVzb3VyY2UgYm9keSBvYmplY3QgdG8gc2VuZCB0byBBenVyZSBBUElcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgaW4gY2hpbGQgY2xhc3NlcyB0byBwcm92aWRlIGRlZmF1bHQgbG9jYXRpb25cbiAgICogQHJldHVybnMgRGVmYXVsdCBsb2NhdGlvbiBvciB1bmRlZmluZWRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0TG9jYXRpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGluIGNoaWxkIGNsYXNzZXMgdG8gaW5kaWNhdGUgaWYgbG9jYXRpb24gaXMgcmVxdWlyZWRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBsb2NhdGlvbiBpcyBtYW5kYXRvcnkgZm9yIHRoaXMgcmVzb3VyY2UgdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGluIGNoaWxkIGNsYXNzZXMgdG8gc3BlY2lmeSBwYXJlbnQgcmVzb3VyY2UgZm9yIGxvY2F0aW9uIGluaGVyaXRhbmNlXG4gICAqIEByZXR1cm5zIFBhcmVudCByZXNvdXJjZSBvciB1bmRlZmluZWRcbiAgICovXG4gIHByb3RlY3RlZCBwYXJlbnRSZXNvdXJjZUZvckxvY2F0aW9uKCk6IEF6YXBpUmVzb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgaW4gY2hpbGQgY2xhc3NlcyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzb3VyY2UgdHlwZSBzdXBwb3J0cyB0YWdzXG4gICAqIFNvbWUgQXp1cmUgcmVzb3VyY2VzIChlLmcuLCBQb2xpY3kgRGVmaW5pdGlvbnMsIFBvbGljeSBBc3NpZ25tZW50cykgZG8gbm90IHN1cHBvcnQgdGFnc1xuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSByZXNvdXJjZSBzdXBwb3J0cyB0YWdzIChkZWZhdWx0KSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGxvY2F0aW9uIHVzaW5nIHRlbXBsYXRlIG1ldGhvZCBwYXR0ZXJuXG4gICAqIFByaW9yaXR5OiBwcm9wcy5sb2NhdGlvbiA+IHBhcmVudCBsb2NhdGlvbiA+IGRlZmF1bHQgbG9jYXRpb24gPiB2YWxpZGF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZUxvY2F0aW9uKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIDEuIEV4cGxpY2l0IGxvY2F0aW9uIGluIHByb3BzXG4gICAgaWYgKHByb3BzLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gcHJvcHMubG9jYXRpb247XG4gICAgfVxuXG4gICAgLy8gMi4gSW5oZXJpdCBmcm9tIHBhcmVudCByZXNvdXJjZVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50UmVzb3VyY2VGb3JMb2NhdGlvbigpO1xuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gcGFyZW50LmxvY2F0aW9uO1xuICAgIH1cblxuICAgIC8vIDMuIFVzZSBjaGlsZCBjbGFzcyBkZWZhdWx0XG4gICAgY29uc3QgZGVmYXVsdExvYyA9IHRoaXMuZGVmYXVsdExvY2F0aW9uKCk7XG4gICAgaWYgKGRlZmF1bHRMb2MpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0TG9jO1xuICAgIH1cblxuICAgIC8vIDQuIFZhbGlkYXRlIGlmIHJlcXVpcmVkXG4gICAgaWYgKHRoaXMucmVxdWlyZXNMb2NhdGlvbigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBMb2NhdGlvbiBpcyByZXF1aXJlZCBmb3IgJHt0aGlzLnJlc291cmNlVHlwZSgpfSBidXQgd2FzIG5vdCBwcm92aWRlZCBgICtcbiAgICAgICAgICBgYW5kIGNvdWxkIG5vdCBiZSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgcmVzb3VyY2UuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgbmFtZSBmb3IgdGhpcyByZXNvdXJjZVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjZW50cmFsaXplcyBuYW1lIHJlc29sdXRpb24gbG9naWMuIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlXG4gICAqIHByb3ZpZGVkIG5hbWUgb3IgZmFsbHMgYmFjayB0byB0aGUgY29uc3RydWN0IElELlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVOYW1lKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9wcy5uYW1lIHx8IHRoaXMubm9kZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBzdGFuZGFyZCBzY2hlbWEgcmVzb2x1dGlvblxuICAgKlxuICAgKiBTdWJjbGFzc2VzIGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gcmVzb2x2ZSB0aGUgc2NoZW1hIGZvciB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAqIGZyb20gdGhlIEFwaVZlcnNpb25NYW5hZ2VyLiBUaGlzIHByb3ZpZGVzIGEgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24gdGhhdFxuICAgKiBtb3N0IHJlc291cmNlcyBjYW4gdXNlIHdpdGhvdXQgY3VzdG9tIGxvZ2ljLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgc2NoZW1hIGNhbm5vdCBiZSByZXNvbHZlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICBjb25zdCB2ZXJzaW9uQ29uZmlnID0gdGhpcy5fYXBpVmVyc2lvbk1hbmFnZXIudmVyc2lvbkNvbmZpZyhcbiAgICAgIHRoaXMucmVzb3VyY2VUeXBlKCksXG4gICAgICB0aGlzLnJlc29sdmVkQXBpVmVyc2lvbixcbiAgICApO1xuXG4gICAgaWYgKCF2ZXJzaW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzb2x2ZSBzY2hlbWE6IHZlcnNpb24gY29uZmlndXJhdGlvbiBub3QgZm91bmQgZm9yIGAgK1xuICAgICAgICAgIGAke3RoaXMucmVzb3VyY2VUeXBlKCl9QCR7dGhpcy5yZXNvbHZlZEFwaVZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcnNpb25Db25maWcuc2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBmb3IgdGhpcyByZXNvdXJjZSB0eXBlXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiBsb2dpY1xuICAgKiBmb3IgdXNlIGluIHN1YmNsYXNzZXMgb3IgZXh0ZXJuYWwgdG9vbGluZy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiwgb3IgdW5kZWZpbmVkIGlmIG5vbmUgZm91bmRcbiAgICovXG4gIHB1YmxpYyBsYXRlc3RWZXJzaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnNpb25NYW5hZ2VyXG4gICAgICA/IHRoaXMuX3ZlcnNpb25NYW5hZ2VyLmxhdGVzdFZlcnNpb24oKVxuICAgICAgOiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5sYXRlc3RWZXJzaW9uKHRoaXMucmVzb3VyY2VUeXBlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHN1cHBvcnRlZCB2ZXJzaW9ucyBmb3IgdGhpcyByZXNvdXJjZSB0eXBlXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdmVyc2lvbiByZWdpc3RyeSBmb3IgdXNlIGluXG4gICAqIHN1YmNsYXNzZXMgb3IgZXh0ZXJuYWwgdG9vbGluZy5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2Ygc3VwcG9ydGVkIHZlcnNpb24gc3RyaW5ncywgc29ydGVkIGJ5IHJlbGVhc2UgZGF0ZVxuICAgKi9cbiAgcHVibGljIHN1cHBvcnRlZFZlcnNpb25zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdmVyc2lvbk1hbmFnZXJcbiAgICAgID8gdGhpcy5fdmVyc2lvbk1hbmFnZXIuc3VwcG9ydGVkVmVyc2lvbnMoKVxuICAgICAgOiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5zdXBwb3J0ZWRWZXJzaW9ucyh0aGlzLnJlc291cmNlVHlwZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXplcyBtaWdyYXRpb24gZnJvbSBjdXJyZW50IHZlcnNpb24gdG8gYSB0YXJnZXQgdmVyc2lvblxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBlbmFibGVzIGV4dGVybmFsIHRvb2xzIHRvIGFuYWx5emUgbWlncmF0aW9uIHJlcXVpcmVtZW50c1xuICAgKiBiZXR3ZWVuIHZlcnNpb25zIGZvciBwbGFubmluZyBhbmQgYXV0b21hdGlvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldFZlcnNpb24gLSBUaGUgdGFyZ2V0IHZlcnNpb24gdG8gYW5hbHl6ZSBtaWdyYXRpb24gdG9cbiAgICogQHJldHVybnMgRGV0YWlsZWQgbWlncmF0aW9uIGFuYWx5c2lzIHJlc3VsdHNcbiAgICovXG4gIHB1YmxpYyBhbmFseXplTWlncmF0aW9uVG8odGFyZ2V0VmVyc2lvbjogc3RyaW5nKTogTWlncmF0aW9uQW5hbHlzaXMge1xuICAgIHJldHVybiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5hbmFseXplTWlncmF0aW9uKFxuICAgICAgdGhpcy5yZXNvdXJjZVR5cGUoKSxcbiAgICAgIHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uLFxuICAgICAgdGFyZ2V0VmVyc2lvbixcbiAgICApO1xuICB9XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSU1QTEVNRU5UQVRJT04gTUVUSE9EU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgcHJvcGVydGllcyB0aHJvdWdoIHRoZSBmcmFtZXdvcmsgcGlwZWxpbmVcbiAgICovXG4gIHByaXZhdGUgX3Byb2Nlc3NQcm9wZXJ0aWVzKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBhbnkge1xuICAgIGxldCBwcm9jZXNzZWRQcm9wcyA9IHsgLi4ucHJvcHMgfTtcblxuICAgIC8vIEVuc3VyZSBuYW1lIGlzIHNldCBiZWZvcmUgcHJvY2Vzc2luZ1xuICAgIC8vIFRoaXMgaXMgY3JpdGljYWwgZm9yIHZhbGlkYXRpb24gdG8gd29yayBjb3JyZWN0bHlcbiAgICBpZiAoIXByb2Nlc3NlZFByb3BzLm5hbWUpIHtcbiAgICAgIHByb2Nlc3NlZFByb3BzLm5hbWUgPSB0aGlzLnJlc29sdmVOYW1lKHByb3BzKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBzY2hlbWEgdXNpbmcgdGhlIHZhbGlkYXRvclxuICAgIHByb2Nlc3NlZFByb3BzID0gdGhpcy5fc2NoZW1hVmFsaWRhdG9yLmFwcGx5RGVmYXVsdHMocHJvY2Vzc2VkUHJvcHMpO1xuXG4gICAgLy8gQXBwbHkgcHJvcGVydHkgdHJhbnNmb3JtYXRpb25zIGlmIGVuYWJsZWRcbiAgICBpZiAocHJvcHMuZW5hYmxlVHJhbnNmb3JtYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAvLyBGb3IgdHJhbnNmb3JtYXRpb24sIHdlIHdvdWxkIG5lZWQgYSBzb3VyY2Ugc2NoZW1hLCBidXQgc2luY2Ugd2UncmUgbm90XG4gICAgICAvLyBtaWdyYXRpbmcgZnJvbSBhIGRpZmZlcmVudCB2ZXJzaW9uIGluIHRoaXMgY29udGV4dCwgd2UnbGwgc2tpcCB0cmFuc2Zvcm1hdGlvblxuICAgICAgLy8gVGhpcyB3b3VsZCBiZSB1c2VkIHdoZW4gdXBncmFkaW5nIGZyb20gb25lIHZlcnNpb24gdG8gYW5vdGhlclxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRQcm9wcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBtaWdyYXRpb24gYW5hbHlzaXMgZm9yIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICovXG4gIHByaXZhdGUgX3BlcmZvcm1NaWdyYXRpb25BbmFseXNpcygpOiBNaWdyYXRpb25BbmFseXNpcyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyBkZXByZWNhdGVkIHVzaW5nIHRoZSB2ZXJzaW9uIG1hbmFnZXJcbiAgICBpZiAodGhpcy5fdmVyc2lvbk1hbmFnZXIuaXNEZXByZWNhdGVkKHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uKSkge1xuICAgICAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IHRoaXMuX3ZlcnNpb25NYW5hZ2VyLmxhdGVzdFZlcnNpb24oKTtcbiAgICAgIGlmIChsYXRlc3RWZXJzaW9uICYmIGxhdGVzdFZlcnNpb24gIT09IHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5hbmFseXplTWlncmF0aW9uKFxuICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlKCksXG4gICAgICAgICAgdGhpcy5yZXNvbHZlZEFwaVZlcnNpb24sXG4gICAgICAgICAgbGF0ZXN0VmVyc2lvbixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHVuZGVybHlpbmcgQXp1cmUgcmVzb3VyY2VcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUF6dXJlUmVzb3VyY2UocHJvcHM6IGFueSk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBuYW1lIGlzIHNldCBpbiBwcm9wcyBmb3IgdmFsaWRhdGlvblxuICAgIGNvbnN0IHByb3BzV2l0aE5hbWUgPSB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUgfHwgdGhpcy5yZXNvbHZlTmFtZShwcm9wcyksXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSB0aGUgcmVzb3VyY2UgYm9keSB1c2luZyB0aGUgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25cbiAgICBjb25zdCByZXNvdXJjZUJvZHkgPSB0aGlzLmNyZWF0ZVJlc291cmNlQm9keShwcm9wc1dpdGhOYW1lKTtcblxuICAgIC8vIERldGVybWluZSB0aGUgcGFyZW50IElEIHVzaW5nIHRoZSBvdmVycmlkZWFibGUgbWV0aG9kXG4gICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJlc29sdmVQYXJlbnRJZChwcm9wc1dpdGhOYW1lKTtcblxuICAgIC8vIEZpbmQgcGFyZW50IEF6YXBpUmVzb3VyY2UgY29uc3RydWN0IGlmIHBhcmVudCBJRCByZWZlcmVuY2VzIGEgcmVzb3VyY2VcbiAgICBjb25zdCBwYXJlbnRSZXNvdXJjZSA9IHRoaXMuX2ZpbmRQYXJlbnRBemFwaVJlc291cmNlKHBhcmVudElkKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgQVpBUEkgcmVzb3VyY2UgdXNpbmcgdGhlIGJhc2UgY2xhc3MgbWV0aG9kXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gdGhpcy5yZXNvbHZlTmFtZShwcm9wcyk7XG4gICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZSA9IHRoaXMuY3JlYXRlQXphcGlSZXNvdXJjZShcbiAgICAgIHJlc291cmNlQm9keSxcbiAgICAgIHBhcmVudElkLFxuICAgICAgcmVzb3VyY2VOYW1lLFxuICAgICAgdGhpcy5sb2NhdGlvbixcbiAgICAgIHBhcmVudFJlc291cmNlLFxuICAgICAgcHJvcHNXaXRoTmFtZS5kZXBlbmRzT24sXG4gICAgICB0aGlzLl90YWdzLCAvLyBQYXNzIHRhZ3MgZGlyZWN0bHkgaW5zdGVhZCBvZiBleHRyYWN0aW5nIGZyb20gYm9keVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIHBhcmVudCBBemFwaVJlc291cmNlIGNvbnN0cnVjdCBpZiB0aGUgcGFyZW50SWQgcmVmZXJlbmNlcyBhIHJlc291cmNlXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHBhcmVudElkIGlzIGEgc3RhdGljIHN0cmluZyBvciBwYXJlbnQgbm90IGZvdW5kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9maW5kUGFyZW50QXphcGlSZXNvdXJjZShcbiAgICBwYXJlbnRJZDogc3RyaW5nLFxuICApOiBBemFwaVJlc291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgcGFyZW50IGlzIGEgc3RyaW5nIGludGVycG9sYXRpb24gcmVmZXJlbmNpbmcgYW5vdGhlciByZXNvdXJjZVxuICAgIC8vIFBhdHRlcm46ICR7YXphcGlfcmVzb3VyY2UucmVzb3VyY2VfbmFtZV9IQVNILmlkfSBvciAke2NvbnN0cnVjdC5mcW59LmlkXG4gICAgaWYgKCFwYXJlbnRJZC5pbmNsdWRlcyhcIiR7XCIpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBQYXJlbnQgaXMgYSBzdGF0aWMgc3RyaW5nIElELCBub3QgYSByZXNvdXJjZSByZWZlcmVuY2VcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gZmluZCB0aGUgcGFyZW50IEF6YXBpUmVzb3VyY2UgaW4gdGhlIGNvbnN0cnVjdCB0cmVlXG4gICAgLy8gV2UgbmVlZCB0byBzZWFyY2ggdGhlIGVudGlyZSB0cmVlIHRvIGZpbmQgdGhlIG1hdGNoaW5nIHBhcmVudFxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9maW5kUm9vdCgpO1xuICAgIHJldHVybiB0aGlzLl9maW5kUGFyZW50UmVzb3VyY2Uocm9vdCwgcGFyZW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSByb290IG9mIHRoZSBjb25zdHJ1Y3QgdHJlZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZFJvb3QoKTogQ29uc3RydWN0IHtcbiAgICBsZXQgY3VycmVudDogQ29uc3RydWN0ID0gdGhpcztcbiAgICB3aGlsZSAoY3VycmVudC5ub2RlLnNjb3BlKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5ub2RlLnNjb3BlO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBzZWFyY2hlcyBmb3IgYSBwYXJlbnQgcmVzb3VyY2UgYnkgbWF0Y2hpbmcgcGFyZW50SWQgcGF0dGVybnNcbiAgICogRW5oYW5jZWQgdG8gYmV0dGVyIGhhbmRsZSBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvbiBzeW50YXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2ZpbmRQYXJlbnRSZXNvdXJjZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICk6IEF6YXBpUmVzb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIC8vIENoZWNrIGFsbCBjaGlsZHJlbiBvZiB0aGlzIHNjb3BlXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBzY29wZS5ub2RlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkIGluc3RhbmNlb2YgQXphcGlSZXNvdXJjZSAmJlxuICAgICAgICBjaGlsZCAhPT0gdGhpcyAmJlxuICAgICAgICBjaGlsZC50ZXJyYWZvcm1SZXNvdXJjZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkRnFuID0gY2hpbGQudGVycmFmb3JtUmVzb3VyY2UuZnFuO1xuXG4gICAgICAgIC8vIE1hdGNoIGlmIHRoZSBjaGlsZCdzIEZRTiBhcHBlYXJzIGFueXdoZXJlIGluIHRoZSBwYXJlbnRJZCBzdHJpbmdcbiAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGNhc2VzIGxpa2U6ICR7YXphcGlfcmVzb3VyY2UuZG5zLXJlc29sdmVyX3Jlc291cmNlX0YxNTE3QkU0LmlkfVxuICAgICAgICAvLyB3aGVyZSBjaGlsZEZxbiB3b3VsZCBiZTogYXphcGlfcmVzb3VyY2UuZG5zLXJlc29sdmVyX3Jlc291cmNlX0YxNTE3QkU0XG4gICAgICAgIGlmIChwYXJlbnRJZC5pbmNsdWRlcyhjaGlsZEZxbikpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVjdXJzaXZlbHkgc2VhcmNoIGluIGNoaWxkJ3Mgc3VidHJlZVxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9maW5kUGFyZW50UmVzb3VyY2UoY2hpbGQsIHBhcmVudElkKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgcGFyZW50IHJlc291cmNlIElEIGZvciB0aGlzIHJlc291cmNlLlxuICAgKlxuICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBjaGlsZCByZXNvdXJjZSBjbGFzc2VzIChsaWtlIFN1Ym5ldCkgdGhhdCBuZWVkXG4gICAqIGN1c3RvbSBwYXJlbnQgSUQgcmVzb2x1dGlvbiBsb2dpYy4gQnkgZGVmYXVsdCwgdGhpcyBkZWxlZ2F0ZXMgdG8gdGhlXG4gICAqIHByaXZhdGUgX2RldGVybWluZVBhcmVudElkIG1ldGhvZCB3aGljaCBoYW5kbGVzIHN0YW5kYXJkIHJlc291cmNlIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBUaGUgcGFyZW50IHJlc291cmNlIElEXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZXRlcm1pbmVQYXJlbnRJZChwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgcGFyZW50IElEIGZvciB0aGUgcmVzb3VyY2UgKGludGVybmFsIGltcGxlbWVudGF0aW9uKVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyB0aGUgZGVmYXVsdCBwYXJlbnQgSUQgcmVzb2x1dGlvbiBsb2dpYy5cbiAgICogUmVzb3VyY2Utc3BlY2lmaWMgbG9naWMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSBvdmVycmlkZWFibGUgcmVzb2x2ZVBhcmVudElkKCkgbWV0aG9kLlxuICAgKlxuICAgKiBEZWZhdWx0IGJlaGF2aW9yOlxuICAgKiAtIElmIHJlc291cmNlR3JvdXBJZCBpcyBwcm92aWRlZCBpbiBwcm9wcywgdXNlIGl0XG4gICAqIC0gT3RoZXJ3aXNlLCBkZWZhdWx0IHRvIHN1YnNjcmlwdGlvbiBzY29wZVxuICAgKi9cbiAgcHJpdmF0ZSBfZGV0ZXJtaW5lUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgLy8gSWYgcmVzb3VyY2UgZ3JvdXAgSUQgaXMgcHJvdmlkZWQsIHVzZSBpdCBhcyBwYXJlbnRcbiAgICBpZiAocHJvcHMucmVzb3VyY2VHcm91cElkKSB7XG4gICAgICByZXR1cm4gcHJvcHMucmVzb3VyY2VHcm91cElkO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgdG8gc3Vic2NyaXB0aW9uIHNjb3BlIGZvciByZXNvdXJjZXMgd2l0aG91dCBleHBsaWNpdCBwYXJlbnRcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSBuZXcgRGF0YUF6YXBpQ2xpZW50Q29uZmlnKFxuICAgICAgdGhpcyxcbiAgICAgIFwiY2xpZW50X2NvbmZpZ19kZWZhdWx0XCIsXG4gICAgICB7fSxcbiAgICApO1xuICAgIHJldHVybiBgL3N1YnNjcmlwdGlvbnMvXFwkeyR7Y2xpZW50Q29uZmlnLmZxbn0uc3Vic2NyaXB0aW9uX2lkfWA7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBmcmFtZXdvcmsgbWVzc2FnZXMgaW5jbHVkaW5nIHdhcm5pbmdzIGFuZCBtaWdyYXRpb24gZ3VpZGFuY2VcbiAgICovXG4gIHByaXZhdGUgX2xvZ0ZyYW1ld29ya01lc3NhZ2VzKCk6IHZvaWQge1xuICAgIC8vIEFOU0kgY29sb3IgY29kZXMgZm9yIHRlcm1pbmFsIG91dHB1dFxuICAgIGNvbnN0IFJFRCA9IFwiXFx4MWJbMzFtXCI7XG4gICAgY29uc3QgWUVMTE9XID0gXCJcXHgxYlszM21cIjtcbiAgICBjb25zdCBSRVNFVCA9IFwiXFx4MWJbMG1cIjtcbiAgICBjb25zdCBCT0xEID0gXCJcXHgxYlsxbVwiO1xuXG4gICAgLy8gTG9nIGRlcHJlY2F0aW9uIHdhcm5pbmdzIHVzaW5nIHRoZSB2ZXJzaW9uIG1hbmFnZXJcbiAgICBpZiAoXG4gICAgICB0aGlzLl92ZXJzaW9uTWFuYWdlci5pc0RlcHJlY2F0ZWQodGhpcy5yZXNvbHZlZEFwaVZlcnNpb24pICYmXG4gICAgICAhdGhpcy5fdmVyc2lvbk1hbmFnZXIuaXNTdW5zZXQodGhpcy5yZXNvbHZlZEFwaVZlcnNpb24pXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGAke1lFTExPV33imqDvuI8gIEFQSSB2ZXJzaW9uICR7dGhpcy5yZXNvbHZlZEFwaVZlcnNpb259IGZvciAke3RoaXMucmVzb3VyY2VUeXBlKCl9IGlzIGRlcHJlY2F0ZWQuIGAgK1xuICAgICAgICAgIGBDb25zaWRlciB1cGdyYWRpbmcgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uOiAke3RoaXMubGF0ZXN0VmVyc2lvbigpfSR7UkVTRVR9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb25NYW5hZ2VyLmlzU3Vuc2V0KHRoaXMucmVzb2x2ZWRBcGlWZXJzaW9uKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCR7UkVEfSR7Qk9MRH3wn5qoIEFQSSB2ZXJzaW9uICR7dGhpcy5yZXNvbHZlZEFwaVZlcnNpb259IGZvciAke3RoaXMucmVzb3VyY2VUeXBlKCl9IGhhcyByZWFjaGVkIHN1bnNldC4gYCArXG4gICAgICAgICAgYEltbWVkaWF0ZSBtaWdyYXRpb24gdG8gJHt0aGlzLmxhdGVzdFZlcnNpb24oKX0gaXMgcmVxdWlyZWQuJHtSRVNFVH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgbWlncmF0aW9uIGFuYWx5c2lzIHJlc3VsdHNcbiAgICBpZiAodGhpcy5taWdyYXRpb25BbmFseXNpcyAmJiAhdGhpcy5taWdyYXRpb25BbmFseXNpcy5jb21wYXRpYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGAke1lFTExPV31NaWdyYXRpb24gZnJvbSAke3RoaXMubWlncmF0aW9uQW5hbHlzaXMuZnJvbVZlcnNpb259IHRvICR7dGhpcy5taWdyYXRpb25BbmFseXNpcy50b1ZlcnNpb259IGAgK1xuICAgICAgICAgIGBoYXMgJHt0aGlzLm1pZ3JhdGlvbkFuYWx5c2lzLmJyZWFraW5nQ2hhbmdlcy5sZW5ndGh9IGJyZWFraW5nIGNoYW5nZXMuIGAgK1xuICAgICAgICAgIGBFc3RpbWF0ZWQgZWZmb3J0OiAke3RoaXMubWlncmF0aW9uQW5hbHlzaXMuZXN0aW1hdGVkRWZmb3J0fSR7UkVTRVR9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9nIHZhbGlkYXRpb24gd2FybmluZ3NcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uUmVzdWx0Py53YXJuaW5ncy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtZRUxMT1d94pqg77iPICBQcm9wZXJ0eSB2YWxpZGF0aW9uIHdhcm5pbmc6ICR7d2FybmluZ30ke1JFU0VUfWAsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNT05JVE9SSU5HIElOVEVHUkFUSU9OIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ3JlYXRlcyBtb25pdG9yaW5nIHJlc291cmNlcyBiYXNlZCBvbiB0aGUgbW9uaXRvcmluZyBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBjb25zdHJ1Y3Rpb24gaWYgbW9uaXRvcmluZyBpcyBjb25maWd1cmVkLlxuICAgKiBJdCBjcmVhdGVzIGFjdGlvbiBncm91cHMsIG1ldHJpYyBhbGVydHMsIGFuZCBhY3Rpdml0eSBsb2cgYWxlcnRzIGFzIGNoaWxkIGNvbnN0cnVjdHMuXG4gICAqXG4gICAqIFByb3RlY3RlZCB0byBhbGxvdyBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCBtb25pdG9yaW5nIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIG1vbml0b3JpbmcgY29uZmlndXJhdGlvbiBmcm9tIHByb3BzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTW9uaXRvcmluZ1Jlc291cmNlcyhcbiAgICBjb25maWc6IE1vbml0b3JpbmdDb25maWcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNraXAgaWYgbW9uaXRvcmluZyBpcyBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYgKGNvbmZpZy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBkaWFnbm9zdGljIHNldHRpbmdzIHVzaW5nIGR5bmFtaWMgaW1wb3J0IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgICBpZiAoY29uZmlnLmRpYWdub3N0aWNTZXR0aW5ncykge1xuICAgICAgY29uc3QgeyBEaWFnbm9zdGljU2V0dGluZ3MgfSA9XG4gICAgICAgIGF3YWl0IGltcG9ydChcIi4uLy4uLy4uL2F6dXJlLWRpYWdub3N0aWNzZXR0aW5ncy9saWIvZGlhZ25vc3RpYy1zZXR0aW5nc1wiKTtcbiAgICAgIG5ldyBEaWFnbm9zdGljU2V0dGluZ3ModGhpcywgXCJtb25pdG9yaW5nLWRpYWdub3N0aWMtc2V0dGluZ3NcIiwge1xuICAgICAgICAuLi5jb25maWcuZGlhZ25vc3RpY1NldHRpbmdzLFxuICAgICAgICB0YXJnZXRSZXNvdXJjZUlkOiB0aGlzLnJlc291cmNlSWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYWN0aW9uIGdyb3VwcyB1c2luZyBkeW5hbWljIGltcG9ydFxuICAgIGlmIChjb25maWcuYWN0aW9uR3JvdXBzICYmIGNvbmZpZy5hY3Rpb25Hcm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgeyBBY3Rpb25Hcm91cCB9ID1cbiAgICAgICAgYXdhaXQgaW1wb3J0KFwiLi4vLi4vLi4vYXp1cmUtYWN0aW9uZ3JvdXAvbGliL2FjdGlvbi1ncm91cFwiKTtcbiAgICAgIGNvbmZpZy5hY3Rpb25Hcm91cHMuZm9yRWFjaCgoYWN0aW9uR3JvdXBQcm9wcywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uR3JvdXAgPSBuZXcgQWN0aW9uR3JvdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgbW9uaXRvcmluZy1hY3Rpb24tZ3JvdXAtJHtpbmRleH1gLFxuICAgICAgICAgIGFjdGlvbkdyb3VwUHJvcHMsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubW9uaXRvcmluZ0FjdGlvbkdyb3Vwcy5wdXNoKGFjdGlvbkdyb3VwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBtZXRyaWMgYWxlcnRzIHVzaW5nIGR5bmFtaWMgaW1wb3J0XG4gICAgaWYgKGNvbmZpZy5tZXRyaWNBbGVydHMgJiYgY29uZmlnLm1ldHJpY0FsZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IE1ldHJpY0FsZXJ0IH0gPVxuICAgICAgICBhd2FpdCBpbXBvcnQoXCIuLi8uLi8uLi9henVyZS1tZXRyaWNhbGVydC9saWIvbWV0cmljLWFsZXJ0XCIpO1xuICAgICAgY29uZmlnLm1ldHJpY0FsZXJ0cy5mb3JFYWNoKChtZXRyaWNBbGVydFByb3BzLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBJZiBzY29wZXMgbm90IHByb3ZpZGVkLCBkZWZhdWx0IHRvIHRoaXMgcmVzb3VyY2VcbiAgICAgICAgY29uc3QgcHJvcHNXaXRoU2NvcGU6IE1ldHJpY0FsZXJ0UHJvcHMgPSB7XG4gICAgICAgICAgLi4ubWV0cmljQWxlcnRQcm9wcyxcbiAgICAgICAgICBzY29wZXM6IG1ldHJpY0FsZXJ0UHJvcHMuc2NvcGVzIHx8IFt0aGlzLnJlc291cmNlSWRdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG1ldHJpY0FsZXJ0ID0gbmV3IE1ldHJpY0FsZXJ0KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYG1vbml0b3JpbmctbWV0cmljLWFsZXJ0LSR7aW5kZXh9YCxcbiAgICAgICAgICBwcm9wc1dpdGhTY29wZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tb25pdG9yaW5nTWV0cmljQWxlcnRzLnB1c2gobWV0cmljQWxlcnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFjdGl2aXR5IGxvZyBhbGVydHMgdXNpbmcgZHluYW1pYyBpbXBvcnRcbiAgICBpZiAoY29uZmlnLmFjdGl2aXR5TG9nQWxlcnRzICYmIGNvbmZpZy5hY3Rpdml0eUxvZ0FsZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IEFjdGl2aXR5TG9nQWxlcnQgfSA9XG4gICAgICAgIGF3YWl0IGltcG9ydChcIi4uLy4uLy4uL2F6dXJlLWFjdGl2aXR5bG9nYWxlcnQvbGliL2FjdGl2aXR5LWxvZy1hbGVydFwiKTtcbiAgICAgIGNvbmZpZy5hY3Rpdml0eUxvZ0FsZXJ0cy5mb3JFYWNoKChhY3Rpdml0eUxvZ0FsZXJ0UHJvcHMsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIElmIHNjb3BlcyBub3QgcHJvdmlkZWQsIGRlZmF1bHQgdG8gdGhpcyByZXNvdXJjZVxuICAgICAgICBjb25zdCBwcm9wc1dpdGhTY29wZTogQWN0aXZpdHlMb2dBbGVydFByb3BzID0ge1xuICAgICAgICAgIC4uLmFjdGl2aXR5TG9nQWxlcnRQcm9wcyxcbiAgICAgICAgICBzY29wZXM6IGFjdGl2aXR5TG9nQWxlcnRQcm9wcy5zY29wZXMgfHwgW3RoaXMucmVzb3VyY2VJZF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYWN0aXZpdHlMb2dBbGVydCA9IG5ldyBBY3Rpdml0eUxvZ0FsZXJ0KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYG1vbml0b3JpbmctYWN0aXZpdHktbG9nLWFsZXJ0LSR7aW5kZXh9YCxcbiAgICAgICAgICBwcm9wc1dpdGhTY29wZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tb25pdG9yaW5nQWN0aXZpdHlMb2dBbGVydHMucHVzaChhY3Rpdml0eUxvZ0FsZXJ0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU09VUkNFIE1BTkFHRU1FTlQgTUVUSE9EUyAoZnJvbSBBemFwaVJlc291cmNlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgY2hpbGQgY2xhc3NlcyB0byBjdXN0b21pemUgdGhlIFJlc291cmNlQ29uZmlnIGJlZm9yZSByZXNvdXJjZSBjcmVhdGlvblxuICAgKlxuICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhZGQgcmVzb3VyY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBsaWtlOlxuICAgKiAtIHNjaGVtYVZhbGlkYXRpb25FbmFibGVkOiBmYWxzZSAoZm9yIHJlc291cmNlcyB3aXRoIGNvbXBsZXggbmVzdGVkIHN0cnVjdHVyZXMpXG4gICAqIC0gaWdub3JlTWlzc2luZ1Byb3BlcnR5OiB0cnVlIChmb3IgcmVzb3VyY2VzIHdpdGggZHluYW1pYy91bmtub3duIHByb3BlcnRpZXMpXG4gICAqIC0gaWdub3JlTnVsbFByb3BlcnR5OiB0cnVlIChmb3IgcmVzb3VyY2VzIHRoYXQgc2hvdWxkIHNraXAgbnVsbCB2YWx1ZXMpXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgYmFzZSBSZXNvdXJjZUNvbmZpZyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIHJlc291cmNlXG4gICAqIEByZXR1cm5zIFRoZSBwb3RlbnRpYWxseSBtb2RpZmllZCBSZXNvdXJjZUNvbmZpZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm90ZWN0ZWQgY3VzdG9taXplUmVzb3VyY2VDb25maWcoY29uZmlnOiBSZXNvdXJjZUNvbmZpZyk6IFJlc291cmNlQ29uZmlnIHtcbiAgICogICByZXR1cm4ge1xuICAgKiAgICAgLi4uY29uZmlnLFxuICAgKiAgICAgc2NoZW1hVmFsaWRhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgKiAgICAgaWdub3JlTWlzc2luZ1Byb3BlcnR5OiB0cnVlLFxuICAgKiAgIH07XG4gICAqIH1cbiAgICovXG4gIHByb3RlY3RlZCBjdXN0b21pemVSZXNvdXJjZUNvbmZpZyhjb25maWc6IGFueSk6IGFueSB7XG4gICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbjogbm8gY3VzdG9taXphdGlvblxuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgdW5kZXJseWluZyBBWkFQSSBUZXJyYWZvcm0gcmVzb3VyY2UgdXNpbmcgdGhlIGdlbmVyYXRlZCBwcm92aWRlciBjbGFzc2VzXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIHByb3BlcnRpZXMgb2JqZWN0IHRvIHNlbmQgdG8gdGhlIEF6dXJlIEFQSSAoc2hvdWxkIGluY2x1ZGUgbG9jYXRpb24gaWYgbmVlZGVkKVxuICAgKiBAcGFyYW0gcGFyZW50SWQgLSBUaGUgcGFyZW50IHJlc291cmNlIElEIChlLmcuLCBzdWJzY3JpcHRpb24gb3IgcmVzb3VyY2UgZ3JvdXApXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSBsb2NhdGlvbiAtIFRoZSBsb2NhdGlvbiBvZiB0aGUgcmVzb3VyY2UgKG9wdGlvbmFsLCBvbmx5IGZvciB0b3AtbGV2ZWwgcmVzb3VyY2VzIHdpdGhvdXQgbG9jYXRpb24gaW4gYm9keSlcbiAgICogQHBhcmFtIHBhcmVudFJlc291cmNlIC0gVGhlIHBhcmVudCByZXNvdXJjZSBmb3IgZGVwZW5kZW5jeSB0cmFja2luZ1xuICAgKiBAcGFyYW0gZGVwZW5kc09uIC0gRXhwbGljaXQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHJlc291cmNlXG4gICAqIEBwYXJhbSB0YWdzIC0gVGFncyB0byBhcHBseSB0byB0aGUgcmVzb3VyY2UgKHBhc3NlZCBzZXBhcmF0ZWx5IGZyb20gYm9keSBmb3IgcHJvcGVyIGlkZW1wb3RlbmN5KVxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBBWkFQSSByZXNvdXJjZVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUF6YXBpUmVzb3VyY2UoXG4gICAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwYXJlbnRJZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBsb2NhdGlvbj86IHN0cmluZyxcbiAgICBwYXJlbnRSZXNvdXJjZT86IEF6YXBpUmVzb3VyY2UsXG4gICAgZGVwZW5kc09uPzogY2RrdG4uSVRlcnJhZm9ybURlcGVuZGFibGVbXSxcbiAgICB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgKTogY2RrdG4uVGVycmFmb3JtUmVzb3VyY2Uge1xuICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgY2hpbGQgcmVzb3VyY2UgYnkgY291bnRpbmcgcGF0aCBzZWdtZW50c1xuICAgIC8vIENoaWxkIHJlc291cmNlcyBoYXZlIG11bHRpcGxlIHNlZ21lbnRzIChlLmcuLCBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrcy9zdWJuZXRzXCIpXG4gICAgLy8gVG9wLWxldmVsIHJlc291cmNlcyBoYXZlIG9uZSBzZWdtZW50IChlLmcuLCBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrc1wiKVxuICAgIGNvbnN0IHJlc291cmNlVHlwZVBhcnRzID0gdGhpcy5fcmVzb3VyY2VUeXBlLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCBpc0NoaWxkUmVzb3VyY2UgPSByZXNvdXJjZVR5cGVQYXJ0cy5sZW5ndGggPiAyO1xuXG4gICAgLy8gUmVtb3ZlIHRhZ3MgZnJvbSBwcm9wZXJ0aWVzIHRvIGF2b2lkIGR1cGxpY2F0ZSBzcGVjaWZpY2F0aW9uIGVycm9yXG4gICAgLy8gVGhlIEFaQVBJIHByb3ZpZGVyIHJlcXVpcmVzIHRhZ3MgYXQgdGhlIHRvcCBsZXZlbCBvbmx5LCBub3QgaW4gdGhlIGJvZHlcbiAgICAvLyBUaGlzIHByZXZlbnRzOiBcImNhbid0IHNwZWNpZnkgYm90aCB0aGUgYXJndW1lbnQgJ3RhZ3MnIGFuZCAndGFncycgaW4gdGhlIGFyZ3VtZW50ICdib2R5J1wiXG4gICAgLy8gVGFncyBhcmUgbm93IHBhc3NlZCBhcyBhIHNlcGFyYXRlIHBhcmFtZXRlciBmb3IgYmV0dGVyIGNsYXJpdHkgYW5kIGlkZW1wb3RlbmN5XG4gICAgY29uc3QgYm9keVdpdGhvdXRUYWdzID0geyAuLi5wcm9wZXJ0aWVzIH07XG4gICAgZGVsZXRlIGJvZHlXaXRob3V0VGFncy50YWdzO1xuXG4gICAgLy8gQnVpbGQgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgZ2VuZXJhdGVkIEFaQVBJIFJlc291cmNlIGNsYXNzXG4gICAgLy8gQWRkIGxvY2F0aW9uIG9ubHkgaWY6XG4gICAgLy8gMS4gVGhpcyBpcyBhIHRvcC1sZXZlbCByZXNvdXJjZSAobm90IGEgY2hpbGQgcmVzb3VyY2UpXG4gICAgLy8gMi4gTG9jYXRpb24gaXMgcHJvdmlkZWQgYXMgcGFyYW1ldGVyXG4gICAgLy8gMy4gTG9jYXRpb24gaXMgbm90IGFscmVhZHkgaW4gdGhlIGJvZHlcbiAgICAvLyBDaGlsZCByZXNvdXJjZXMgaW5oZXJpdCBsb2NhdGlvbiBmcm9tIHRoZWlyIHBhcmVudCBhbmQgc2hvdWxkIG5vdCBzcGVjaWZ5IGl0XG5cbiAgICAvLyBDb21iaW5lIGRlcGVuZHNPbiBhcnJheXM6IGV4cGxpY2l0IGRlcGVuZGVuY2llcyArIHBhcmVudCByZXNvdXJjZSBkZXBlbmRlbmN5XG4gICAgY29uc3QgY29tYmluZWREZXBlbmRzT246IGNka3RuLklUZXJyYWZvcm1EZXBlbmRhYmxlW10gPSBbXTtcbiAgICBpZiAoZGVwZW5kc09uICYmIGRlcGVuZHNPbi5sZW5ndGggPiAwKSB7XG4gICAgICBjb21iaW5lZERlcGVuZHNPbi5wdXNoKC4uLmRlcGVuZHNPbik7XG4gICAgfVxuXG4gICAgLy8gQ1JJVElDQUw6IEFsd2F5cyBhZGQgcGFyZW50IGRlcGVuZGVuY3kgd2hlbiBwYXJlbnRfaWQgY29udGFpbnMgaW50ZXJwb2xhdGlvbnNcbiAgICAvLyBUaGlzIGVuc3VyZXMgcHJvcGVyIGRlc3Ryb3ktdGltZSBvcmRlcmluZyBldmVuIGlmIHBhcmVudCBkZXRlY3Rpb24gZmFpbHNcbiAgICBpZiAocGFyZW50UmVzb3VyY2U/LnRlcnJhZm9ybVJlc291cmNlKSB7XG4gICAgICBjb21iaW5lZERlcGVuZHNPbi5wdXNoKHBhcmVudFJlc291cmNlLnRlcnJhZm9ybVJlc291cmNlKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgYmFzZSBjb25maWd1cmF0aW9uXG4gICAgbGV0IGNvbmZpZzogUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICB0eXBlOiBgJHt0aGlzLl9yZXNvdXJjZVR5cGV9QCR7dGhpcy5hcGlWZXJzaW9ufWAsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgcGFyZW50SWQ6IHBhcmVudElkLFxuICAgICAgYm9keTogYm9keVdpdGhvdXRUYWdzLFxuICAgICAgLi4uKCFpc0NoaWxkUmVzb3VyY2UgJiYgbG9jYXRpb24gJiYgIXByb3BlcnRpZXMubG9jYXRpb24gJiYgeyBsb2NhdGlvbiB9KSxcbiAgICAgIC8vIEFkZCB0YWdzIGF0IHRoZSB0b3AgbGV2ZWwgb25seSBpZiB0aGlzIHJlc291cmNlIHR5cGUgc3VwcG9ydHMgdGFnc1xuICAgICAgLy8gU29tZSByZXNvdXJjZXMgbGlrZSBQb2xpY3kgRGVmaW5pdGlvbnMgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgICAuLi4odGhpcy5zdXBwb3J0c1RhZ3MoKSAmJlxuICAgICAgICB0YWdzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKHRhZ3MpLmxlbmd0aCA+IDAgJiYgeyB0YWdzIH0pLFxuICAgICAgLy8gQWRkIGRlcGVuZHNfb24gZm9yIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBhbmQgcGFyZW50IHJlc291cmNlXG4gICAgICAuLi4oY29tYmluZWREZXBlbmRzT24ubGVuZ3RoID4gMCAmJiB7IGRlcGVuZHNPbjogY29tYmluZWREZXBlbmRzT24gfSksXG4gICAgfTtcblxuICAgIC8vIEFsbG93IGNoaWxkIGNsYXNzZXMgdG8gY3VzdG9taXplIHRoZSBjb25maWd1cmF0aW9uXG4gICAgY29uZmlnID0gdGhpcy5jdXN0b21pemVSZXNvdXJjZUNvbmZpZyhjb25maWcpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBBWkFQSSByZXNvdXJjZSB1c2luZyB0aGUgZ2VuZXJhdGVkIHByb3ZpZGVyIGNsYXNzXG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZSh0aGlzLCBcInJlc291cmNlXCIsIGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBBWkFQSSBkYXRhIHNvdXJjZSBmb3IgcmVhZGluZyBleGlzdGluZyByZXNvdXJjZXNcbiAgICpcbiAgICogQHBhcmFtIHJlc291cmNlSWQgLSBUaGUgZnVsbCByZXNvdXJjZSBJRFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBUZXJyYWZvcm0gZGF0YSBzb3VyY2VcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVBemFwaURhdGFTb3VyY2UoXG4gICAgcmVzb3VyY2VJZDogc3RyaW5nLFxuICApOiBjZGt0bi5UZXJyYWZvcm1EYXRhU291cmNlIHtcbiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IGNka3RuLlRlcnJhZm9ybURhdGFTb3VyY2UodGhpcywgXCJkYXRhXCIsIHtcbiAgICAgIHRlcnJhZm9ybVJlc291cmNlVHlwZTogXCJhemFwaV9yZXNvdXJjZVwiLFxuICAgICAgdGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGE6IHtcbiAgICAgICAgcHJvdmlkZXJOYW1lOiBcImF6YXBpXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGF0YVNvdXJjZS5hZGRPdmVycmlkZShcInR5cGVcIiwgdGhpcy5fcmVzb3VyY2VUeXBlKTtcbiAgICBkYXRhU291cmNlLmFkZE92ZXJyaWRlKFwicmVzb3VyY2VfaWRcIiwgcmVzb3VyY2VJZCk7XG5cbiAgICByZXR1cm4gZGF0YVNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByZXNvdXJjZSB3aXRoIG5ldyBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIG5ldyBwcm9wZXJ0aWVzIHRvIGFwcGx5XG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlQXphcGlSZXNvdXJjZShwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGVycmFmb3JtUmVzb3VyY2UpIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJib2R5XCIsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmdWxsIHJlc291cmNlIElEXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZT8uZnFuIHx8IHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdW5kZXJseWluZyBUZXJyYWZvcm0gcmVzb3VyY2UgZm9yIHVzZSBpbiBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uc1xuICAgKiBUaGlzIGFsbG93cyBleHBsaWNpdCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQgYmV0d2VlbiByZXNvdXJjZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2UoKTogY2RrdG4uVGVycmFmb3JtUmVzb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlc291cmNlIGFzIGEgVGVycmFmb3JtIG91dHB1dCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBvdXRwdXQoKTogY2RrdG4uVGVycmFmb3JtT3V0cHV0IHtcbiAgICByZXR1cm4gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm91dHB1dFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy50ZXJyYWZvcm1SZXNvdXJjZT8uZnFuLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gYWNjZXNzIHJvbGUgYXNzaWdubWVudCBmb3IgYSBzcGVjaWZpZWQgQXp1cmUgQUQgb2JqZWN0XG4gICAqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIGNyZWF0ZXMgcm9sZSBhc3NpZ25tZW50cyB1c2luZyBBWkFQSSBpbnN0ZWFkIG9mIEF6dXJlUk0gcHJvdmlkZXIuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3RJZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgQXp1cmUgQUQgb2JqZWN0XG4gICAqIEBwYXJhbSByb2xlRGVmaW5pdGlvbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgQXp1cmUgUkJBQyByb2xlIHRvIGJlIGFzc2lnbmVkXG4gICAqL1xuICBwdWJsaWMgYWRkQWNjZXNzKG9iamVjdElkOiBzdHJpbmcsIHJvbGVEZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IEF6YXBpUm9sZUFzc2lnbm1lbnQodGhpcywgYHJiYWMtJHtvYmplY3RJZH0tJHtyb2xlRGVmaW5pdGlvbk5hbWV9YCwge1xuICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxuICAgICAgcm9sZURlZmluaXRpb25OYW1lOiByb2xlRGVmaW5pdGlvbk5hbWUsXG4gICAgICBzY29wZTogdGhpcy5yZXNvdXJjZUlkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB0YWcgdG8gdGhpcyByZXNvdXJjZS4gVGhlIHRhZyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBBenVyZSByZXNvdXJjZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgcHJvcGVyIGltbXV0YWJpbGl0eSBieSBzdG9yaW5nIHRhZ3Mgc2VwYXJhdGVseSBmcm9tIHByb3BzLlxuICAgKiBUYWdzIGFkZGVkIHZpYSB0aGlzIG1ldGhvZCBhcmUgY29tYmluZWQgd2l0aCB0YWdzIGZyb20gcHJvcHMgYW5kIGluY2x1ZGVkIGluXG4gICAqIHRoZSBkZXBsb3llZCBBenVyZSByZXNvdXJjZS5cbiAgICpcbiAgICogKipJbXBvcnRhbnQ6KiogSW4gQ0RLIGZvciBUZXJyYWZvcm0sIHRhZ3Mgc2hvdWxkIGlkZWFsbHkgYmUgc2V0IGR1cmluZyByZXNvdXJjZVxuICAgKiBjb25zdHJ1Y3Rpb24gdmlhIHByb3BzLiBXaGlsZSB0aGlzIG1ldGhvZCBhbGxvd3MgYWRkaW5nIHRhZ3MgYWZ0ZXIgY29uc3RydWN0aW9uLFxuICAgKiB0aG9zZSB0YWdzIGFyZSBvbmx5IGluY2x1ZGVkIGlmIGFkZGVkIGJlZm9yZSB0aGUgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gaXNcbiAgICogc3ludGhlc2l6ZWQuIEZvciBiZXN0IHJlc3VsdHMsIGFkZCBhbGwgdGFncyB2aWEgcHJvcHMgb3IgY2FsbCBhZGRUYWcoKSBpbiB0aGVcbiAgICogc2FtZSBzY29wZSB3aGVyZSB0aGUgcmVzb3VyY2UgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSB0YWcga2V5XG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0YWcgdmFsdWVcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVzb3VyY2UgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IHRhZ3NcbiAgICovXG4gIHB1YmxpYyBhZGRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VwcG9ydHNUYWdzKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBhZGQgdGFncyB0byAke3RoaXMucmVzb3VyY2VUeXBlKCl9OiB0aGlzIHJlc291cmNlIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0YWdzYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3RhZ3Nba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCB0YWdzIG9uIHRoaXMgcmVzb3VyY2UgKHJlYWRvbmx5IHZpZXcpXG4gICAqXG4gICAqIFRoaXMgZ2V0dGVyIHByb3ZpZGVzIGNvbnZlbmllbnQgYWNjZXNzIHRvIGFsbCB0YWdzIGluY2x1ZGluZyB0aG9zZSBmcm9tIHByb3BzXG4gICAqIGFuZCB0aG9zZSBhZGRlZCBkeW5hbWljYWxseSB2aWEgYWRkVGFnKCkuIFJldHVybnMgYSBjb3B5IHRvIG1haW50YWluIGltbXV0YWJpbGl0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFncygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4geyAuLi50aGlzLl90YWdzIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvdGVjdGVkIG1ldGhvZCB0byByZXRyaWV2ZSBhbGwgdGFncyBmb3IgdXNlIGluIGNyZWF0ZVJlc291cmNlQm9keSBpbXBsZW1lbnRhdGlvbnNcbiAgICpcbiAgICogU3ViY2xhc3NlcyBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIHdoZW4gY3JlYXRpbmcgcmVzb3VyY2UgYm9kaWVzIHRvIGVuc3VyZVxuICAgKiBhbGwgdGFncyAoZnJvbSBwcm9wcyBhbmQgYWRkVGFnKCkpIGFyZSBpbmNsdWRlZCBpbiB0aGUgQXp1cmUgcmVzb3VyY2UuXG4gICAqIFVzZXMgYSBub24tZ2V0dGVyIG5hbWUgdG8gYXZvaWQgSlNJSSBjb25mbGljdHMgd2l0aCB0aGUgdGFncyBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRhZ3NcbiAgICovXG4gIHByb3RlY3RlZCBhbGxUYWdzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX3RhZ3MgfTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSEVMUEVSIENMQVNTRVMgQU5EIElOVEVSRkFDRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgQVpBUEkgcm9sZSBhc3NpZ25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXphcGlSb2xlQXNzaWdubWVudFByb3BzIHtcbiAgcmVhZG9ubHkgb2JqZWN0SWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcm9sZURlZmluaXRpb25OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3BlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVpBUEktYmFzZWQgcm9sZSBhc3NpZ25tZW50IGNvbnN0cnVjdFxuICovXG5leHBvcnQgY2xhc3MgQXphcGlSb2xlQXNzaWdubWVudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBemFwaVJvbGVBc3NpZ25tZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIHByaW5jaXBhbElkOiBwcm9wcy5vYmplY3RJZCxcbiAgICAgIHJvbGVEZWZpbml0aW9uSWQ6IGBbc3Vic2NyaXB0aW9uUmVzb3VyY2VJZCgnTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcm9sZURlZmluaXRpb25zJywgcm9sZURlZmluaXRpb25JZCgnJHtwcm9wcy5yb2xlRGVmaW5pdGlvbk5hbWV9JykpXWAsXG4gICAgICBzY29wZTogcHJvcHMuc2NvcGUsXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbmZpZzogUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICB0eXBlOiBcIk1pY3Jvc29mdC5BdXRob3JpemF0aW9uL3JvbGVBc3NpZ25tZW50c1wiLFxuICAgICAgbmFtZTogXCJbZ3VpZCgpXVwiLFxuICAgICAgcGFyZW50SWQ6IHByb3BzLnNjb3BlLFxuICAgICAgYm9keTogcHJvcGVydGllcyxcbiAgICB9O1xuICAgIG5ldyBSZXNvdXJjZSh0aGlzLCBcInJvbGUtYXNzaWdubWVudFwiLCBjb25maWcpO1xuICB9XG59XG4iXX0=
|