UNPKG

@cdktf/provider-google

Version:

Prebuilt google Provider for Terraform CDK (cdktf)

521 lines 77.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataGoogleContainerCluster = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); /** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ // generated from terraform resource schema const index_structs_1 = require("./index-structs"); __exportStar(require("./index-structs"), exports); const cdktf = require("cdktf"); /** * Represents a {@link https://registry.terraform.io/providers/hashicorp/google/6.36.0/docs/data-sources/container_cluster google_container_cluster} */ class DataGoogleContainerCluster extends cdktf.TerraformDataSource { // ============== // STATIC Methods // ============== /** * Generates CDKTF code for importing a DataGoogleContainerCluster resource upon running "cdktf plan <stack-name>" * @param scope The scope in which to define this construct * @param importToId The construct id used in the generated config for the DataGoogleContainerCluster to import * @param importFromId The id of the existing DataGoogleContainerCluster that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.36.0/docs/data-sources/container_cluster#import import section} in the documentation of this resource for the id to use * @param provider? Optional instance of the provider where the DataGoogleContainerCluster to import is found */ static generateConfigForImport(scope, importToId, importFromId, provider) { return new cdktf.ImportableResource(scope, importToId, { terraformResourceType: "google_container_cluster", importId: importFromId, provider }); } // =========== // INITIALIZER // =========== /** * Create a new {@link https://registry.terraform.io/providers/hashicorp/google/6.36.0/docs/data-sources/container_cluster google_container_cluster} Data Source * * @param scope The scope in which to define this construct * @param id The scoped construct ID. Must be unique amongst siblings in the same scope * @param options DataGoogleContainerClusterConfig */ constructor(scope, id, config) { super(scope, id, { terraformResourceType: 'google_container_cluster', terraformGeneratorMetadata: { providerName: 'google', providerVersion: '6.36.0', providerVersionConstraint: '~> 6.0' }, provider: config.provider, dependsOn: config.dependsOn, count: config.count, lifecycle: config.lifecycle, provisioners: config.provisioners, connection: config.connection, forEach: config.forEach }); // ========== // ATTRIBUTES // ========== // addons_config - computed: true, optional: false, required: false this._addonsConfig = new index_structs_1.DataGoogleContainerClusterAddonsConfigList(this, "addons_config", false); // authenticator_groups_config - computed: true, optional: false, required: false this._authenticatorGroupsConfig = new index_structs_1.DataGoogleContainerClusterAuthenticatorGroupsConfigList(this, "authenticator_groups_config", false); // binary_authorization - computed: true, optional: false, required: false this._binaryAuthorization = new index_structs_1.DataGoogleContainerClusterBinaryAuthorizationList(this, "binary_authorization", false); // cluster_autoscaling - computed: true, optional: false, required: false this._clusterAutoscaling = new index_structs_1.DataGoogleContainerClusterClusterAutoscalingList(this, "cluster_autoscaling", false); // confidential_nodes - computed: true, optional: false, required: false this._confidentialNodes = new index_structs_1.DataGoogleContainerClusterConfidentialNodesList(this, "confidential_nodes", false); // control_plane_endpoints_config - computed: true, optional: false, required: false this._controlPlaneEndpointsConfig = new index_structs_1.DataGoogleContainerClusterControlPlaneEndpointsConfigList(this, "control_plane_endpoints_config", false); // cost_management_config - computed: true, optional: false, required: false this._costManagementConfig = new index_structs_1.DataGoogleContainerClusterCostManagementConfigList(this, "cost_management_config", false); // database_encryption - computed: true, optional: false, required: false this._databaseEncryption = new index_structs_1.DataGoogleContainerClusterDatabaseEncryptionList(this, "database_encryption", false); // default_snat_status - computed: true, optional: false, required: false this._defaultSnatStatus = new index_structs_1.DataGoogleContainerClusterDefaultSnatStatusList(this, "default_snat_status", false); // dns_config - computed: true, optional: false, required: false this._dnsConfig = new index_structs_1.DataGoogleContainerClusterDnsConfigList(this, "dns_config", false); // effective_labels - computed: true, optional: false, required: false this._effectiveLabels = new cdktf.StringMap(this, "effective_labels"); // enable_k8s_beta_apis - computed: true, optional: false, required: false this._enableK8SBetaApis = new index_structs_1.DataGoogleContainerClusterEnableK8SBetaApisList(this, "enable_k8s_beta_apis", false); // enterprise_config - computed: true, optional: false, required: false this._enterpriseConfig = new index_structs_1.DataGoogleContainerClusterEnterpriseConfigList(this, "enterprise_config", false); // fleet - computed: true, optional: false, required: false this._fleet = new index_structs_1.DataGoogleContainerClusterFleetList(this, "fleet", false); // gateway_api_config - computed: true, optional: false, required: false this._gatewayApiConfig = new index_structs_1.DataGoogleContainerClusterGatewayApiConfigList(this, "gateway_api_config", false); // identity_service_config - computed: true, optional: false, required: false this._identityServiceConfig = new index_structs_1.DataGoogleContainerClusterIdentityServiceConfigList(this, "identity_service_config", false); // ip_allocation_policy - computed: true, optional: false, required: false this._ipAllocationPolicy = new index_structs_1.DataGoogleContainerClusterIpAllocationPolicyList(this, "ip_allocation_policy", false); // logging_config - computed: true, optional: false, required: false this._loggingConfig = new index_structs_1.DataGoogleContainerClusterLoggingConfigList(this, "logging_config", false); // maintenance_policy - computed: true, optional: false, required: false this._maintenancePolicy = new index_structs_1.DataGoogleContainerClusterMaintenancePolicyList(this, "maintenance_policy", false); // master_auth - computed: true, optional: false, required: false this._masterAuth = new index_structs_1.DataGoogleContainerClusterMasterAuthList(this, "master_auth", false); // master_authorized_networks_config - computed: true, optional: false, required: false this._masterAuthorizedNetworksConfig = new index_structs_1.DataGoogleContainerClusterMasterAuthorizedNetworksConfigList(this, "master_authorized_networks_config", false); // mesh_certificates - computed: true, optional: false, required: false this._meshCertificates = new index_structs_1.DataGoogleContainerClusterMeshCertificatesList(this, "mesh_certificates", false); // monitoring_config - computed: true, optional: false, required: false this._monitoringConfig = new index_structs_1.DataGoogleContainerClusterMonitoringConfigList(this, "monitoring_config", false); // network_policy - computed: true, optional: false, required: false this._networkPolicy = new index_structs_1.DataGoogleContainerClusterNetworkPolicyList(this, "network_policy", false); // node_config - computed: true, optional: false, required: false this._nodeConfig = new index_structs_1.DataGoogleContainerClusterNodeConfigList(this, "node_config", false); // node_pool - computed: true, optional: false, required: false this._nodePool = new index_structs_1.DataGoogleContainerClusterNodePoolList(this, "node_pool", false); // node_pool_auto_config - computed: true, optional: false, required: false this._nodePoolAutoConfig = new index_structs_1.DataGoogleContainerClusterNodePoolAutoConfigList(this, "node_pool_auto_config", false); // node_pool_defaults - computed: true, optional: false, required: false this._nodePoolDefaults = new index_structs_1.DataGoogleContainerClusterNodePoolDefaultsList(this, "node_pool_defaults", false); // notification_config - computed: true, optional: false, required: false this._notificationConfig = new index_structs_1.DataGoogleContainerClusterNotificationConfigList(this, "notification_config", false); // private_cluster_config - computed: true, optional: false, required: false this._privateClusterConfig = new index_structs_1.DataGoogleContainerClusterPrivateClusterConfigList(this, "private_cluster_config", false); // release_channel - computed: true, optional: false, required: false this._releaseChannel = new index_structs_1.DataGoogleContainerClusterReleaseChannelList(this, "release_channel", false); // resource_labels - computed: true, optional: false, required: false this._resourceLabels = new cdktf.StringMap(this, "resource_labels"); // resource_usage_export_config - computed: true, optional: false, required: false this._resourceUsageExportConfig = new index_structs_1.DataGoogleContainerClusterResourceUsageExportConfigList(this, "resource_usage_export_config", false); // secret_manager_config - computed: true, optional: false, required: false this._secretManagerConfig = new index_structs_1.DataGoogleContainerClusterSecretManagerConfigList(this, "secret_manager_config", false); // security_posture_config - computed: true, optional: false, required: false this._securityPostureConfig = new index_structs_1.DataGoogleContainerClusterSecurityPostureConfigList(this, "security_posture_config", false); // service_external_ips_config - computed: true, optional: false, required: false this._serviceExternalIpsConfig = new index_structs_1.DataGoogleContainerClusterServiceExternalIpsConfigList(this, "service_external_ips_config", false); // terraform_labels - computed: true, optional: false, required: false this._terraformLabels = new cdktf.StringMap(this, "terraform_labels"); // user_managed_keys_config - computed: true, optional: false, required: false this._userManagedKeysConfig = new index_structs_1.DataGoogleContainerClusterUserManagedKeysConfigList(this, "user_managed_keys_config", false); // vertical_pod_autoscaling - computed: true, optional: false, required: false this._verticalPodAutoscaling = new index_structs_1.DataGoogleContainerClusterVerticalPodAutoscalingList(this, "vertical_pod_autoscaling", false); // workload_identity_config - computed: true, optional: false, required: false this._workloadIdentityConfig = new index_structs_1.DataGoogleContainerClusterWorkloadIdentityConfigList(this, "workload_identity_config", false); this._id = config.id; this._location = config.location; this._name = config.name; this._project = config.project; } get addonsConfig() { return this._addonsConfig; } // allow_net_admin - computed: true, optional: false, required: false get allowNetAdmin() { return this.getBooleanAttribute('allow_net_admin'); } get authenticatorGroupsConfig() { return this._authenticatorGroupsConfig; } get binaryAuthorization() { return this._binaryAuthorization; } get clusterAutoscaling() { return this._clusterAutoscaling; } // cluster_ipv4_cidr - computed: true, optional: false, required: false get clusterIpv4Cidr() { return this.getStringAttribute('cluster_ipv4_cidr'); } get confidentialNodes() { return this._confidentialNodes; } get controlPlaneEndpointsConfig() { return this._controlPlaneEndpointsConfig; } get costManagementConfig() { return this._costManagementConfig; } get databaseEncryption() { return this._databaseEncryption; } // datapath_provider - computed: true, optional: false, required: false get datapathProvider() { return this.getStringAttribute('datapath_provider'); } // default_max_pods_per_node - computed: true, optional: false, required: false get defaultMaxPodsPerNode() { return this.getNumberAttribute('default_max_pods_per_node'); } get defaultSnatStatus() { return this._defaultSnatStatus; } // deletion_protection - computed: true, optional: false, required: false get deletionProtection() { return this.getBooleanAttribute('deletion_protection'); } // description - computed: true, optional: false, required: false get description() { return this.getStringAttribute('description'); } // disable_l4_lb_firewall_reconciliation - computed: true, optional: false, required: false get disableL4LbFirewallReconciliation() { return this.getBooleanAttribute('disable_l4_lb_firewall_reconciliation'); } get dnsConfig() { return this._dnsConfig; } get effectiveLabels() { return this._effectiveLabels; } // enable_autopilot - computed: true, optional: false, required: false get enableAutopilot() { return this.getBooleanAttribute('enable_autopilot'); } // enable_cilium_clusterwide_network_policy - computed: true, optional: false, required: false get enableCiliumClusterwideNetworkPolicy() { return this.getBooleanAttribute('enable_cilium_clusterwide_network_policy'); } // enable_fqdn_network_policy - computed: true, optional: false, required: false get enableFqdnNetworkPolicy() { return this.getBooleanAttribute('enable_fqdn_network_policy'); } // enable_intranode_visibility - computed: true, optional: false, required: false get enableIntranodeVisibility() { return this.getBooleanAttribute('enable_intranode_visibility'); } get enableK8SBetaApis() { return this._enableK8SBetaApis; } // enable_kubernetes_alpha - computed: true, optional: false, required: false get enableKubernetesAlpha() { return this.getBooleanAttribute('enable_kubernetes_alpha'); } // enable_l4_ilb_subsetting - computed: true, optional: false, required: false get enableL4IlbSubsetting() { return this.getBooleanAttribute('enable_l4_ilb_subsetting'); } // enable_legacy_abac - computed: true, optional: false, required: false get enableLegacyAbac() { return this.getBooleanAttribute('enable_legacy_abac'); } // enable_multi_networking - computed: true, optional: false, required: false get enableMultiNetworking() { return this.getBooleanAttribute('enable_multi_networking'); } // enable_shielded_nodes - computed: true, optional: false, required: false get enableShieldedNodes() { return this.getBooleanAttribute('enable_shielded_nodes'); } // enable_tpu - computed: true, optional: false, required: false get enableTpu() { return this.getBooleanAttribute('enable_tpu'); } // endpoint - computed: true, optional: false, required: false get endpoint() { return this.getStringAttribute('endpoint'); } get enterpriseConfig() { return this._enterpriseConfig; } get fleet() { return this._fleet; } get gatewayApiConfig() { return this._gatewayApiConfig; } get id() { return this.getStringAttribute('id'); } set id(value) { this._id = value; } resetId() { this._id = undefined; } // Temporarily expose input value. Use with caution. get idInput() { return this._id; } get identityServiceConfig() { return this._identityServiceConfig; } // in_transit_encryption_config - computed: true, optional: false, required: false get inTransitEncryptionConfig() { return this.getStringAttribute('in_transit_encryption_config'); } // initial_node_count - computed: true, optional: false, required: false get initialNodeCount() { return this.getNumberAttribute('initial_node_count'); } get ipAllocationPolicy() { return this._ipAllocationPolicy; } // label_fingerprint - computed: true, optional: false, required: false get labelFingerprint() { return this.getStringAttribute('label_fingerprint'); } get location() { return this.getStringAttribute('location'); } set location(value) { this._location = value; } resetLocation() { this._location = undefined; } // Temporarily expose input value. Use with caution. get locationInput() { return this._location; } get loggingConfig() { return this._loggingConfig; } // logging_service - computed: true, optional: false, required: false get loggingService() { return this.getStringAttribute('logging_service'); } get maintenancePolicy() { return this._maintenancePolicy; } get masterAuth() { return this._masterAuth; } get masterAuthorizedNetworksConfig() { return this._masterAuthorizedNetworksConfig; } // master_version - computed: true, optional: false, required: false get masterVersion() { return this.getStringAttribute('master_version'); } get meshCertificates() { return this._meshCertificates; } // min_master_version - computed: true, optional: false, required: false get minMasterVersion() { return this.getStringAttribute('min_master_version'); } get monitoringConfig() { return this._monitoringConfig; } // monitoring_service - computed: true, optional: false, required: false get monitoringService() { return this.getStringAttribute('monitoring_service'); } get name() { return this.getStringAttribute('name'); } set name(value) { this._name = value; } // Temporarily expose input value. Use with caution. get nameInput() { return this._name; } // network - computed: true, optional: false, required: false get network() { return this.getStringAttribute('network'); } get networkPolicy() { return this._networkPolicy; } // networking_mode - computed: true, optional: false, required: false get networkingMode() { return this.getStringAttribute('networking_mode'); } get nodeConfig() { return this._nodeConfig; } // node_locations - computed: true, optional: false, required: false get nodeLocations() { return cdktf.Fn.tolist(this.getListAttribute('node_locations')); } get nodePool() { return this._nodePool; } get nodePoolAutoConfig() { return this._nodePoolAutoConfig; } get nodePoolDefaults() { return this._nodePoolDefaults; } // node_version - computed: true, optional: false, required: false get nodeVersion() { return this.getStringAttribute('node_version'); } get notificationConfig() { return this._notificationConfig; } // operation - computed: true, optional: false, required: false get operation() { return this.getStringAttribute('operation'); } get privateClusterConfig() { return this._privateClusterConfig; } // private_ipv6_google_access - computed: true, optional: false, required: false get privateIpv6GoogleAccess() { return this.getStringAttribute('private_ipv6_google_access'); } get project() { return this.getStringAttribute('project'); } set project(value) { this._project = value; } resetProject() { this._project = undefined; } // Temporarily expose input value. Use with caution. get projectInput() { return this._project; } get releaseChannel() { return this._releaseChannel; } // remove_default_node_pool - computed: true, optional: false, required: false get removeDefaultNodePool() { return this.getBooleanAttribute('remove_default_node_pool'); } get resourceLabels() { return this._resourceLabels; } get resourceUsageExportConfig() { return this._resourceUsageExportConfig; } get secretManagerConfig() { return this._secretManagerConfig; } get securityPostureConfig() { return this._securityPostureConfig; } // self_link - computed: true, optional: false, required: false get selfLink() { return this.getStringAttribute('self_link'); } get serviceExternalIpsConfig() { return this._serviceExternalIpsConfig; } // services_ipv4_cidr - computed: true, optional: false, required: false get servicesIpv4Cidr() { return this.getStringAttribute('services_ipv4_cidr'); } // subnetwork - computed: true, optional: false, required: false get subnetwork() { return this.getStringAttribute('subnetwork'); } get terraformLabels() { return this._terraformLabels; } // tpu_ipv4_cidr_block - computed: true, optional: false, required: false get tpuIpv4CidrBlock() { return this.getStringAttribute('tpu_ipv4_cidr_block'); } get userManagedKeysConfig() { return this._userManagedKeysConfig; } get verticalPodAutoscaling() { return this._verticalPodAutoscaling; } get workloadIdentityConfig() { return this._workloadIdentityConfig; } // ========= // SYNTHESIS // ========= synthesizeAttributes() { return { id: cdktf.stringToTerraform(this._id), location: cdktf.stringToTerraform(this._location), name: cdktf.stringToTerraform(this._name), project: cdktf.stringToTerraform(this._project), }; } synthesizeHclAttributes() { const attrs = { id: { value: cdktf.stringToHclTerraform(this._id), isBlock: false, type: "simple", storageClassType: "string", }, location: { value: cdktf.stringToHclTerraform(this._location), isBlock: false, type: "simple", storageClassType: "string", }, name: { value: cdktf.stringToHclTerraform(this._name), isBlock: false, type: "simple", storageClassType: "string", }, project: { value: cdktf.stringToHclTerraform(this._project), isBlock: false, type: "simple", storageClassType: "string", }, }; // remove undefined attributes return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined)); } } exports.DataGoogleContainerCluster = DataGoogleContainerCluster; _a = JSII_RTTI_SYMBOL_1; DataGoogleContainerCluster[_a] = { fqn: "@cdktf/provider-google.dataGoogleContainerCluster.DataGoogleContainerCluster", version: "14.35.0" }; // ================= // STATIC PROPERTIES // ================= DataGoogleContainerCluster.tfResourceType = "google_container_cluster"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS1nb29nbGUtY29udGFpbmVyLWNsdXN0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7R0FHRztBQUVILDJDQUEyQztBQUUzQyxtREFvQzRFO0FBQzVFLGtEQUErQjtBQUUvQiwrQkFBK0I7QUE2Qi9COztFQUVFO0FBQ0YsTUFBYSwwQkFBMkIsU0FBUSxLQUFLLENBQUMsbUJBQW1CO0lBT3ZFLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCOzs7Ozs7TUFNRTtJQUNLLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFnQixFQUFFLFVBQWtCLEVBQUUsWUFBb0IsRUFBRSxRQUFrQztRQUM5SCxPQUFPLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEosQ0FBQztJQUVMLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUVkOzs7Ozs7TUFNRTtJQUNGLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE1BQXdDO1FBQ3ZGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YscUJBQXFCLEVBQUUsMEJBQTBCO1lBQ2pELDBCQUEwQixFQUFFO2dCQUMxQixZQUFZLEVBQUUsUUFBUTtnQkFDdEIsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLHlCQUF5QixFQUFFLFFBQVE7YUFDcEM7WUFDRCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsWUFBWSxFQUFF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QUMzQyxPQUFPLEVBQUUsS0FBSztnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxnQkFBZ0IsRUFBRSxRQUFRO2FBQzNCO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLEtBQUssRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDakQsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsZ0JBQWdCLEVBQUUsUUFBUTthQUMzQjtZQUNELElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQzdDLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLFFBQVE7YUFDM0I7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxPQUFPLEVBQUUsS0FBSztnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxnQkFBZ0IsRUFBRSxRQUFRO2FBQzNCO1NBQ0YsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBRSxDQUFDLENBQUE7SUFDNUgsQ0FBQzs7QUF0a0JILGdFQXVrQkM7OztBQXJrQkMsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDRyx5Q0FBYyxHQUFHLDBCQUEwQixBQUE3QixDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuLy8gZ2VuZXJhdGVkIGZyb20gdGVycmFmb3JtIHJlc291cmNlIHNjaGVtYVxuXG5pbXBvcnQgeyBEYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckFkZG9uc0NvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJBdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckJpbmFyeUF1dGhvcml6YXRpb25MaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyQ2x1c3RlckF1dG9zY2FsaW5nTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckNvbmZpZGVudGlhbE5vZGVzTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckNvbnRyb2xQbGFuZUVuZHBvaW50c0NvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJDb3N0TWFuYWdlbWVudENvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJEYXRhYmFzZUVuY3J5cHRpb25MaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyRGVmYXVsdFNuYXRTdGF0dXNMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyRG5zQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckVuYWJsZUs4U0JldGFBcGlzTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckVudGVycHJpc2VDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyRmxlZXRMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyR2F0ZXdheUFwaUNvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJJZGVudGl0eVNlcnZpY2VDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVySXBBbGxvY2F0aW9uUG9saWN5TGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckxvZ2dpbmdDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyTWFpbnRlbmFuY2VQb2xpY3lMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyTWFzdGVyQXV0aExpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyTWVzaENlcnRpZmljYXRlc0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJNb25pdG9yaW5nQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3Rlck5ldHdvcmtQb2xpY3lMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyTm9kZUNvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbExpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbEF1dG9Db25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyTm9kZVBvb2xEZWZhdWx0c0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJOb3RpZmljYXRpb25Db25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyUHJpdmF0ZUNsdXN0ZXJDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyUmVsZWFzZUNoYW5uZWxMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyUmVzb3VyY2VVc2FnZUV4cG9ydENvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJTZWNyZXRNYW5hZ2VyQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlclNlY3VyaXR5UG9zdHVyZUNvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJTZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyVXNlck1hbmFnZWRLZXlzQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlclZlcnRpY2FsUG9kQXV0b3NjYWxpbmdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyV29ya2xvYWRJZGVudGl0eUNvbmZpZ0xpc3R9IGZyb20gJy4vaW5kZXgtc3RydWN0cydcbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgtc3RydWN0cydcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSAnY2RrdGYnO1xuZXhwb3J0IGludGVyZmFjZSBEYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckNvbmZpZyBleHRlbmRzIGNka3RmLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMzYuMC9kb2NzL2RhdGEtc291cmNlcy9jb250YWluZXJfY2x1c3RlciNpZCBEYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlciNpZH1cbiAgKlxuICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoZSBpZCBmaWVsZCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGFsbCByZXNvdXJjZXMgaW4gVGVycmFmb3JtIHByb3ZpZGVycyB1c2luZyBhIFRlcnJhZm9ybSBwcm92aWRlciBTREsgdmVyc2lvbiBiZWxvdyAyLlxuICAqIElmIHlvdSBleHBlcmllbmNlIHByb2JsZW1zIHNldHRpbmcgdGhpcyB2YWx1ZSBpdCBtaWdodCBub3QgYmUgc2V0dGFibGUuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCB0aGUgcHJvdmlkZXIgZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgaXQgc2hvdWxkIGJlIHNldHRhYmxlLlxuICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIGxvY2F0aW9uIChyZWdpb24gb3Igem9uZSkgaW4gd2hpY2ggdGhlIGNsdXN0ZXIgbWFzdGVyIHdpbGwgYmUgY3JlYXRlZCwgYXMgd2VsbCBhcyB0aGUgZGVmYXVsdCBub2RlIGxvY2F0aW9uLiBJZiB5b3Ugc3BlY2lmeSBhIHpvbmUgKHN1Y2ggYXMgdXMtY2VudHJhbDEtYSksIHRoZSBjbHVzdGVyIHdpbGwgYmUgYSB6b25hbCBjbHVzdGVyIHdpdGggYSBzaW5nbGUgY2x1c3RlciBtYXN0ZXIuIElmIHlvdSBzcGVjaWZ5IGEgcmVnaW9uIChzdWNoIGFzIHVzLXdlc3QxKSwgdGhlIGNsdXN0ZXIgd2lsbCBiZSBhIHJlZ2lvbmFsIGNsdXN0ZXIgd2l0aCBtdWx0aXBsZSBtYXN0ZXJzIHNwcmVhZCBhY3Jvc3Mgem9uZXMgaW4gdGhlIHJlZ2lvbiwgYW5kIHdpdGggZGVmYXVsdCBub2RlIGxvY2F0aW9ucyBpbiB0aG9zZSB6b25lcyBhcyB3ZWxsLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjM2LjAvZG9jcy9kYXRhLXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjbG9jYXRpb24gRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXIjbG9jYXRpb259XG4gICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgbmFtZSBvZiB0aGUgY2x1c3RlciwgdW5pcXVlIHdpdGhpbiB0aGUgcHJvamVjdCBhbmQgbG9jYXRpb24uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMzYuMC9kb2NzL2RhdGEtc291cmNlcy9jb250YWluZXJfY2x1c3RlciNuYW1lIERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyI25hbWV9XG4gICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICogVGhlIElEIG9mIHRoZSBwcm9qZWN0IGluIHdoaWNoIHRoZSByZXNvdXJjZSBiZWxvbmdzLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHRoZSBwcm92aWRlciBwcm9qZWN0IGlzIHVzZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMzYuMC9kb2NzL2RhdGEtc291cmNlcy9jb250YWluZXJfY2x1c3RlciNwcm9qZWN0IERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyI3Byb2plY3R9XG4gICovXG4gIHJlYWRvbmx5IHByb2plY3Q/OiBzdHJpbmc7XG59XG5cbi8qKlxuKiBSZXByZXNlbnRzIGEge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMzYuMC9kb2NzL2RhdGEtc291cmNlcy9jb250YWluZXJfY2x1c3RlciBnb29nbGVfY29udGFpbmVyX2NsdXN0ZXJ9XG4qL1xuZXhwb3J0IGNsYXNzIERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyIGV4dGVuZHMgY2RrdGYuVGVycmFmb3JtRGF0YVNvdXJjZSB7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIFBST1BFUlRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0ZlJlc291cmNlVHlwZSA9IFwiZ29vZ2xlX2NvbnRhaW5lcl9jbHVzdGVyXCI7XG5cbiAgLy8gPT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT1cbiAgLyoqXG4gICogR2VuZXJhdGVzIENES1RGIGNvZGUgZm9yIGltcG9ydGluZyBhIERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyIHJlc291cmNlIHVwb24gcnVubmluZyBcImNka3RmIHBsYW4gPHN0YWNrLW5hbWU+XCJcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlIERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyIHRvIGltcG9ydFxuICAqIEBwYXJhbSBpbXBvcnRGcm9tSWQgVGhlIGlkIG9mIHRoZSBleGlzdGluZyBEYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlciB0aGF0IHNob3VsZCBiZSBpbXBvcnRlZC4gUmVmZXIgdG8gdGhlIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjM2LjAvZG9jcy9kYXRhLXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjaW1wb3J0IGltcG9ydCBzZWN0aW9ufSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIHJlc291cmNlIGZvciB0aGUgaWQgdG8gdXNlXG4gICogQHBhcmFtIHByb3ZpZGVyPyBPcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZXIgd2hlcmUgdGhlIERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyIHRvIGltcG9ydCBpcyBmb3VuZFxuICAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0KHNjb3BlOiBDb25zdHJ1Y3QsIGltcG9ydFRvSWQ6IHN0cmluZywgaW1wb3J0RnJvbUlkOiBzdHJpbmcsIHByb3ZpZGVyPzogY2RrdGYuVGVycmFmb3JtUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjZGt0Zi5JbXBvcnRhYmxlUmVzb3VyY2Uoc2NvcGUsIGltcG9ydFRvSWQsIHsgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcImdvb2dsZV9jb250YWluZXJfY2x1c3RlclwiLCBpbXBvcnRJZDogaW1wb3J0RnJvbUlkLCBwcm92aWRlciB9KTtcbiAgICAgIH1cblxuICAvLyA9PT09PT09PT09PVxuICAvLyBJTklUSUFMSVpFUlxuICAvLyA9PT09PT09PT09PVxuXG4gIC8qKlxuICAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4zNi4wL2RvY3MvZGF0YS1zb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyIGdvb2dsZV9jb250YWluZXJfY2x1c3Rlcn0gRGF0YSBTb3VyY2VcbiAgKlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGlkIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSBhbW9uZ3N0IHNpYmxpbmdzIGluIHRoZSBzYW1lIHNjb3BlXG4gICogQHBhcmFtIG9wdGlvbnMgRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJDb25maWdcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlcnJhZm9ybVJlc291cmNlVHlwZTogJ2dvb2dsZV9jb250YWluZXJfY2x1c3RlcicsXG4gICAgICB0ZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlck5hbWU6ICdnb29nbGUnLFxuICAgICAgICBwcm92aWRlclZlcnNpb246ICc2LjM2LjAnLFxuICAgICAgICBwcm92aWRlclZlcnNpb25Db25zdHJhaW50OiAnfj4gNi4wJ1xuICAgICAgfSxcbiAgICAgIHByb3ZpZGVyOiBjb25maWcucHJvdmlkZXIsXG4gICA