# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'LocalRulestackRuleCategoryArgs',
    'LocalRulestackRuleDestinationArgs',
    'LocalRulestackRuleSourceArgs',
    'NextGenerationFirewallVirtualHubLocalRulestackDestinationNatArgs',
    'NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfigArgs',
    'NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfigArgs',
    'NextGenerationFirewallVirtualHubLocalRulestackDnsSettingsArgs',
    'NextGenerationFirewallVirtualHubLocalRulestackNetworkProfileArgs',
    'NextGenerationFirewallVirtualHubPanoramaDestinationNatArgs',
    'NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfigArgs',
    'NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfigArgs',
    'NextGenerationFirewallVirtualHubPanoramaDnsSettingsArgs',
    'NextGenerationFirewallVirtualHubPanoramaNetworkProfileArgs',
    'NextGenerationFirewallVirtualHubPanoramaPanoramaArgs',
    'NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatArgs',
    'NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfigArgs',
    'NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfigArgs',
    'NextGenerationFirewallVirtualNetworkLocalRulestackDnsSettingsArgs',
    'NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileArgs',
    'NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfigurationArgs',
    'NextGenerationFirewallVirtualNetworkPanoramaDestinationNatArgs',
    'NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfigArgs',
    'NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfigArgs',
    'NextGenerationFirewallVirtualNetworkPanoramaDnsSettingsArgs',
    'NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileArgs',
    'NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfigurationArgs',
    'NextGenerationFirewallVirtualNetworkPanoramaPanoramaArgs',
]

