Starting the Client on Mac OS with Launchd

KB Home   |   Starting the Client on Mac OS with Launchd

Main.MacClientStartupWithLaunchd History

Hide minor edits - Show changes to output

January 25, 2018, at 07:58 PM by Brian - customer pointed out that the plist on the article doesn't match the one in the zip file
Changed line 68 from:
  <xml version="1.0" encoding="UTF-8">
to:
  <?xml version="1.0" encoding="UTF-8"?>
June 30, 2015, at 11:09 PM by Vanessa White - fixing a display issue
Changed line 45 from:
*Suggestions for MacBooks/MacBook Airs/MacBook Pros:
to:
*Suggestions for [=MacBooks/MacBook Airs/MacBook Pros=]:
June 25, 2015, at 05:34 PM by Vanessa White -
Changed line 5 from:
For Macintosh computers running OS X 10.7 and later launchd is the most practical approach to launching the [=PCClient=].app. As Apple has begun to focus heavily on securing root access to systems Login Hooks have been deprecated in favor of [=LaunchDaemons=] and [=LaunchAgents=] and have safer, less wide-reaching system access.
to:
For Macintosh computers running OS X 10.7 and later, and most especially Mac OS X 10.10 Yosemite and later, launchd is the most practical approach to launching the [=PCClient=].app. As Apple has begun to focus heavily on securing root access to systems Login Hooks have been deprecated in favor of [=LaunchDaemons=] and [=LaunchAgents=] and have safer, less wide-reaching system access.
May 15, 2015, at 06:10 AM by Tim B - Added link to Mac client auto-deployment page
Added lines 61-62:
*For environments with automated deployment and configuration using Munki, Casper or similar, see [[MacClientAutomatedDeployment|PaperCut Client Deployment using Mac Packaging & Deployment Tools]].
May 13, 2015, at 11:56 PM by Vanessa White -
Changed lines 24-25 from:
#Next we’ll be opening Terminal.app to verify the permissions are correct on the plist to ensure launchctl will be able to operate the plist. If you are unaccustomed to using Terminal you can copy and paste the following commands in, omitting the quote marks.
to:
#Next we’ll be opening Terminal.app to verify the permissions are correct on the plist to ensure launchctl will be able to operate the plist. If you are unaccustomed to using Terminal you can copy and paste the following commands in.
May 13, 2015, at 11:53 PM by Kyle - Formatting LaunchD PList
Changed lines 66-67 from:

<?xml version="1.0" encoding="UTF-8"?>
to:
  <xml version="1.0" encoding="UTF-8">
May 13, 2015, at 11:47 PM by Kyle - Formatting Process Section
Changed lines 38-39 from:
#Reboot the Mac to verify that the launchd job is functioning as expected, or in Terminal.app run the following: @@launchctl load /Library/[=LaunchAgents=]/com.papercut.client.plist@@
to:
#Reboot the Mac to verify that the launchd job is functioning as expected, or in Terminal.app run the following:

-->
@@launchctl load /Library/[=LaunchAgents=]/com.papercut.client.plist@@
May 13, 2015, at 11:46 PM by Kyle - Formtting Process Section
Changed lines 19-20 from:
#Download our basic launchd plist here: [[(Attach:)PaperCut_LaunchD.zip]] This plist assumes that [=PCClient=].app is stored in /Applications/, if this is not the case please skip to Advanced Configuration Options below.
# Copy the enclosed com.papercut.client.plist to /Library/[=LaunchAgents=]/
to:

#Download our basic launchd plist here: [[(Attach:)PaperCut_LaunchD.zip]] This plist assumes that [=PCClient=].app is stored in @@/Applications/@@, if this is not the case please skip to Advanced Configuration Options below.

# Copy the enclosed '''com.papercut.client.plist''' to @@[=/Library/LaunchAgents/=]@@
Changed lines 25-27 from:
##“cd /Library/[=LaunchAgents=]/”
##“sudo
chown root:wheel com.papercut.client.plist”
##“sudo
chmod 644 com.papercut.client.plist”
to:

-->@@[=cd /Library/LaunchAgents/=]@@
-->@@[=sudo
chown root:wheel com.papercut.client.plist=]@@
-->@@[=sudo
chmod 644 com.papercut.client.plist=]@@
Changed lines 31-34 from:
##“ls -lah com.papercut.client.plist”
##
The output should look like: -rw-r--r--@ 1 root  wheel  458B Jul 29  2014 com.papercut.client.plist
#Reboot the Mac to verify that the launchd job is functioning as expected, or in Terminal.app run the following: “launchctl load /Library/[=LaunchAgents=]/com.papercut.client.plist”
to:

