yarn-site.xml (Hadoop 2.3)

yarn.ipc.client.factory.class Factory to create client IPC classes.
Default:
yarn.ipc.serializer.type Type of serialization to use.
Default:protocolbuffers
yarn.ipc.server.factory.class Factory to create server IPC classes.
Default:
yarn.ipc.exception.factory.class Factory to create IPC exceptions.
Default:
yarn.ipc.record.factory.class Factory to create serializeable records.
Default:
yarn.ipc.rpc.class RPC class implementation
Default:org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC
yarn.resourcemanager.hostname The hostname of the RM.
Default:0.0.0.0
yarn.resourcemanager.address The address of the applications manager interface in the RM.
Default:${yarn.resourcemanager.hostname}:8032
yarn.resourcemanager.client.thread-count The number of threads used to handle applications manager requests.
Default:50
yarn.am.liveness-monitor.expiry-interval-ms The expiry interval for application master reporting.
Default:600000
yarn.resourcemanager.principal The Kerberos principal for the resource manager.
Default:
yarn.resourcemanager.scheduler.address The address of the scheduler interface.
Default:${yarn.resourcemanager.hostname}:8030
yarn.resourcemanager.scheduler.client.thread-count Number of threads to handle scheduler interface.
Default:50
yarn.http.policy This configures the HTTP endpoint for Yarn Daemons.The following values are supported: – HTTP_ONLY : Service is provided only on http – HTTPS_ONLY : Service is provided only on https
Default:HTTP_ONLY
yarn.resourcemanager.webapp.address The http address of the RM web application.
Default:${yarn.resourcemanager.hostname}:8088
yarn.resourcemanager.webapp.https.address The https adddress of the RM web application.
Default:${yarn.resourcemanager.hostname}:8090
yarn.resourcemanager.resource-tracker.address
Default:${yarn.resourcemanager.hostname}:8031
yarn.acl.enable Are acls enabled.
Default:true
yarn.admin.acl ACL of who can be admin of the YARN cluster.
Default:*
yarn.resourcemanager.admin.address The address of the RM admin interface.
Default:${yarn.resourcemanager.hostname}:8033
yarn.resourcemanager.admin.client.thread-count Number of threads used to handle RM admin interface.
Default:1
yarn.resourcemanager.amliveliness-monitor.interval-ms How often should the RM check that the AM is still alive.
Default:1000
yarn.resourcemanager.connect.max-wait.ms Maximum time to wait to establish connection to ResourceManager.
Default:900000
yarn.resourcemanager.connect.retry-interval.ms How often to try connecting to the ResourceManager.
Default:30000
yarn.resourcemanager.am.max-attempts The maximum number of application attempts. It’s a global setting for all application masters. Each application master can specify its individual maximum number of application attempts via the API, but the individual number cannot be more than the global upper bound. If it is, the resourcemanager will override it. The default number is set to 2, to allow at least one retry for AM.
Default:2
yarn.resourcemanager.container.liveness-monitor.interval-ms How often to check that containers are still alive.
Default:600000
yarn.resourcemanager.keytab The keytab for the resource manager.
Default:/etc/krb5.keytab
yarn.nm.liveness-monitor.expiry-interval-ms How long to wait until a node manager is considered dead.
Default:600000
yarn.resourcemanager.nm.liveness-monitor.interval-ms How often to check that node managers are still alive.
Default:1000
yarn.resourcemanager.nodes.include-path Path to file with nodes to include.
Default:
yarn.resourcemanager.nodes.exclude-path Path to file with nodes to exclude.
Default:
yarn.resourcemanager.resource-tracker.client.thread-count Number of threads to handle resource tracker calls.
Default:50
yarn.resourcemanager.scheduler.class The class to use as the resource scheduler.
Default:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
yarn.scheduler.minimum-allocation-mb The minimum allocation for every container request at the RM, in MBs. Memory requests lower than this won’t take effect, and the specified value will get allocated at minimum.
Default:1024
yarn.scheduler.maximum-allocation-mb The maximum allocation for every container request at the RM, in MBs. Memory requests higher than this won’t take effect, and will get capped to this value.
Default:8192
yarn.scheduler.minimum-allocation-vcores The minimum allocation for every container request at the RM, in terms of virtual CPU cores. Requests lower than this won’t take effect, and the specified value will get allocated the minimum.
Default:1
yarn.scheduler.maximum-allocation-vcores The maximum allocation for every container request at the RM, in terms of virtual CPU cores. Requests higher than this won’t take effect, and will get capped to this value.
Default:32
yarn.resourcemanager.recovery.enabled Enable RM to recover state after starting. If true, then yarn.resourcemanager.store.class must be specified.
Default:false
yarn.resourcemanager.store.class The class to use as the persistent store. If org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore is used, the store is implicitly fenced; meaning a single ResourceManager is able to use the store at any point in time. More details on this implicit fencing, along with setting up appropriate ACLs is discussed under yarn.resourcemanager.zk-state-store.root-node.acl.
Default:org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore
yarn.resourcemanager.state-store.max-completed-applications The maximum number of completed applications RM state store keeps, less than or equals to ${yarn.resourcemanager.max-completed-applications}. By default, it equals to ${yarn.resourcemanager.max-completed-applications}. This ensures that the applications kept in the state store are consistent with the applications remembered in RM memory. Any values larger than ${yarn.resourcemanager.max-completed-applications} will be reset to ${yarn.resourcemanager.max-completed-applications}. Note that this value impacts the RM recovery performance.Typically, a smaller value indicates better performance on RM recovery.
Default:${yarn.resourcemanager.max-completed-applications}
yarn.resourcemanager.zk-address Host:Port of the ZooKeeper server to be used by the RM. This must be supplied when using the ZooKeeper based implementation of the RM state store and/or embedded automatic failover in a HA setting.
Default:
yarn.resourcemanager.zk-num-retries Number of times RM tries to connect to ZooKeeper.
Default:500
yarn.resourcemanager.zk-retry-interval-ms Retry interval in milliseconds when connecting to ZooKeeper.
Default:2000
yarn.resourcemanager.zk-state-store.parent-path Full path of the ZooKeeper znode where RM state will be stored. This must be supplied when using org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore as the value for yarn.resourcemanager.store.class
Default:/rmstore
yarn.resourcemanager.zk-timeout-ms ZooKeeper session timeout in milliseconds. Session expiration is managed by the ZooKeeper cluster itself, not by the client. This value is used by the cluster to determine when the client’s session expires. Expirations happens when the cluster does not hear from the client within the specified session timeout period (i.e. no heartbeat).
Default:10000
yarn.resourcemanager.zk-acl ACL’s to be used for ZooKeeper znodes.
Default:world:anyone:rwcda
yarn.resourcemanager.zk-state-store.root-node.acl ACLs to be used for the root znode when using ZKRMStateStore in a HA scenario for fencing. ZKRMStateStore supports implicit fencing to allow a single ResourceManager write-access to the store. For fencing, the ResourceManagers in the cluster share read-write-admin privileges on the root node, but the Active ResourceManager claims exclusive create-delete permissions. By default, when this property is not set, we use the ACLs from yarn.resourcemanager.zk-acl for shared admin access and rm-address:random-number for username-based exclusive create-delete access. This property allows users to set ACLs of their choice instead of using the default mechanism. For fencing to work, the ACLs should be carefully set differently on each ResourceManger such that all the ResourceManagers have shared admin access and the Active ResourceManger takes over (exclusively) the create-delete access.
Default:
yarn.resourcemanager.fs.state-store.uri URI pointing to the location of the FileSystem path where RM state will be stored. This must be supplied when using org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore as the value for yarn.resourcemanager.store.class
Default:${hadoop.tmp.dir}/yarn/system/rmstore
yarn.resourcemanager.fs.state-store.retry-policy-spec hdfs client retry policy specification. hdfs client retry is always enabled. Specified in pairs of sleep-time and number-of-retries and (t0, n0), (t1, n1), …, the first n0 retries sleep t0 milliseconds on average, the following n1 retries sleep t1 milliseconds on average, and so on.
Default:2000, 500
yarn.resourcemanager.ha.enabled Enable RM high-availability. When enabled, (1) The RM starts in the Standby mode by default, and transitions to the Active mode when prompted to. (2) The nodes in the RM ensemble are listed in yarn.resourcemanager.ha.rm-ids (3) The id of each RM comes from yarn.resourcemanager.ha.id (4) The actual physical addresses come from the configs of the pattern – {rpc-config}.{id}
Default:false
yarn.resourcemanager.ha.automatic-failover.enabled Enable automatic failover.
Default:false
yarn.resourcemanager.ha.automatic-failover.embedded Enable embedded automatic failover. The embedded elector relies on the RM state store to handle fencing, and is primarily intended to be used in conjunction with ZKRMStateStore.
Default:false
yarn.resourcemanager.ha.automatic-failover.zk-base-path The base znode path to use for storing leader information, when using ZooKeeper based leader election.
Default:/yarn-leader-election
yarn.resourcemanager.cluster-id Name of the cluster. In a HA setting, this is used to ensure the RM participates in leader election fo this cluster and ensures it does not affect other clusters
Default:
yarn.resourcemanager.ha.rm-ids The list of RM nodes in the cluster when HA is enabled. See description of yarn.resourcemanager.ha .enabled for full details on how this is used.
Default:
yarn.resourcemanager.ha.id The id (string) of the current RM. When HA is enabled, this is a required config. See description of yarn.resourcemanager.ha.enabled for full details on how this is used.
Default:
yarn.client.failover-proxy-provider When HA is enabled, the class to be used by Clients, AMs and NMs to failover to the Active RM. It should extend org.apache.hadoop.yarn.client.RMFailoverProxyProvider
Default:org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider
yarn.client.failover-max-attempts When HA is enabled, the max number of times FailoverProxyProvider should attempt failover. When set, this overrides the yarn.resourcemanager.connect.max-wait.ms. When not set, this is inferred from yarn.resourcemanager.connect.max-wait.ms.
Default:
yarn.client.failover-sleep-base-ms When HA is enabled, the sleep base (in milliseconds) to be used for calculating the exponential delay between failovers. When set, this overrides the yarn.resourcemanager.connect.* settings. When not set, yarn.resourcemanager.connect.retry-interval.ms is used instead.
Default:
yarn.client.failover-sleep-max-ms When HA is enabled, the maximum sleep time (in milliseconds) between failovers. When set, this overrides the yarn.resourcemanager.connect.* settings. When not set, yarn.resourcemanager.connect.retry-interval.ms is used instead.
Default:
yarn.client.failover-retries When HA is enabled, the number of retries per attempt to connect to a ResourceManager. In other words, it is the ipc.client.connect.max.retries to be used during failover attempts
Default:0
yarn.client.failover-retries-on-socket-timeouts When HA is enabled, the number of retries per attempt to connect to a ResourceManager on socket timeouts. In other words, it is the ipc.client.connect.max.retries.on.timeouts to be used during failover attempts
Default:0
yarn.resourcemanager.max-completed-applications The maximum number of completed applications RM keeps.
Default:10000
yarn.resourcemanager.delayed.delegation-token.removal-interval-ms Interval at which the delayed token removal thread runs
Default:30000
yarn.resourcemanager.application-tokens.master-key-rolling-interval-secs Interval for the roll over for the master key used to generate application tokens
Default:86400
yarn.resourcemanager.container-tokens.master-key-rolling-interval-secs Interval for the roll over for the master key used to generate container tokens. It is expected to be much greater than yarn.nm.liveness-monitor.expiry-interval-ms and yarn.rm.container-allocation.expiry-interval-ms. Otherwise the behavior is undefined.
Default:86400
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms The heart-beat interval in milliseconds for every NodeManager in the cluster.
Default:1000
yarn.resourcemanager.nodemanager.minimum.version The minimum allowed version of a connecting nodemanager. The valid values are NONE (no version checking), EqualToRM (the nodemanager’s version is equal to or greater than the RM version), or a Version String.
Default:NONE
yarn.resourcemanager.scheduler.monitor.enable Enable a set of periodic monitors (specified in yarn.resourcemanager.scheduler.monitor.policies) that affect the scheduler.
Default:false
yarn.resourcemanager.scheduler.monitor.policies The list of SchedulingEditPolicy classes that interact with the scheduler. A particular module may be incompatible with the scheduler, other policies, or a configuration of either.
Default:org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity.ProportionalCapacityPreemptionPolicy
yarn.nodemanager.hostname The hostname of the NM.
Default:0.0.0.0
yarn.nodemanager.address The address of the container manager in the NM.
Default:${yarn.nodemanager.hostname}:0
yarn.nodemanager.admin-env Environment variables that should be forwarded from the NodeManager’s environment to the container’s.
Default:MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX
yarn.nodemanager.env-whitelist Environment variables that containers may override rather than use NodeManager’s default.
Default:JAVA_HOME, HADOOP_COMMON_HOME, HADOOP_HDFS_HOME, HADOOP_CONF_DIR, HADOOP_YARN_HOME
yarn.nodemanager.container-executor.class who will execute(launch) the containers.
Default:org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor
yarn.nodemanager.container-manager.thread-count Number of threads container manager uses.
Default:20
yarn.nodemanager.delete.thread-count Number of threads used in cleanup.
Default:4
yarn.nodemanager.delete.debug-delay-sec Number of seconds after an application finishes before the nodemanager’s DeletionService will delete the application’s localized file directory and log directory. To diagnose Yarn application problems, set this property’s value large enough (for example, to 600 = 10 minutes) to permit examination of these directories. After changing the property’s value, you must restart the nodemanager in order for it to have an effect. The roots of Yarn applications’ work directories is configurable with the yarn.nodemanager.local-dirs property (see below), and the roots of the Yarn applications’ log directories is configurable with the yarn.nodemanager.log-dirs property (see also below).
Default:0
yarn.nodemanager.keytab Keytab for NM.
Default:/etc/krb5.keytab
yarn.nodemanager.local-dirs List of directories to store localized files in. An application’s localized file directory will be found in: ${yarn.nodemanager.local-dirs}/usercache/${user}/appcache/application_${appid}. Individual containers’ work directories, called container_${contid}, will be subdirectories of this.
Default:${hadoop.tmp.dir}/nm-local-dir
yarn.nodemanager.local-cache.max-files-per-directory It limits the maximum number of files which will be localized in a single local directory. If the limit is reached then sub-directories will be created and new files will be localized in them. If it is set to a value less than or equal to 36 [which are sub-directories (0-9 and then a-z)] then NodeManager will fail to start. For example; [for public cache] if this is configured with a value of 40 ( 4 files + 36 sub-directories) and the local-dir is “/tmp/local-dir1″ then it will allow 4 files to be created directly inside “/tmp/local-dir1/filecache”. For files that are localized further it will create a sub-directory “0” inside “/tmp/local-dir1/filecache” and will localize files inside it until it becomes full. If a file is removed from a sub-directory that is marked full, then that sub-directory will be used back again to localize files.
Default:8192
yarn.nodemanager.localizer.address Address where the localizer IPC is.
Default:${yarn.nodemanager.hostname}:8040
yarn.nodemanager.localizer.cache.cleanup.interval-ms Interval in between cache cleanups.
Default:600000
yarn.nodemanager.localizer.cache.target-size-mb Target size of localizer cache in MB, per local directory.
Default:10240
yarn.nodemanager.localizer.client.thread-count Number of threads to handle localization requests.
Default:5
yarn.nodemanager.localizer.fetch.thread-count Number of threads to use for localization fetching.
Default:4
yarn.nodemanager.log-dirs Where to store container logs. An application’s localized log directory will be found in ${yarn.nodemanager.log-dirs}/application_${appid}. Individual containers’ log directories will be below this, in directories named container_{$contid}. Each container directory will contain the files stderr, stdin, and syslog generated by that container.
Default:${yarn.log.dir}/userlogs
yarn.log-aggregation-enable Whether to enable log aggregation
Default:false
yarn.log-aggregation.retain-seconds How long to keep aggregation logs before deleting them. -1 disables. Be careful set this too small and you will spam the name node.
Default:-1
yarn.log-aggregation.retain-check-interval-seconds How long to wait between aggregated log retention checks. If set to 0 or a negative value then the value is computed as one-tenth of the aggregated log retention time. Be careful set this too small and you will spam the name node.
Default:-1
yarn.nodemanager.log.retain-seconds Time in seconds to retain user logs. Only applicable if log aggregation is disabled
Default:10800
yarn.nodemanager.remote-app-log-dir Where to aggregate logs to.
Default:/tmp/logs
yarn.nodemanager.remote-app-log-dir-suffix The remote log dir will be created at {yarn.nodemanager.remote-app-log-dir}/${user}/{thisParam}
Default:logs
yarn.nodemanager.resource.memory-mb Amount of physical memory, in MB, that can be allocated for containers.
Default:8192
yarn.nodemanager.pmem-check-enabled Whether physical memory limits will be enforced for containers.
Default:true
yarn.nodemanager.vmem-check-enabled Whether virtual memory limits will be enforced for containers.
Default:true
yarn.nodemanager.vmem-pmem-ratio Ratio between virtual memory to physical memory when setting memory limits for containers. Container allocations are expressed in terms of physical memory, and virtual memory usage is allowed to exceed this allocation by this ratio.
Default:2.1
yarn.nodemanager.resource.cpu-vcores Number of CPU cores that can be allocated for containers.
Default:8
yarn.nodemanager.webapp.address NM Webapp address.
Default:${yarn.nodemanager.hostname}:8042
yarn.nodemanager.container-monitor.interval-ms How often to monitor containers.
Default:3000
yarn.nodemanager.container-monitor.resource-calculator.class Class that calculates containers current resource utilization.
Default:
yarn.nodemanager.health-checker.interval-ms Frequency of running node health script.
Default:600000
yarn.nodemanager.health-checker.script.timeout-ms Script time out period.
Default:1200000
yarn.nodemanager.health-checker.script.path The health check script to run.
Default:
yarn.nodemanager.health-checker.script.opts The arguments to pass to the health check script.
Default:
yarn.nodemanager.disk-health-checker.interval-ms Frequency of running disk health checker code.
Default:120000
yarn.nodemanager.disk-health-checker.min-healthy-disks The minimum fraction of number of disks to be healthy for the nodemanager to launch new containers. This correspond to both yarn-nodemanager.local-dirs and yarn.nodemanager.log-dirs. i.e. If there are less number of healthy local-dirs (or log-dirs) available, then new containers will not be launched on this node.
Default:0.25
yarn.nodemanager.linux-container-executor.path The path to the Linux container executor.
Default:
yarn.nodemanager.linux-container-executor.resources-handler.class The class which should help the LCE handle resources.
Default:org.apache.hadoop.yarn.server.nodemanager.util.DefaultLCEResourcesHandler
yarn.nodemanager.linux-container-executor.cgroups.hierarchy The cgroups hierarchy under which to place YARN proccesses (cannot contain commas). If yarn.nodemanager.linux-container-executor.cgroups.mount is false (that is, if cgroups have been pre-configured), then this cgroups hierarchy must already exist and be writable by the NodeManager user, otherwise the NodeManager may fail. Only used when the LCE resources handler is set to the CgroupsLCEResourcesHandler.
Default:/hadoop-yarn
yarn.nodemanager.linux-container-executor.cgroups.mount Whether the LCE should attempt to mount cgroups if not found. Only used when the LCE resources handler is set to the CgroupsLCEResourcesHandler.
Default:false
yarn.nodemanager.linux-container-executor.cgroups.mount-path Where the LCE should attempt to mount cgroups if not found. Common locations include /sys/fs/cgroup and /cgroup; the default location can vary depending on the Linux distribution in use. This path must exist before the NodeManager is launched. Only used when the LCE resources handler is set to the CgroupsLCEResourcesHandler, and yarn.nodemanager.linux-container-executor.cgroups.mount is true.
Default:
yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user The UNIX user that containers will run as when Linux-container-executor is used in nonsecure mode (a use case for this is using cgroups).
Default:nobody
yarn.nodemanager.linux-container-executor.nonsecure-mode.user-pattern The allowed pattern for UNIX user names enforced by Linux-container-executor when used in nonsecure mode (use case for this is using cgroups). The default value is taken from /usr/sbin/adduser
Default:^[_.A-Za-z0-9][-@_.A-Za-z0-9]{0,255}?[$]?$
yarn.nodemanager.log-aggregation.compression-type T-file compression types used to compress aggregated logs.
Default:none
yarn.nodemanager.principal The kerberos principal for the node manager.
Default:
yarn.nodemanager.aux-services the valid service name should only contain a-zA-Z0-9_ and can not start with numbers
Default:
yarn.nodemanager.sleep-delay-before-sigkill.ms No. of ms to wait between sending a SIGTERM and SIGKILL to a container
Default:250
yarn.nodemanager.process-kill-wait.ms Max time to wait for a process to come up when trying to cleanup a container
Default:2000
yarn.nodemanager.resourcemanager.connect.wait.secs Max time, in seconds, to wait to establish a connection to RM when NM starts. The NM will shutdown if it cannot connect to RM within the specified max time period. If the value is set as -1, then NM will retry forever.
Default:900
yarn.nodemanager.resourcemanager.connect.retry_interval.secs Time interval, in seconds, between each NM attempt to connect to RM.
Default:30
yarn.nodemanager.resourcemanager.minimum.version The minimum allowed version of a resourcemanager that a nodemanager will connect to. The valid values are NONE (no version checking), EqualToNM (the resourcemanager’s version is equal to or greater than the NM version), or a Version String.
Default:NONE
yarn.client.nodemanager-client-async.thread-pool-max-size Max number of threads in NMClientAsync to process container management events
Default:500
yarn.client.max-nodemanagers-proxies Maximum number of proxy connections for node manager. It should always be more than 1. NMClient and MRAppMaster will use this to cache connection with node manager. There will be at max one connection per node manager. Ex. configuring it to a value of 5 will make sure that client will at max have 5 connections cached with 5 different node managers. These connections will be timed out if idle for more than system wide idle timeout period. The token if used for authentication then it will be used only at connection creation time. If new token is received then earlier connection should be closed in order to use newer token. This and (yarn.client.nodemanager-client-async.thread-pool-max-size) are related and should be sync (no need for them to be equal).
Default:500
yarn.nodemanager.aux-services.mapreduce_shuffle.class
Default:org.apache.hadoop.mapred.ShuffleHandler
mapreduce.job.jar
Default:
mapreduce.job.hdfs-servers
Default:${fs.defaultFS}
yarn.web-proxy.principal The kerberos principal for the proxy, if the proxy is not running as part of the RM.
Default:
yarn.web-proxy.keytab Keytab for WebAppProxy, if the proxy is not running as part of the RM.
Default:
yarn.web-proxy.address The address for the web proxy as HOST:PORT, if this is not given then the proxy will run as part of the RM
Default:
yarn.application.classpath CLASSPATH for YARN applications. A comma-separated list of CLASSPATH entries. When this value is empty, the following default CLASSPATH for YARN applications would be used. For Linux: $HADOOP_CONF_DIR, $HADOOP_COMMON_HOME/share/hadoop/common/*, $HADOOP_COMMON_HOME/share/hadoop/common/lib/*, $HADOOP_HDFS_HOME/share/hadoop/hdfs/*, $HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*, $HADOOP_YARN_HOME/share/hadoop/yarn/*, $HADOOP_YARN_HOME/share/hadoop/yarn/lib/* For Windows: %HADOOP_CONF_DIR%, %HADOOP_COMMON_HOME%/share/hadoop/common/*, %HADOOP_COMMON_HOME%/share/hadoop/common/lib/*, %HADOOP_HDFS_HOME%/share/hadoop/hdfs/*, %HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*, %HADOOP_YARN_HOME%/share/hadoop/yarn/*, %HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*
Default:
yarn.client.application-client-protocol.poll-interval-ms The interval that the yarn client library uses to poll the completion status of the asynchronous API of application client protocol.
Default:200

Leave a comment