@pulumi.input_type
class LocalRulestackRuleCategoryArgs:
    def __init__(__self__, *,
                 custom_urls: pulumi.Input[Sequence[pulumi.Input[str]]],
                 feeds: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] custom_urls: Specifies a list of URL categories to match. Possible values include `abortion`, `abused-drugs`, `adult`, `alcohol-and-tobacco`, `auctions`, `business-and-economy`, `command-and-control`, `computer-and-internet-info`, `content-delivery-networks`, `copyright-infringement`, `cryptocurrency`, `dating`, `dynamic-dns`, `educational-institutions`, `entertainment-and-arts`, `extremism`, `financial-services`, `gambling`, `games`, `government`, `grayware`, `hacking`, `health-and-medicine`, `high-risk`, `home-and-garden`, `hunting-and-fishing`, `insufficient-content`, `internet-communications-and-telephony`, `internet-portals`, `job-search`, `legal`, `low-risk`, `malware`, `medium-risk`, `military`, `motor-vehicles`, `music`, `newly-registered-domain`, `news`, `not-resolved`, `nudity`, `online-storage-and-backup`, `parked`, `peer-to-peer`, `personal-sites-and-blogs`, `philosophy-and-political-advocacy`, `phishing`, `private-ip-addresses`, `proxy-avoidance-and-anonymizers`, `questionable`, `real-estate`, `real-time-detection`, `recreation-and-hobbies`, `reference-and-research`, `religion`, `search-engines`, `sex-education`, `shareware-and-freeware`, `shopping`, `social-networking`, `society`, `sports`, `stock-advice-and-tools`, `streaming-media`, `swimsuits-and-intimate-apparel`, `training-and-tools`, `translation`, `travel`, `unknown`, `weapons`, `web-advertisements`, `web-based-email`, and `web-hosting`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] feeds: Specifies a list of feeds to match.
        """
        pulumi.set(__self__, "custom_urls", custom_urls)
        if feeds is not None:
            pulumi.set(__self__, "feeds", feeds)

    @property
    @pulumi.getter(name="customUrls")
    def custom_urls(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        Specifies a list of URL categories to match. Possible values include `abortion`, `abused-drugs`, `adult`, `alcohol-and-tobacco`, `auctions`, `business-and-economy`, `command-and-control`, `computer-and-internet-info`, `content-delivery-networks`, `copyright-infringement`, `cryptocurrency`, `dating`, `dynamic-dns`, `educational-institutions`, `entertainment-and-arts`, `extremism`, `financial-services`, `gambling`, `games`, `government`, `grayware`, `hacking`, `health-and-medicine`, `high-risk`, `home-and-garden`, `hunting-and-fishing`, `insufficient-content`, `internet-communications-and-telephony`, `internet-portals`, `job-search`, `legal`, `low-risk`, `malware`, `medium-risk`, `military`, `motor-vehicles`, `music`, `newly-registered-domain`, `news`, `not-resolved`, `nudity`, `online-storage-and-backup`, `parked`, `peer-to-peer`, `personal-sites-and-blogs`, `philosophy-and-political-advocacy`, `phishing`, `private-ip-addresses`, `proxy-avoidance-and-anonymizers`, `questionable`, `real-estate`, `real-time-detection`, `recreation-and-hobbies`, `reference-and-research`, `religion`, `search-engines`, `sex-education`, `shareware-and-freeware`, `shopping`, `social-networking`, `society`, `sports`, `stock-advice-and-tools`, `streaming-media`, `swimsuits-and-intimate-apparel`, `training-and-tools`, `translation`, `travel`, `unknown`, `weapons`, `web-advertisements`, `web-based-email`, and `web-hosting`.
        """
        return pulumi.get(self, "custom_urls")

    @custom_urls.setter
    def custom_urls(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "custom_urls", value)

    @property
    @pulumi.getter
    def feeds(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of feeds to match.
        """
        return pulumi.get(self, "feeds")

    @feeds.setter
    def feeds(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "feeds", value)


@pulumi.input_type
class LocalRulestackRuleDestinationArgs:
    def __init__(__self__, *,
                 cidrs: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 countries: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 feeds: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 local_rulestack_fqdn_list_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 local_rulestack_prefix_list_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] cidrs: Specifies a list of CIDR's.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] countries: Specifies a list of ISO3361-1 Alpha-2 Country codes. Possible values include `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BQ`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CW`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GG`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IM`, `IL`, `IT`, `JM`, `JP`, `JE`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `ME`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `BL`, `SH`, `KN`, `LC`, `MF`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `RS`, `SC`, `SL`, `SG`, `SX`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `SS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`
        :param pulumi.Input[Sequence[pulumi.Input[str]]] feeds: Specifies a list of Feeds.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] local_rulestack_fqdn_list_ids: Specifies a list of FQDN lists.
               
               > **Note:** This is a list of names of FQDN Lists configured on the same Local Rulestack as this Rule is being created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] local_rulestack_prefix_list_ids: Specifies a list of Prefix Lists.
               
               > **Note:** This is a list of names of Prefix Lists configured on the same Local Rulestack as this Rule is being created.
        """
        if cidrs is not None:
            pulumi.set(__self__, "cidrs", cidrs)
        if countries is not None:
            pulumi.set(__self__, "countries", countries)
        if feeds is not None:
            pulumi.set(__self__, "feeds", feeds)
        if local_rulestack_fqdn_list_ids is not None:
            pulumi.set(__self__, "local_rulestack_fqdn_list_ids", local_rulestack_fqdn_list_ids)
        if local_rulestack_prefix_list_ids is not None:
            pulumi.set(__self__, "local_rulestack_prefix_list_ids", local_rulestack_prefix_list_ids)

    @property
    @pulumi.getter
    def cidrs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of CIDR's.
        """
        return pulumi.get(self, "cidrs")

    @cidrs.setter
    def cidrs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "cidrs", value)

    @property
    @pulumi.getter
    def countries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of ISO3361-1 Alpha-2 Country codes. Possible values include `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BQ`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CW`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GG`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IM`, `IL`, `IT`, `JM`, `JP`, `JE`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `ME`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `BL`, `SH`, `KN`, `LC`, `MF`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `RS`, `SC`, `SL`, `SG`, `SX`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `SS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`
        """
        return pulumi.get(self, "countries")

    @countries.setter
    def countries(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "countries", value)

    @property
    @pulumi.getter
    def feeds(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of Feeds.
        """
        return pulumi.get(self, "feeds")

    @feeds.setter
    def feeds(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "feeds", value)

    @property
    @pulumi.getter(name="localRulestackFqdnListIds")
    def local_rulestack_fqdn_list_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of FQDN lists.

        > **Note:** This is a list of names of FQDN Lists configured on the same Local Rulestack as this Rule is being created.
        """
        return pulumi.get(self, "local_rulestack_fqdn_list_ids")

    @local_rulestack_fqdn_list_ids.setter
    def local_rulestack_fqdn_list_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "local_rulestack_fqdn_list_ids", value)

    @property
    @pulumi.getter(name="localRulestackPrefixListIds")
    def local_rulestack_prefix_list_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of Prefix Lists.

        > **Note:** This is a list of names of Prefix Lists configured on the same Local Rulestack as this Rule is being created.
        """
        return pulumi.get(self, "local_rulestack_prefix_list_ids")

    @local_rulestack_prefix_list_ids.setter
    def local_rulestack_prefix_list_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "local_rulestack_prefix_list_ids", value)


@pulumi.input_type
class LocalRulestackRuleSourceArgs:
    def __init__(__self__, *,
                 cidrs: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 countries: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 feeds: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 local_rulestack_prefix_list_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] cidrs: Specifies a list of CIDRs.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] countries: Specifies a list of ISO3361-1 Alpha-2 Country codes. Possible values include `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BQ`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CW`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GG`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IM`, `IL`, `IT`, `JM`, `JP`, `JE`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `ME`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `BL`, `SH`, `KN`, `LC`, `MF`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `RS`, `SC`, `SL`, `SG`, `SX`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `SS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`
        :param pulumi.Input[Sequence[pulumi.Input[str]]] feeds: Specifies a list of Feeds.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] local_rulestack_prefix_list_ids: Specifies a list of Prefix Lists.
               
               > **Note:** This is a list of names of Prefix Lists configured on the same Local Rulestack as this Rule is being created.
        """
        if cidrs is not None:
            pulumi.set(__self__, "cidrs", cidrs)
        if countries is not None:
            pulumi.set(__self__, "countries", countries)
        if feeds is not None:
            pulumi.set(__self__, "feeds", feeds)
        if local_rulestack_prefix_list_ids is not None:
            pulumi.set(__self__, "local_rulestack_prefix_list_ids", local_rulestack_prefix_list_ids)

    @property
    @pulumi.getter
    def cidrs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of CIDRs.
        """
        return pulumi.get(self, "cidrs")

    @cidrs.setter
    def cidrs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "cidrs", value)

    @property
    @pulumi.getter
    def countries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of ISO3361-1 Alpha-2 Country codes. Possible values include `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BQ`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CW`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GG`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IM`, `IL`, `IT`, `JM`, `JP`, `JE`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `ME`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `BL`, `SH`, `KN`, `LC`, `MF`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `RS`, `SC`, `SL`, `SG`, `SX`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `SS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`
        """
        return pulumi.get(self, "countries")

    @countries.setter
    def countries(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "countries", value)

    @property
    @pulumi.getter
    def feeds(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of Feeds.
        """
        return pulumi.get(self, "feeds")

    @feeds.setter
    def feeds(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "feeds", value)

    @property
    @pulumi.getter(name="localRulestackPrefixListIds")
    def local_rulestack_prefix_list_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of Prefix Lists.

        > **Note:** This is a list of names of Prefix Lists configured on the same Local Rulestack as this Rule is being created.
        """
        return pulumi.get(self, "local_rulestack_prefix_list_ids")

    @local_rulestack_prefix_list_ids.setter
    def local_rulestack_prefix_list_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "local_rulestack_prefix_list_ids", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubLocalRulestackDestinationNatArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 backend_config: Optional[pulumi.Input['NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfigArgs']] = None,
                 frontend_config: Optional[pulumi.Input['NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfigArgs']] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if backend_config is not None:
            pulumi.set(__self__, "backend_config", backend_config)
        if frontend_config is not None:
            pulumi.set(__self__, "frontend_config", frontend_config)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: pulumi.Input[str]):
        pulumi.set(self, "protocol", value)

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> Optional[pulumi.Input['NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfigArgs']]:
        return pulumi.get(self, "backend_config")

    @backend_config.setter
    def backend_config(self, value: Optional[pulumi.Input['NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfigArgs']]):
        pulumi.set(self, "backend_config", value)

    @property
    @pulumi.getter(name="frontendConfig")
    def frontend_config(self) -> Optional[pulumi.Input['NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfigArgs']]:
        return pulumi.get(self, "frontend_config")

    @frontend_config.setter
    def frontend_config(self, value: Optional[pulumi.Input['NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfigArgs']]):
        pulumi.set(self, "frontend_config", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 public_ip_address: pulumi.Input[str]):
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address", public_ip_address)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: pulumi.Input[int]):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter(name="publicIpAddress")
    def public_ip_address(self) -> pulumi.Input[str]:
        return pulumi.get(self, "public_ip_address")

    @public_ip_address.setter
    def public_ip_address(self, value: pulumi.Input[str]):
        pulumi.set(self, "public_ip_address", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 public_ip_address_id: pulumi.Input[str]):
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: pulumi.Input[int]):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "public_ip_address_id")

    @public_ip_address_id.setter
    def public_ip_address_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "public_ip_address_id", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubLocalRulestackDnsSettingsArgs:
    def __init__(__self__, *,
                 azure_dns_servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 dns_servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 use_azure_dns: Optional[pulumi.Input[bool]] = None):
        if azure_dns_servers is not None:
            pulumi.set(__self__, "azure_dns_servers", azure_dns_servers)
        if dns_servers is not None:
            pulumi.set(__self__, "dns_servers", dns_servers)
        if use_azure_dns is not None:
            pulumi.set(__self__, "use_azure_dns", use_azure_dns)

    @property
    @pulumi.getter(name="azureDnsServers")
    def azure_dns_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "azure_dns_servers")

    @azure_dns_servers.setter
    def azure_dns_servers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "azure_dns_servers", value)

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "dns_servers")

    @dns_servers.setter
    def dns_servers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "dns_servers", value)

    @property
    @pulumi.getter(name="useAzureDns")
    def use_azure_dns(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "use_azure_dns")

    @use_azure_dns.setter
    def use_azure_dns(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "use_azure_dns", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubLocalRulestackNetworkProfileArgs:
    def __init__(__self__, *,
                 network_virtual_appliance_id: pulumi.Input[str],
                 public_ip_address_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 virtual_hub_id: pulumi.Input[str],
                 egress_nat_ip_address_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 egress_nat_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ip_of_trust_for_user_defined_routes: Optional[pulumi.Input[str]] = None,
                 public_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 trusted_subnet_id: Optional[pulumi.Input[str]] = None,
                 untrusted_subnet_id: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "network_virtual_appliance_id", network_virtual_appliance_id)
        pulumi.set(__self__, "public_ip_address_ids", public_ip_address_ids)
        pulumi.set(__self__, "virtual_hub_id", virtual_hub_id)
        if egress_nat_ip_address_ids is not None:
            pulumi.set(__self__, "egress_nat_ip_address_ids", egress_nat_ip_address_ids)
        if egress_nat_ip_addresses is not None:
            pulumi.set(__self__, "egress_nat_ip_addresses", egress_nat_ip_addresses)
        if ip_of_trust_for_user_defined_routes is not None:
            pulumi.set(__self__, "ip_of_trust_for_user_defined_routes", ip_of_trust_for_user_defined_routes)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)
        if trusted_subnet_id is not None:
            pulumi.set(__self__, "trusted_subnet_id", trusted_subnet_id)
        if untrusted_subnet_id is not None:
            pulumi.set(__self__, "untrusted_subnet_id", untrusted_subnet_id)

    @property
    @pulumi.getter(name="networkVirtualApplianceId")
    def network_virtual_appliance_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "network_virtual_appliance_id")

    @network_virtual_appliance_id.setter
    def network_virtual_appliance_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "network_virtual_appliance_id", value)

    @property
    @pulumi.getter(name="publicIpAddressIds")
    def public_ip_address_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "public_ip_address_ids")

    @public_ip_address_ids.setter
    def public_ip_address_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "public_ip_address_ids", value)

    @property
    @pulumi.getter(name="virtualHubId")
    def virtual_hub_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "virtual_hub_id")

    @virtual_hub_id.setter
    def virtual_hub_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "virtual_hub_id", value)

    @property
    @pulumi.getter(name="egressNatIpAddressIds")
    def egress_nat_ip_address_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "egress_nat_ip_address_ids")

    @egress_nat_ip_address_ids.setter
    def egress_nat_ip_address_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "egress_nat_ip_address_ids", value)

    @property
    @pulumi.getter(name="egressNatIpAddresses")
    def egress_nat_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "egress_nat_ip_addresses")

    @egress_nat_ip_addresses.setter
    def egress_nat_ip_addresses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "egress_nat_ip_addresses", value)

    @property
    @pulumi.getter(name="ipOfTrustForUserDefinedRoutes")
    def ip_of_trust_for_user_defined_routes(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "ip_of_trust_for_user_defined_routes")

    @ip_of_trust_for_user_defined_routes.setter
    def ip_of_trust_for_user_defined_routes(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "ip_of_trust_for_user_defined_routes", value)

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "public_ip_addresses")

    @public_ip_addresses.setter
    def public_ip_addresses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "public_ip_addresses", value)

    @property
    @pulumi.getter(name="trustedSubnetId")
    def trusted_subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "trusted_subnet_id")

    @trusted_subnet_id.setter
    def trusted_subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "trusted_subnet_id", value)

    @property
    @pulumi.getter(name="untrustedSubnetId")
    def untrusted_subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "untrusted_subnet_id")

    @untrusted_subnet_id.setter
    def untrusted_subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "untrusted_subnet_id", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubPanoramaDestinationNatArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 backend_config: Optional[pulumi.Input['NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfigArgs']] = None,
                 frontend_config: Optional[pulumi.Input['NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfigArgs']] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if backend_config is not None:
            pulumi.set(__self__, "backend_config", backend_config)
        if frontend_config is not None:
            pulumi.set(__self__, "frontend_config", frontend_config)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: pulumi.Input[str]):
        pulumi.set(self, "protocol", value)

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> Optional[pulumi.Input['NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfigArgs']]:
        return pulumi.get(self, "backend_config")

    @backend_config.setter
    def backend_config(self, value: Optional[pulumi.Input['NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfigArgs']]):
        pulumi.set(self, "backend_config", value)

    @property
    @pulumi.getter(name="frontendConfig")
    def frontend_config(self) -> Optional[pulumi.Input['NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfigArgs']]:
        return pulumi.get(self, "frontend_config")

    @frontend_config.setter
    def frontend_config(self, value: Optional[pulumi.Input['NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfigArgs']]):
        pulumi.set(self, "frontend_config", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 public_ip_address: pulumi.Input[str]):
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address", public_ip_address)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: pulumi.Input[int]):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter(name="publicIpAddress")
    def public_ip_address(self) -> pulumi.Input[str]:
        return pulumi.get(self, "public_ip_address")

    @public_ip_address.setter
    def public_ip_address(self, value: pulumi.Input[str]):
        pulumi.set(self, "public_ip_address", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 public_ip_address_id: pulumi.Input[str]):
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: pulumi.Input[int]):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "public_ip_address_id")

    @public_ip_address_id.setter
    def public_ip_address_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "public_ip_address_id", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubPanoramaDnsSettingsArgs:
    def __init__(__self__, *,
                 azure_dns_servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 dns_servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 use_azure_dns: Optional[pulumi.Input[bool]] = None):
        if azure_dns_servers is not None:
            pulumi.set(__self__, "azure_dns_servers", azure_dns_servers)
        if dns_servers is not None:
            pulumi.set(__self__, "dns_servers", dns_servers)
        if use_azure_dns is not None:
            pulumi.set(__self__, "use_azure_dns", use_azure_dns)

    @property
    @pulumi.getter(name="azureDnsServers")
    def azure_dns_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "azure_dns_servers")

    @azure_dns_servers.setter
    def azure_dns_servers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "azure_dns_servers", value)

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "dns_servers")

    @dns_servers.setter
    def dns_servers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "dns_servers", value)

    @property
    @pulumi.getter(name="useAzureDns")
    def use_azure_dns(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "use_azure_dns")

    @use_azure_dns.setter
    def use_azure_dns(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "use_azure_dns", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubPanoramaNetworkProfileArgs:
    def __init__(__self__, *,
                 network_virtual_appliance_id: pulumi.Input[str],
                 public_ip_address_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 virtual_hub_id: pulumi.Input[str],
                 egress_nat_ip_address_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 egress_nat_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ip_of_trust_for_user_defined_routes: Optional[pulumi.Input[str]] = None,
                 public_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 trusted_subnet_id: Optional[pulumi.Input[str]] = None,
                 untrusted_subnet_id: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "network_virtual_appliance_id", network_virtual_appliance_id)
        pulumi.set(__self__, "public_ip_address_ids", public_ip_address_ids)
        pulumi.set(__self__, "virtual_hub_id", virtual_hub_id)
        if egress_nat_ip_address_ids is not None:
            pulumi.set(__self__, "egress_nat_ip_address_ids", egress_nat_ip_address_ids)
        if egress_nat_ip_addresses is not None:
            pulumi.set(__self__, "egress_nat_ip_addresses", egress_nat_ip_addresses)
        if ip_of_trust_for_user_defined_routes is not None:
            pulumi.set(__self__, "ip_of_trust_for_user_defined_routes", ip_of_trust_for_user_defined_routes)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)
        if trusted_subnet_id is not None:
            pulumi.set(__self__, "trusted_subnet_id", trusted_subnet_id)
        if untrusted_subnet_id is not None:
            pulumi.set(__self__, "untrusted_subnet_id", untrusted_subnet_id)

    @property
    @pulumi.getter(name="networkVirtualApplianceId")
    def network_virtual_appliance_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "network_virtual_appliance_id")

    @network_virtual_appliance_id.setter
    def network_virtual_appliance_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "network_virtual_appliance_id", value)

    @property
    @pulumi.getter(name="publicIpAddressIds")
    def public_ip_address_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "public_ip_address_ids")

    @public_ip_address_ids.setter
    def public_ip_address_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "public_ip_address_ids", value)

    @property
    @pulumi.getter(name="virtualHubId")
    def virtual_hub_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "virtual_hub_id")

    @virtual_hub_id.setter
    def virtual_hub_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "virtual_hub_id", value)

    @property
    @pulumi.getter(name="egressNatIpAddressIds")
    def egress_nat_ip_address_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "egress_nat_ip_address_ids")

    @egress_nat_ip_address_ids.setter
    def egress_nat_ip_address_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "egress_nat_ip_address_ids", value)

    @property
    @pulumi.getter(name="egressNatIpAddresses")
    def egress_nat_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "egress_nat_ip_addresses")

    @egress_nat_ip_addresses.setter
    def egress_nat_ip_addresses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "egress_nat_ip_addresses", value)

    @property
    @pulumi.getter(name="ipOfTrustForUserDefinedRoutes")
    def ip_of_trust_for_user_defined_routes(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "ip_of_trust_for_user_defined_routes")

    @ip_of_trust_for_user_defined_routes.setter
    def ip_of_trust_for_user_defined_routes(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "ip_of_trust_for_user_defined_routes", value)

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "public_ip_addresses")

    @public_ip_addresses.setter
    def public_ip_addresses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "public_ip_addresses", value)

    @property
    @pulumi.getter(name="trustedSubnetId")
    def trusted_subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "trusted_subnet_id")

    @trusted_subnet_id.setter
    def trusted_subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "trusted_subnet_id", value)

    @property
    @pulumi.getter(name="untrustedSubnetId")
    def untrusted_subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "untrusted_subnet_id")

    @untrusted_subnet_id.setter
    def untrusted_subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "untrusted_subnet_id", value)