-->@@[=ls -lah com.papercut.client.plist=]@@

-->
The output should look like:

-->@@[=-rw-r--r--@ 1 root  wheel  458B Jul 29  2014 com.papercut.client.plist=]@@

#Reboot the Mac to verify that the launchd job is functioning as expected, or in Terminal.app run the following: @@launchctl load /Library/[=LaunchAgents=]/com.papercut.client.plist@@
May 13, 2015, at 11:35 PM by Kyle - Formtting Advanced Configuration Option
Changed lines 34-39 from:
**[=As these Macs are highly likely to encounter situations where they may be outside of the range of your PaperCut server it is highly recommended that you modify com.papercut.client.plist by replacing “KeepAlive” with “RunAtLoad” as this will open PCClient.app at the time of user login and allow for application closure. “KeepAlive” ensures that PCClient.app is always running.=]
*If you encounter Java errors or [=PCClient.app=] errors out at launch:
**In com.papercut.client.plist
replace [=<string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string> with <string>open -g -W /Applications/PCClient.app/</string>=]
*If [=PCClient
.app is not stored in /Applications/=]
**Edit com
.papercut.client.plist to reflect the appropriate path on the line [=<string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>=] -- substitute the correct path for [=PCClient.app=]
to:

-->[=As these Macs are highly likely to encounter situations where they may be outside of the range of your PaperCut server it is highly recommended that you modify com.papercut.client.plist by replacing “KeepAlive” with “RunAtLoad” as this will open PCClient.app at the time of user login and allow for application closure. “KeepAlive” ensures that PCClient.app is always running.=]

*If you encounter Java errors or [=PCClient.app=] errors out at launch you can replace the following in the '''com.papercut.client.plist'''

--
>@@[=<string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>=]@@

-->with

-->@@[=<string>open -g -W /Applications/
PCClient.app/</string>=]@@

*If [=PCClient.app=] is not stored under @@[=/Applications/=]@@ you can edit '''com.papercut.client.plist''' to reflect the appropriate path to [=PCClient.app=] by updating the following line

-->@@[=<string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>=]@@

May 13, 2015, at 11:04 PM by Vanessa White - Clarifying Launchd setup process, streamlining things, and making everything better for everybody
Changed lines 3-8 from:
The PaperCut [[https://www.papercut.com/products/ng/manual/ch-user-client.html#user-client-deploy-macos-multiuser|Manual]] documents use of a Login Hook to start the user client.  The Login Hook runs as root which allows pop-up authentication to be [[https://www.papercut.com/products/ng/manual/ch-mac-printing-pre-auth.html | eliminated]] in some scenarios.

One disadvantage of the Login Hook approach is that only a single Login Hook may be defined
.  This may not be a great limitation as you can run [[MacLoginHook | multiple commands]] with a single Login Hook script.  However, in some deployment situations other application installs may interfere with the Login Hook and an alternative startup mechanism may be sought.

We highly recommend using the Launch Agent method described below. Apple also recommends using this method as opposed to using a login hook, as described on their [[https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CustomLogin.html|Apple Developer website]]
.
to:
!!Why Launchd?

For Macintosh computers running OS X 10
.7 and later launchd is the most practical approach to launching the [=PCClient=].app. As Apple has begun to focus heavily on securing root access to systems Login Hooks have been deprecated in favor of [=LaunchDaemons=] and [=LaunchAgents=] and have safer, less wide-reaching system access.

We highly recommend using the Launch Agent method described below
. Apple also recommends using this method as opposed to using a login hook, as described on their [[https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CustomLogin.html|Apple Developer website]]. For an in-depth guide to launchd and how it operates you may wish to peruse [[http://launchd.info]] which is a human-readable guide for writing, configuring, and maintaining launchd guides.
Changed lines 11-19 from:
!!Defining a Launchd plist file to start the PaperCut Client

Launchd provides a flexible way to start a process on login, simply by placing a plist file in the appropriate location.  A plist file for starting the PaperCut client may look like this:

Contents of "com.papercut.client.plist" - available to download here: [[(Attach:)PaperCut_LaunchD.zip]]

[-[@
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
to:
!!Setting up Launchd:

Please note: Before rolling out your [=PCClient.app=] launchd plist it is highly recommended that you test it on either a Mac OS VM, a dedicated testing workstation, or the Mac of a user who is a willing guinea pig.

Also, the supplied launchd plist is best suited for Macs that do not leave your network, i.e. iMacs, Mac Pros, and Mac Minis that are primarily stationary. If you are looking for a solution better suited to portable Macs like MacBooks, MacBook Airs, and MacBook Pros please see the advanced configuration section below.

!!!Process
# Log in to the test Mac as user with Administrator access.
#Download our basic launchd plist here: [[(Attach:)PaperCut_LaunchD.zip]] This plist assumes that [=PCClient=].app is stored in /Applications/, if this is not the case please skip to Advanced Configuration Options below.
# Copy the enclosed com.papercut.client.plist to /Library/[=LaunchAgents=]/
#Next we’ll be opening Terminal.app to verify the permissions are correct on the plist to ensure launchctl will be able to operate the plist. If you are unaccustomed to using Terminal you can copy and paste the following commands in, omitting the quote marks.
##“cd /Library/[=LaunchAgents=]/”
##“sudo chown root:wheel com.papercut.client.plist”
##“sudo chmod 644 com.papercut.client.plist”
# Next we’ll verify that the permissions for the file are correct:
##“ls -lah com.papercut.client.plist”
##The output should look like: -rw-r--r--@ 1 root  wheel  458B Jul 29  2014 com.papercut.client.plist
#Reboot the Mac to verify that the launchd job is functioning as expected, or in Terminal.app run the following: “launchctl load /Library/[=LaunchAgents=]/com.papercut.client.plist”

\\

!!Advanced Configuration Options:
*Suggestions for MacBooks/MacBook Airs/MacBook Pros:
**[=As these Macs are highly likely to encounter situations where they may be outside of the range of your PaperCut server it is highly recommended that you modify com.papercut.client.plist by replacing “KeepAlive” with “RunAtLoad” as this will open PCClient.app at the time of user login and allow for application closure. “KeepAlive” ensures that PCClient.app is always running.=]
*If you encounter Java errors or [=PCClient.app=] errors out at launch:
**In com.papercut.client.plist replace [=<string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string> with <string>open -g -W /Applications/PCClient.app/</string>=]
*If [=PCClient.app is not stored in /Applications/=]
**Edit com.papercut.client.plist to reflect the appropriate path on the line [=<string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>=] -- substitute the correct path for [=PCClient.app=]

\\

!!Launchd plist contents:
The above-linked .zip file contains com.papercut.client.plist, which is the following XML information:


<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "[=http://www.apple.com/DTDs/PropertyList-1.0.dtd=]">
Changed line 52 from:
     <key>ProgramArguments</key>
to:
     <key>[=ProgramArguments=]</key>
Changed line 54 from:
         <string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>
to:
         <string>[=/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher=]</string>
Changed line 56 from:
     <key>KeepAlive</key>
to:
     <key>[=KeepAlive=]</key>
Changed lines 60-69 from:
@]-]

Launchd using this plist file will start the client located in [=/Applications/PCClient.app=] and the [="KeepAlive"=] tag ensures the client will be restarted if it is closed.

Place the com.papercut.client.plist file in [=/Library/LaunchAgents=] to have the client started automatically for all users on the Mac.

*Note - if you want to ensure that the [=PCClient.app=] will start through Launchd for all users of the Mac, make sure that the owner and permissions for the .plist file are all correct by running the following in Terminal:
* @@sudo chown root:wheel /Library/[=LaunchAgents=]/com.papercut.client.plist@@
* @@sudo chmod 644 /Library/[=LaunchAgents=]/com.papercut.client.plist@@

to:
Changed lines 63-71 from:
!!Troubleshooting automatic startup of the client using this method

1
. Does the client start correctly for the user when you run it directly from the /Applications folder?

2. If it runs successfully 'manually' for the user in question, but is not running automatically through Launchd, then try manually loading the plist while logged in as the user who is not getting the client auto-starting. E
.g. if the user admin is getting the client running successfully, but the user tim is not, log in as tim to the Mac, then try running:\\
@@launchctl load /Library/[=LaunchAgents=]/com.papercut.client.plist@@\\
in Terminal, which
may show any additional errors about why the plist is loading correctly.\\

to:
!!Legacy Solutions:

The PaperCut [[https://www
.papercut.com/products/ng/manual/ch-user-client.html#user-client-deploy-macos-multiuser|Manual]] documents use of a Login Hook to start the user client.  The Login Hook runs as root which allows pop-up authentication to be [[https://www.papercut.com/products/ng/manual/ch-mac-printing-pre-auth.html | eliminated]] in some scenarios.

One disadvantage of the Login Hook approach is that only a single Login Hook may be defined
.  This may not be a great limitation as you can run [[MacLoginHook | multiple commands]] with a single Login Hook script.  However, in some deployment situations other application installs may interfere with the Login Hook and an alternative startup mechanism may be sought.

Changed lines 9-10 from:
!!Defining a Launchd unit file to Start the PaperCut Client
to:
\\

!!Defining a Launchd plist file to start the PaperCut Client
Added lines 42-43:
\\
October 17, 2014, at 01:30 AM by TimG - Added paragraph about Apple's guidance on using launchd over login hook
Added lines 7-8:
We highly recommend using the Launch Agent method described below. Apple also recommends using this method as opposed to using a login hook, as described on their [[https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CustomLogin.html|Apple Developer website]].
August 14, 2014, at 04:21 PM by TimG - Added plist troubleshooting and permission/owner requirements for running under other users
Changed lines 34-46 from:
to:
*Note - if you want to ensure that the [=PCClient.app=] will start through Launchd for all users of the Mac, make sure that the owner and permissions for the .plist file are all correct by running the following in Terminal:
* @@sudo chown root:wheel /Library/[=LaunchAgents=]/com.papercut.client.plist@@
* @@sudo chmod 644 /Library/[=LaunchAgents=]/com.papercut.client.plist@@

!!Troubleshooting automatic startup of the client using this method

1. Does the client start correctly for the user when you run it directly from the /Applications folder?

2. If it runs successfully 'manually' for the user in question, but is not running automatically through Launchd, then try manually loading the plist while logged in as the user who is not getting the client auto-starting. E.g. if the user admin is getting the client running successfully, but the user tim is not, log in as tim to the Mac, then try running:\\
@@launchctl load /Library/[=LaunchAgents=]/com.papercut.client.plist@@\\
in Terminal, which may show any additional errors about why the plist is loading correctly.\\

Changed lines 11-12 from:
Contents of "com.papercut.client.plist" - available to download here: Attach:PaperCut_LaunchD.zip
to:
Contents of "com.papercut.client.plist" - available to download here: [[(Attach:)PaperCut_LaunchD.zip]]
August 01, 2014, at 07:57 PM by TimG - Added downloadable plist file
Changed lines 11-12 from:
Contents of "com.papercut.client.plist" - available to download here:
to:
Contents of "com.papercut.client.plist" - available to download here: Attach:PaperCut_LaunchD.zip
Changed lines 11-12 from:
Contents of "com.papercut.client.plist" - available to download here: Attach:papercut.client.plist
to:
Contents of "com.papercut.client.plist" - available to download here:
Changed lines 11-12 from:
Contents of "com.papercut.client.plist" - available to download here: [[(Attach:)papercut.client.plist]]
to:
Contents of "com.papercut.client.plist" - available to download here: Attach:papercut.client.plist
August 01, 2014, at 07:54 PM by TimG - Added downloadable plist file
Changed lines 11-12 from:
Contents of "com.papercut.client.plist":
to:
Contents of "com.papercut.client.plist" - available to download here: [[(Attach:)papercut.client.plist]]
Changed lines 5-6 from:
One disadvantage of the Login Hook approach is that only a single Login Hook may be defined.  This may not be a great limitation as you can run [[MacLoginHook | multiple commands]] with a single Login Hook script.  However in some deployment situations other application installs may interfere with the Login Hook and an alternative startup mechanism may be sought.
to:
One disadvantage of the Login Hook approach is that only a single Login Hook may be defined.  This may not be a great limitation as you can run [[MacLoginHook | multiple commands]] with a single Login Hook script.  However, in some deployment situations other application installs may interfere with the Login Hook and an alternative startup mechanism may be sought.
Changed lines 30-31 from:
This plist will start the client located in [=/Applications/PCClient.app=] and the [="KeepAlive"=] tag ensures the client will be restarted it if it is closed.
to:
Launchd using this plist file will start the client located in [=/Applications/PCClient.app=] and the [="KeepAlive"=] tag ensures the client will be restarted if it is closed.
Changed lines 32-34 from:
Place the com.papercut.client.plist file in @@/Library/LaunchAgents@@ to have the client started automatically for all users on the Mac.

to:
Place the com.papercut.client.plist file in [=/Library/LaunchAgents=] to have the client started automatically for all users on the Mac.

Changed lines 30-31 from:
This plist will start the client located in /Applications/PCClient.app and the "KeepAlive" tag ensures the client will be restarted it if it is closed.
to:
This plist will start the client located in [=/Applications/PCClient.app=] and the [="KeepAlive"=] tag ensures the client will be restarted it if it is closed.
Changed lines 13-32 from:
  [-@@<?xml version="1.0" encoding="UTF-8"?>@@-]
  [-@@<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">@@-]
  [-@@<plist version="1.0">@@-]
  [-@@<dict>@@-]
  [-@@    <key>Label</key>@@-]
  [-@@    <string>com.papercut.client.agent</string>@@-]
  [-@@    <key>ProgramArguments</key>@@-]
  [-@@    <array>@@-]
  [-@@        <string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>@@-]
  [-@@    </array>@@-]
  [-@@    <key>KeepAlive</key>@@-]
  [-@@    <true/>@@-]
  [-@@</dict>@@-]
  [-@@</plist>@@-]

This plist will start the client located in /Applications/PCClient.app and the KeepAlive tag ensures the client will be restarted it if it is closed.

Place the com.papercut.client.plist file in /Library/LaunchAgents to have the client started automatically for all users on the Mac.

to:
[-[@
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
  <dict>
      <key>Label</key>
      <string>com.papercut.client.agent</string>
      <key>ProgramArguments</key>
      <array>
          <string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>
      </array>
      <key>KeepAlive</key>
      <true/>
  </dict>
  </plist>
@]-]

This plist will start the client located in /Applications/PCClient.app and the "KeepAlive" tag ensures the client will be restarted it if it is closed.

Place the com.papercut.client.plist file in @@/Library/LaunchAgents@@ to have the client started automatically for all users on the Mac.

Changed lines 5-6 from:
One disadvantage of the Login Hook approach is that only a single Login Hook may be defined.  This may not be a great limitation as you can run [[MacLoginHook | multiple commands] with a single Login Hook script.  However in some deployment situations other application installs may interfere with the Login Hook and an alternative startup mechanism may be sought.
to:
One disadvantage of the Login Hook approach is that only a single Login Hook may be defined.  This may not be a great limitation as you can run [[MacLoginHook | multiple commands]] with a single Login Hook script.  However in some deployment situations other application installs may interfere with the Login Hook and an alternative startup mechanism may be sought.
Changed lines 12-26 from:
[-@@<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version=
"1.0">
<dict>
   <key>Label</key>
    <string>com.papercut.client.agent</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>
    </array>
    <key>KeepAlive</key>
    <true/>
</dict>
<
/plist>@@-]
to:

  [-@@<?xml version="1.0" encoding="UTF-8"?>@@-]
  [
-@@<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">@@-]
  [-@@<plist version="1.0">@@-]
  [-@@<dict>@@-]
  [-@@    <key>Label</key>@@-]
  [-@@    <string>com.papercut.client.agent</string>@@-]
  [-@@    <key>ProgramArguments</key>@@-]
  [-@@    <array>@@-]
  [-@@        <string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>@@-]
  [-@@    </array>@@-]
  [-@@    <key>KeepAlive</key>@@-]
  [-@@    <true/>@@-]
  [-@@</dict>@@-]
  [-@@
</plist>@@-]
Added lines 1-35:
(:title Starting the Client on Mac OS with Launchd:)

The PaperCut [[https://www.papercut.com/products/ng/manual/ch-user-client.html#user-client-deploy-macos-multiuser|Manual]] documents use of a Login Hook to start the user client.  The Login Hook runs as root which allows pop-up authentication to be [[https://www.papercut.com/products/ng/manual/ch-mac-printing-pre-auth.html | eliminated]] in some scenarios.

One disadvantage of the Login Hook approach is that only a single Login Hook may be defined.  This may not be a great limitation as you can run [[MacLoginHook | multiple commands] with a single Login Hook script.  However in some deployment situations other application installs may interfere with the Login Hook and an alternative startup mechanism may be sought.

!!Defining a Launchd unit file to Start the PaperCut Client

Launchd provides a flexible way to start a process on login, simply by placing a plist file in the appropriate location.  A plist file for starting the PaperCut client may look like this:

Contents of "com.papercut.client.plist":
[-@@<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.papercut.client.agent</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/PCClient.app/Contents/MacOS/JavaAppLauncher</string>
    </array>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>@@-]

This plist will start the client located in /Applications/PCClient.app and the KeepAlive tag ensures the client will be restarted it if it is closed.

Place the com.papercut.client.plist file in /Library/LaunchAgents to have the client started automatically for all users on the Mac.


----
''Categories:'' [[Category.UserClientTool|+]], [[Category.Mac|+]]
----
[-Keywords: launchd, client, login hook-]

Comments

Share your findings and experience with other PaperCut users. Feel free to add comments and suggestions about this Knowledge Base article. Please don't use this for support requests.

Article last modified on January 25, 2018, at 07:58 PM
Printable View   |   Article History   |   Edit Article