@pulumi.input_type
class NextGenerationFirewallVirtualHubPanoramaPanoramaArgs:
    def __init__(__self__, *,
                 device_group_name: Optional[pulumi.Input[str]] = None,
                 host_name: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 panorama_server1: Optional[pulumi.Input[str]] = None,
                 panorama_server2: Optional[pulumi.Input[str]] = None,
                 template_name: Optional[pulumi.Input[str]] = None,
                 virtual_machine_ssh_key: Optional[pulumi.Input[str]] = None):
        if device_group_name is not None:
            pulumi.set(__self__, "device_group_name", device_group_name)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if panorama_server1 is not None:
            pulumi.set(__self__, "panorama_server1", panorama_server1)
        if panorama_server2 is not None:
            pulumi.set(__self__, "panorama_server2", panorama_server2)
        if template_name is not None:
            pulumi.set(__self__, "template_name", template_name)
        if virtual_machine_ssh_key is not None:
            pulumi.set(__self__, "virtual_machine_ssh_key", virtual_machine_ssh_key)

    @property
    @pulumi.getter(name="deviceGroupName")
    def device_group_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "device_group_name")

    @device_group_name.setter
    def device_group_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "device_group_name", value)

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "host_name")

    @host_name.setter
    def host_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_name", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="panoramaServer1")
    def panorama_server1(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "panorama_server1")

    @panorama_server1.setter
    def panorama_server1(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "panorama_server1", value)

    @property
    @pulumi.getter(name="panoramaServer2")
    def panorama_server2(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "panorama_server2")

    @panorama_server2.setter
    def panorama_server2(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "panorama_server2", value)

    @property
    @pulumi.getter(name="templateName")
    def template_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "template_name")

    @template_name.setter
    def template_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "template_name", value)

    @property
    @pulumi.getter(name="virtualMachineSshKey")
    def virtual_machine_ssh_key(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "virtual_machine_ssh_key")

    @virtual_machine_ssh_key.setter
    def virtual_machine_ssh_key(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_machine_ssh_key", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 backend_config: Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfigArgs']] = None,
                 frontend_config: Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfigArgs']] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this Destination NAT.
        :param pulumi.Input[str] protocol: The Protocol for this Destination NAT configuration. Possible values include `TCP` and `UDP`.
        :param pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfigArgs'] backend_config: A `backend_config` block as defined above.
        :param pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfigArgs'] frontend_config: A `frontend_config` block as defined below.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if backend_config is not None:
            pulumi.set(__self__, "backend_config", backend_config)
        if frontend_config is not None:
            pulumi.set(__self__, "frontend_config", frontend_config)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this Destination NAT.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol for this Destination NAT configuration. Possible values include `TCP` and `UDP`.
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: pulumi.Input[str]):
        pulumi.set(self, "protocol", value)

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfigArgs']]:
        """
        A `backend_config` block as defined above.
        """
        return pulumi.get(self, "backend_config")

    @backend_config.setter
    def backend_config(self, value: Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfigArgs']]):
        pulumi.set(self, "backend_config", value)

    @property
    @pulumi.getter(name="frontendConfig")
    def frontend_config(self) -> Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfigArgs']]:
        """
        A `frontend_config` block as defined below.
        """
        return pulumi.get(self, "frontend_config")

    @frontend_config.setter
    def frontend_config(self, value: Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfigArgs']]):
        pulumi.set(self, "frontend_config", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 public_ip_address: pulumi.Input[str]):
        """
        :param pulumi.Input[int] port: The port number to send traffic to.
        :param pulumi.Input[str] public_ip_address: The IP Address to send the traffic to.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address", public_ip_address)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        The port number to send traffic to.
        """
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: pulumi.Input[int]):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter(name="publicIpAddress")
    def public_ip_address(self) -> pulumi.Input[str]:
        """
        The IP Address to send the traffic to.
        """
        return pulumi.get(self, "public_ip_address")

    @public_ip_address.setter
    def public_ip_address(self, value: pulumi.Input[str]):
        pulumi.set(self, "public_ip_address", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 public_ip_address_id: pulumi.Input[str]):
        """
        :param pulumi.Input[int] port: The port on which to receive traffic.
        :param pulumi.Input[str] public_ip_address_id: The ID of the Public IP Address on which to receive traffic. 
               
               > **Note:** This must be an Azure Public IP address ID also specified in the `public_ip_address_ids` list.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        The port on which to receive traffic.
        """
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: pulumi.Input[int]):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> pulumi.Input[str]:
        """
        The ID of the Public IP Address on which to receive traffic. 

        > **Note:** This must be an Azure Public IP address ID also specified in the `public_ip_address_ids` list.
        """
        return pulumi.get(self, "public_ip_address_id")

    @public_ip_address_id.setter
    def public_ip_address_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "public_ip_address_id", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkLocalRulestackDnsSettingsArgs:
    def __init__(__self__, *,
                 azure_dns_servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 dns_servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 use_azure_dns: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] dns_servers: Specifies a list of DNS servers to use. Conflicts with `dns_settings.0.use_azure_dns`.
        :param pulumi.Input[bool] use_azure_dns: Should the Firewall use Azure Supplied DNS servers. Conflicts with `dns_settings.0.dns_servers`. Defaults to `false`.
        """
        if azure_dns_servers is not None:
            pulumi.set(__self__, "azure_dns_servers", azure_dns_servers)
        if dns_servers is not None:
            pulumi.set(__self__, "dns_servers", dns_servers)
        if use_azure_dns is not None:
            pulumi.set(__self__, "use_azure_dns", use_azure_dns)

    @property
    @pulumi.getter(name="azureDnsServers")
    def azure_dns_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "azure_dns_servers")

    @azure_dns_servers.setter
    def azure_dns_servers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "azure_dns_servers", value)

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of DNS servers to use. Conflicts with `dns_settings.0.use_azure_dns`.
        """
        return pulumi.get(self, "dns_servers")

    @dns_servers.setter
    def dns_servers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "dns_servers", value)

    @property
    @pulumi.getter(name="useAzureDns")
    def use_azure_dns(self) -> Optional[pulumi.Input[bool]]:
        """
        Should the Firewall use Azure Supplied DNS servers. Conflicts with `dns_settings.0.dns_servers`. Defaults to `false`.
        """
        return pulumi.get(self, "use_azure_dns")

    @use_azure_dns.setter
    def use_azure_dns(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "use_azure_dns", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileArgs:
    def __init__(__self__, *,
                 public_ip_address_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 vnet_configuration: pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfigurationArgs'],
                 egress_nat_ip_address_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 egress_nat_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 public_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] public_ip_address_ids: Specifies a list of Azure Public IP Address IDs.
        :param pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfigurationArgs'] vnet_configuration: A `vnet_configuration` block as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] egress_nat_ip_address_ids: Specifies a list of Azure Public IP Address IDs that can be used for Egress (Source) Network Address Translation.
        """
        pulumi.set(__self__, "public_ip_address_ids", public_ip_address_ids)
        pulumi.set(__self__, "vnet_configuration", vnet_configuration)
        if egress_nat_ip_address_ids is not None:
            pulumi.set(__self__, "egress_nat_ip_address_ids", egress_nat_ip_address_ids)
        if egress_nat_ip_addresses is not None:
            pulumi.set(__self__, "egress_nat_ip_addresses", egress_nat_ip_addresses)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)

    @property
    @pulumi.getter(name="publicIpAddressIds")
    def public_ip_address_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        Specifies a list of Azure Public IP Address IDs.
        """
        return pulumi.get(self, "public_ip_address_ids")

    @public_ip_address_ids.setter
    def public_ip_address_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "public_ip_address_ids", value)

    @property
    @pulumi.getter(name="vnetConfiguration")
    def vnet_configuration(self) -> pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfigurationArgs']:
        """
        A `vnet_configuration` block as defined below.
        """
        return pulumi.get(self, "vnet_configuration")

    @vnet_configuration.setter
    def vnet_configuration(self, value: pulumi.Input['NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfigurationArgs']):
        pulumi.set(self, "vnet_configuration", value)

    @property
    @pulumi.getter(name="egressNatIpAddressIds")
    def egress_nat_ip_address_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of Azure Public IP Address IDs that can be used for Egress (Source) Network Address Translation.
        """
        return pulumi.get(self, "egress_nat_ip_address_ids")

    @egress_nat_ip_address_ids.setter
    def egress_nat_ip_address_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "egress_nat_ip_address_ids", value)

    @property
    @pulumi.getter(name="egressNatIpAddresses")
    def egress_nat_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "egress_nat_ip_addresses")

    @egress_nat_ip_addresses.setter
    def egress_nat_ip_addresses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "egress_nat_ip_addresses", value)

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "public_ip_addresses")

    @public_ip_addresses.setter
    def public_ip_addresses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "public_ip_addresses", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfigurationArgs:
    def __init__(__self__, *,
                 virtual_network_id: pulumi.Input[str],
                 ip_of_trust_for_user_defined_routes: Optional[pulumi.Input[str]] = None,
                 trusted_subnet_id: Optional[pulumi.Input[str]] = None,
                 untrusted_subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network.
        :param pulumi.Input[str] trusted_subnet_id: The ID of the Trust subnet.
        :param pulumi.Input[str] untrusted_subnet_id: The ID of the UnTrust subnet.
        """
        pulumi.set(__self__, "virtual_network_id", virtual_network_id)
        if ip_of_trust_for_user_defined_routes is not None:
            pulumi.set(__self__, "ip_of_trust_for_user_defined_routes", ip_of_trust_for_user_defined_routes)
        if trusted_subnet_id is not None:
            pulumi.set(__self__, "trusted_subnet_id", trusted_subnet_id)
        if untrusted_subnet_id is not None:
            pulumi.set(__self__, "untrusted_subnet_id", untrusted_subnet_id)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> pulumi.Input[str]:
        """
        The ID of the Virtual Network.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "virtual_network_id", value)

    @property
    @pulumi.getter(name="ipOfTrustForUserDefinedRoutes")
    def ip_of_trust_for_user_defined_routes(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "ip_of_trust_for_user_defined_routes")

    @ip_of_trust_for_user_defined_routes.setter
    def ip_of_trust_for_user_defined_routes(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "ip_of_trust_for_user_defined_routes", value)

    @property
    @pulumi.getter(name="trustedSubnetId")
    def trusted_subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Trust subnet.
        """
        return pulumi.get(self, "trusted_subnet_id")

    @trusted_subnet_id.setter
    def trusted_subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "trusted_subnet_id", value)

    @property
    @pulumi.getter(name="untrustedSubnetId")
    def untrusted_subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the UnTrust subnet.
        """
        return pulumi.get(self, "untrusted_subnet_id")

    @untrusted_subnet_id.setter
    def untrusted_subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "untrusted_subnet_id", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkPanoramaDestinationNatArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 backend_config: Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfigArgs']] = None,
                 frontend_config: Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfigArgs']] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this Destination NAT.
        :param pulumi.Input[str] protocol: The Protocol for this Destination NAT configuration. Possible values include `TCP` and `UDP`.
        :param pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfigArgs'] backend_config: A `backend_config` block as defined above.
        :param pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfigArgs'] frontend_config: A `frontend_config` block as defined below.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if backend_config is not None:
            pulumi.set(__self__, "backend_config", backend_config)
        if frontend_config is not None:
            pulumi.set(__self__, "frontend_config", frontend_config)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this Destination NAT.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol for this Destination NAT configuration. Possible values include `TCP` and `UDP`.
        """
        return pulumi.get(self, "protocol")

    @protocol.setter
    def protocol(self, value: pulumi.Input[str]):
        pulumi.set(self, "protocol", value)

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfigArgs']]:
        """
        A `backend_config` block as defined above.
        """
        return pulumi.get(self, "backend_config")

    @backend_config.setter
    def backend_config(self, value: Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfigArgs']]):
        pulumi.set(self, "backend_config", value)

    @property
    @pulumi.getter(name="frontendConfig")
    def frontend_config(self) -> Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfigArgs']]:
        """
        A `frontend_config` block as defined below.
        """
        return pulumi.get(self, "frontend_config")

    @frontend_config.setter
    def frontend_config(self, value: Optional[pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfigArgs']]):
        pulumi.set(self, "frontend_config", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 public_ip_address: pulumi.Input[str]):
        """
        :param pulumi.Input[int] port: The port number to send traffic to.
        :param pulumi.Input[str] public_ip_address: The IP Address to send the traffic to.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address", public_ip_address)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        The port number to send traffic to.
        """
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: pulumi.Input[int]):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter(name="publicIpAddress")
    def public_ip_address(self) -> pulumi.Input[str]:
        """
        The IP Address to send the traffic to.
        """
        return pulumi.get(self, "public_ip_address")

    @public_ip_address.setter
    def public_ip_address(self, value: pulumi.Input[str]):
        pulumi.set(self, "public_ip_address", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 public_ip_address_id: pulumi.Input[str]):
        """
        :param pulumi.Input[int] port: The port on which to receive traffic.
        :param pulumi.Input[str] public_ip_address_id: The ID of the Public IP Address on which to receive traffic.
               
               > **Note:** This must be an Azure Public IP address ID also specified in the `public_ip_address_ids` list.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        The port on which to receive traffic.
        """
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: pulumi.Input[int]):
        pulumi.set(self, "port", value)

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> pulumi.Input[str]:
        """
        The ID of the Public IP Address on which to receive traffic.

        > **Note:** This must be an Azure Public IP address ID also specified in the `public_ip_address_ids` list.
        """
        return pulumi.get(self, "public_ip_address_id")

    @public_ip_address_id.setter
    def public_ip_address_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "public_ip_address_id", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkPanoramaDnsSettingsArgs:
    def __init__(__self__, *,
                 azure_dns_servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 dns_servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 use_azure_dns: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] dns_servers: Specifies a list of DNS servers to use. Conflicts with `dns_settings.0.use_azure_dns`.
        :param pulumi.Input[bool] use_azure_dns: Should the Firewall use Azure Supplied DNS servers. Conflicts with `dns_settings.0.dns_servers`. Defaults to `false`.
        """
        if azure_dns_servers is not None:
            pulumi.set(__self__, "azure_dns_servers", azure_dns_servers)
        if dns_servers is not None:
            pulumi.set(__self__, "dns_servers", dns_servers)
        if use_azure_dns is not None:
            pulumi.set(__self__, "use_azure_dns", use_azure_dns)

    @property
    @pulumi.getter(name="azureDnsServers")
    def azure_dns_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "azure_dns_servers")

    @azure_dns_servers.setter
    def azure_dns_servers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "azure_dns_servers", value)

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of DNS servers to use. Conflicts with `dns_settings.0.use_azure_dns`.
        """
        return pulumi.get(self, "dns_servers")

    @dns_servers.setter
    def dns_servers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "dns_servers", value)

    @property
    @pulumi.getter(name="useAzureDns")
    def use_azure_dns(self) -> Optional[pulumi.Input[bool]]:
        """
        Should the Firewall use Azure Supplied DNS servers. Conflicts with `dns_settings.0.dns_servers`. Defaults to `false`.
        """
        return pulumi.get(self, "use_azure_dns")

    @use_azure_dns.setter
    def use_azure_dns(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "use_azure_dns", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileArgs:
    def __init__(__self__, *,
                 public_ip_address_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 vnet_configuration: pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfigurationArgs'],
                 egress_nat_ip_address_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 egress_nat_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 public_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] public_ip_address_ids: Specifies a list of Azure Public IP Address IDs.
        :param pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfigurationArgs'] vnet_configuration: A `vnet_configuration` block as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] egress_nat_ip_address_ids: Specifies a list of Azure Public IP Address IDs that can be used for Egress (Source) Network Address Translation.
        """
        pulumi.set(__self__, "public_ip_address_ids", public_ip_address_ids)
        pulumi.set(__self__, "vnet_configuration", vnet_configuration)
        if egress_nat_ip_address_ids is not None:
            pulumi.set(__self__, "egress_nat_ip_address_ids", egress_nat_ip_address_ids)
        if egress_nat_ip_addresses is not None:
            pulumi.set(__self__, "egress_nat_ip_addresses", egress_nat_ip_addresses)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)

    @property
    @pulumi.getter(name="publicIpAddressIds")
    def public_ip_address_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        Specifies a list of Azure Public IP Address IDs.
        """
        return pulumi.get(self, "public_ip_address_ids")

    @public_ip_address_ids.setter
    def public_ip_address_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "public_ip_address_ids", value)

    @property
    @pulumi.getter(name="vnetConfiguration")
    def vnet_configuration(self) -> pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfigurationArgs']:
        """
        A `vnet_configuration` block as defined below.
        """
        return pulumi.get(self, "vnet_configuration")

    @vnet_configuration.setter
    def vnet_configuration(self, value: pulumi.Input['NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfigurationArgs']):
        pulumi.set(self, "vnet_configuration", value)

    @property
    @pulumi.getter(name="egressNatIpAddressIds")
    def egress_nat_ip_address_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of Azure Public IP Address IDs that can be used for Egress (Source) Network Address Translation.
        """
        return pulumi.get(self, "egress_nat_ip_address_ids")

    @egress_nat_ip_address_ids.setter
    def egress_nat_ip_address_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "egress_nat_ip_address_ids", value)

    @property
    @pulumi.getter(name="egressNatIpAddresses")
    def egress_nat_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "egress_nat_ip_addresses")

    @egress_nat_ip_addresses.setter
    def egress_nat_ip_addresses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "egress_nat_ip_addresses", value)

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "public_ip_addresses")

    @public_ip_addresses.setter
    def public_ip_addresses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "public_ip_addresses", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfigurationArgs:
    def __init__(__self__, *,
                 virtual_network_id: pulumi.Input[str],
                 ip_of_trust_for_user_defined_routes: Optional[pulumi.Input[str]] = None,
                 trusted_subnet_id: Optional[pulumi.Input[str]] = None,
                 untrusted_subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network.
        :param pulumi.Input[str] trusted_subnet_id: The ID of the Trust subnet.
        :param pulumi.Input[str] untrusted_subnet_id: The ID of the UnTrust subnet.
        """
        pulumi.set(__self__, "virtual_network_id", virtual_network_id)
        if ip_of_trust_for_user_defined_routes is not None:
            pulumi.set(__self__, "ip_of_trust_for_user_defined_routes", ip_of_trust_for_user_defined_routes)
        if trusted_subnet_id is not None:
            pulumi.set(__self__, "trusted_subnet_id", trusted_subnet_id)
        if untrusted_subnet_id is not None:
            pulumi.set(__self__, "untrusted_subnet_id", untrusted_subnet_id)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> pulumi.Input[str]:
        """
        The ID of the Virtual Network.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "virtual_network_id", value)

    @property
    @pulumi.getter(name="ipOfTrustForUserDefinedRoutes")
    def ip_of_trust_for_user_defined_routes(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "ip_of_trust_for_user_defined_routes")

    @ip_of_trust_for_user_defined_routes.setter
    def ip_of_trust_for_user_defined_routes(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "ip_of_trust_for_user_defined_routes", value)

    @property
    @pulumi.getter(name="trustedSubnetId")
    def trusted_subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Trust subnet.
        """
        return pulumi.get(self, "trusted_subnet_id")

    @trusted_subnet_id.setter
    def trusted_subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "trusted_subnet_id", value)

    @property
    @pulumi.getter(name="untrustedSubnetId")
    def untrusted_subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the UnTrust subnet.
        """
        return pulumi.get(self, "untrusted_subnet_id")

    @untrusted_subnet_id.setter
    def untrusted_subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "untrusted_subnet_id", value)


@pulumi.input_type
class NextGenerationFirewallVirtualNetworkPanoramaPanoramaArgs:
    def __init__(__self__, *,
                 device_group_name: Optional[pulumi.Input[str]] = None,
                 host_name: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 panorama_server1: Optional[pulumi.Input[str]] = None,
                 panorama_server2: Optional[pulumi.Input[str]] = None,
                 template_name: Optional[pulumi.Input[str]] = None,
                 virtual_machine_ssh_key: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] device_group_name: The Device Group Name to which this Firewall Resource is registered.
        :param pulumi.Input[str] host_name: The Host Name of this Firewall Resource.
        :param pulumi.Input[str] name: The name which should be used for this Palo Alto Next Generation Firewall Virtual Network Panorama. Changing this forces a new Palo Alto Next Generation Firewall Virtual Network Panorama to be created.
        :param pulumi.Input[str] panorama_server1: The name of the First Panorana server.
        :param pulumi.Input[str] panorama_server2: The name of the Second Panorana server.
        :param pulumi.Input[str] template_name: The name of the Panorama Template applied to this Firewall Resource.
        :param pulumi.Input[str] virtual_machine_ssh_key: The SSH Key to connect to the Firewall Resource.
        """
        if device_group_name is not None:
            pulumi.set(__self__, "device_group_name", device_group_name)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if panorama_server1 is not None:
            pulumi.set(__self__, "panorama_server1", panorama_server1)
        if panorama_server2 is not None:
            pulumi.set(__self__, "panorama_server2", panorama_server2)
        if template_name is not None:
            pulumi.set(__self__, "template_name", template_name)
        if virtual_machine_ssh_key is not None:
            pulumi.set(__self__, "virtual_machine_ssh_key", virtual_machine_ssh_key)

    @property
    @pulumi.getter(name="deviceGroupName")
    def device_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Device Group Name to which this Firewall Resource is registered.
        """
        return pulumi.get(self, "device_group_name")

    @device_group_name.setter
    def device_group_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "device_group_name", value)

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Host Name of this Firewall Resource.
        """
        return pulumi.get(self, "host_name")

    @host_name.setter
    def host_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_name", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name which should be used for this Palo Alto Next Generation Firewall Virtual Network Panorama. Changing this forces a new Palo Alto Next Generation Firewall Virtual Network Panorama to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="panoramaServer1")
    def panorama_server1(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the First Panorana server.
        """
        return pulumi.get(self, "panorama_server1")

    @panorama_server1.setter
    def panorama_server1(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "panorama_server1", value)

    @property
    @pulumi.getter(name="panoramaServer2")
    def panorama_server2(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the Second Panorana server.
        """
        return pulumi.get(self, "panorama_server2")

    @panorama_server2.setter
    def panorama_server2(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "panorama_server2", value)

    @property
    @pulumi.getter(name="templateName")
    def template_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the Panorama Template applied to this Firewall Resource.
        """
        return pulumi.get(self, "template_name")

    @template_name.setter
    def template_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "template_name", value)

    @property
    @pulumi.getter(name="virtualMachineSshKey")
    def virtual_machine_ssh_key(self) -> Optional[pulumi.Input[str]]:
        """
        The SSH Key to connect to the Firewall Resource.
        """
        return pulumi.get(self, "virtual_machine_ssh_key")

    @virtual_machine_ssh_key.setter
    def virtual_machine_ssh_key(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_machine_ssh_key", value)


