????

Your IP : 18.190.207.156


Current Path : C:/Windows/System32/Printing_Admin_Scripts/en-US/
Upload File :
Current File : C:/Windows/System32/Printing_Admin_Scripts/en-US/prncnfg.vbs

��'----------------------------------------------------------------------

'

' Copyright (c) Microsoft Corporation. All rights reserved.

'

' Abstract:

'

' prncnfg.vbs - printer configuration script for WMI on Windows used to get

'     and set printer configuration also used to rename a printer

'

' Usage:

' prncnfg [-gtx?] [-s server] [-p printer] [-u user name] [-w password]

'                 [-z new printer name] [-r port name] [-l location] [-m comment]

'                 [-h share name] [-f sep-file] [-y data-type] [-st start time]

'                 [-ut until time] [-o priority] [-i default priority]

'                 [<+|->rawonly][<+|->keepprintedjobs][<+|->queued][<+|->workoffline]

'                 [<+|->enabledevq][<+|->docompletefirst][<+|->enablebidi]

'

' Examples:

' prncnfg -g -s server -p printer

' prncnfg -x -p printer -w "new Printer"

' prncnfg -t -s server -p Printer -l "Building A/Floor 100/Office 1" -m "Color Printer"

' prncnfg -t -p printer -h "Share" +shared -direct

' prncnfg -t -p printer +rawonly +keepprintedjobs

' prncnfg -t -p printer -st 2300 -ut 0215 -o 10 -i 5

'

'----------------------------------------------------------------------



option explicit



'

' Debugging trace flags, to enable debug output trace message

' change gDebugFlag to true.

'

const kDebugTrace = 1

const kDebugError = 2

dim   gDebugFlag



gDebugFlag = false



const kFlagUpdateOnly = 1



'

' Operation action values.

'

const kActionUnknown   = 0

const kActionSet       = 1

const kActionGet       = 2

const kActionRename    = 3



const kErrorSuccess    = 0

const kErrorFailure    = 1



'

' Constants for the parameter dictionary

'

const kServerName      = 1

const kPrinterName     = 2

const kNewPrinterName  = 3

const kShareName       = 4

const kPortName        = 5

const kDriverName      = 6

const kComment         = 7

const kLocation        = 8

const kSepFile         = 9

const kPrintProc       = 10

const kDataType        = 11

const kParameters      = 12

const kPriority        = 13

const kDefaultPriority = 14

const kStartTime       = 15

const kUntilTime       = 16

const kQueued          = 17

const kDirect          = 18

const kDefault         = 19

const kShared          = 20

const kNetwork         = 21

const kHidden          = 23

const kLocal           = 24

const kEnableDevq      = 25

const kKeepPrintedJobs = 26

const kDoCompleteFirst = 27

const kWorkOffline     = 28

const kEnableBidi      = 29

const kRawOnly         = 30

const kPublished       = 31

const kUserName        = 32

const kPassword        = 33



const kNameSpace       = "root\cimv2"



'

' Generic strings

'

const L_Empty_Text                 = ""

const L_Space_Text                 = " "

const L_Error_Text                 = "Error"

const L_Success_Text               = "Success"

const L_Failed_Text                = "Failed"

const L_Hex_Text                   = "0x"

const L_Printer_Text               = "Printer"

const L_Operation_Text             = "Operation"

const L_Provider_Text              = "Provider"

const L_Description_Text           = "Description"

const L_Debug_Text                 = "Debug:"



'

' General usage messages

'

const L_Help_Help_General01_Text   = "Usage: prncnfg [-gtx?] [-s server][-p printer][-z new printer name]"

const L_Help_Help_General02_Text   = "               [-u user name][-w password][-r port name][-l location]"

const L_Help_Help_General03_Text   = "               [-m comment][-h share name][-f sep file][-y datatype]"

const L_Help_Help_General04_Text   = "               [-st start time][-ut until time][-i default priority]"

const L_Help_Help_General05_Text   = "               [-o priority][<+|->shared][<+|->direct][<+|->hidden]"

const L_Help_Help_General06_Text   = "               [<+|->published][<+|->rawonly][<+|->queued][<+|->enablebidi]"

const L_Help_Help_General07_Text   = "               [<+|->keepprintedjobs][<+|->workoffline][<+|->enabledevq]"

const L_Help_Help_General08_Text   = "               [<+|->docompletefirst]"

const L_Help_Help_General09_Text   = "Arguments:"

const L_Help_Help_General10_Text   = "-f     - separator file name"

const L_Help_Help_General11_Text   = "-g     - get configuration"

const L_Help_Help_General12_Text   = "-h     - share name"

const L_Help_Help_General13_Text   = "-i     - default priority"

const L_Help_Help_General14_Text   = "-l     - location string"

const L_Help_Help_General15_Text   = "-m     - comment string"

const L_Help_Help_General16_Text   = "-o     - priority"

const L_Help_Help_General17_Text   = "-p     - printer name"

const L_Help_Help_General18_Text   = "-r     - port name"

const L_Help_Help_General19_Text   = "-s     - server name"

const L_Help_Help_General20_Text   = "-st    - start time"

const L_Help_Help_General21_Text   = "-t     - set configuration"

const L_Help_Help_General22_Text   = "-u     - user name"

const L_Help_Help_General23_Text   = "-ut    - until time"

const L_Help_Help_General24_Text   = "-w     - password"

const L_Help_Help_General25_Text   = "-x     - change printer name"

const L_Help_Help_General26_Text   = "-y     - data type string"

const L_Help_Help_General27_Text   = "-z     - new printer name"

const L_Help_Help_General28_Text   = "-?     - display command usage"

const L_Help_Help_General29_Text   = "Examples:"

const L_Help_Help_General30_Text   = "prncnfg -g -s server -p printer"

const L_Help_Help_General31_Text   = "prncnfg -x -s server -p printer -z ""new printer"""

const L_Help_Help_General32_Text   = "prncnfg -t -p printer -l ""Building A/Floor 100/Office 1"" -m ""Color Printer"""

const L_Help_Help_General33_Text   = "prncnfg -t -p printer -h ""Share"" +shared -direct"

const L_Help_Help_General34_Text   = "prncnfg -t -p printer +rawonly +keepprintedjobs"

const L_Help_Help_General35_Text   = "prncnfg -t -p printer -st 2300 -ut 0215 -o 1 -i 5"



'

' Messages to be displayed if the scripting host is not cscript

'

const L_Help_Help_Host01_Text      = "This script should be executed from the Command Prompt using CScript.exe."

const L_Help_Help_Host02_Text      = "For example: CScript script.vbs arguments"

const L_Help_Help_Host03_Text      = ""

const L_Help_Help_Host04_Text      = "To set CScript as the default application to run .VBS files run the following:"

const L_Help_Help_Host05_Text      = "     CScript //H:CScript //S"

const L_Help_Help_Host06_Text      = "You can then run ""script.vbs arguments"" without preceding the script with CScript."



'

' General error messages

'

const L_Text_Error_General01_Text  = "The scripting host could not be determined."

const L_Text_Error_General02_Text  = "Unable to parse command line."

const L_Text_Error_General03_Text  = "Win32 error code"



'

' Miscellaneous messages

'

const L_Text_Msg_General01_Text    = "Renamed printer"

const L_Text_Msg_General02_Text    = "New printer name"

const L_Text_Msg_General03_Text    = "Unable to rename printer"

const L_Text_Msg_General04_Text    = "Unable to get configuration for printer"

const L_Text_Msg_General05_Text    = "Printer always available"

const L_Text_Msg_General06_Text    = "Configured printer"

const L_Text_Msg_General07_Text    = "Unable to configure printer"

const L_Text_Msg_General08_Text    = "Unable to get SWbemLocator object"

const L_Text_Msg_General09_Text    = "Unable to connect to WMI service"

const L_Text_Msg_General10_Text    = "Printer status"

const L_Text_Msg_General11_Text    = "Extended printer status"

const L_Text_Msg_General12_Text    = "Detected error state"

const L_Text_Msg_General13_Text    = "Extended detected error state"



'

' Printer properties

'

const L_Text_Msg_Printer01_Text    = "Server name"

const L_Text_Msg_Printer02_Text    = "Printer name"

const L_Text_Msg_Printer03_Text    = "Share name"

const L_Text_Msg_Printer04_Text    = "Driver name"

const L_Text_Msg_Printer05_Text    = "Port name"

const L_Text_Msg_Printer06_Text    = "Comment"

const L_Text_Msg_Printer07_Text    = "Location"

const L_Text_Msg_Printer08_Text    = "Separator file"

const L_Text_Msg_Printer09_Text    = "Print processor"

const L_Text_Msg_Printer10_Text    = "Data type"

const L_Text_Msg_Printer11_Text    = "Parameters"

const L_Text_Msg_Printer12_Text    = "Attributes"

const L_Text_Msg_Printer13_Text    = "Priority"

const L_Text_Msg_Printer14_Text    = "Default priority"

const L_Text_Msg_Printer15_Text    = "Start time"

const L_Text_Msg_Printer16_Text    = "Until time"

const L_Text_Msg_Printer17_Text    = "Status"

const L_Text_Msg_Printer18_Text    = "Job count"

const L_Text_Msg_Printer19_Text    = "Average pages per minute"



'

' Printer attributes

'

const L_Text_Msg_Attrib01_Text     = "direct"

const L_Text_Msg_Attrib02_Text     = "raw_only"

const L_Text_Msg_Attrib03_Text     = "local"

const L_Text_Msg_Attrib04_Text     = "shared"

const L_Text_Msg_Attrib05_Text     = "keep_printed_jobs"

const L_Text_Msg_Attrib06_Text     = "published"

const L_Text_Msg_Attrib07_Text     = "queued"

const L_Text_Msg_Attrib08_Text     = "default"

const L_Text_Msg_Attrib09_Text     = "network"

const L_Text_Msg_Attrib10_Text     = "enable_bidi"

const L_Text_Msg_Attrib11_Text     = "do_complete_first"

const L_Text_Msg_Attrib12_Text     = "work_offline"

const L_Text_Msg_Attrib13_Text     = "hidden"

const L_Text_Msg_Attrib14_Text     = "enable_devq_print"



'

' Printer status

'

const L_Text_Msg_Status01_Text     = "Other"

const L_Text_Msg_Status02_Text     = "Unknown"

const L_Text_Msg_Status03_Text     = "Idle"

const L_Text_Msg_Status04_Text     = "Printing"

const L_Text_Msg_Status05_Text     = "Warmup"

const L_Text_Msg_Status06_Text     = "Stopped printing"

const L_Text_Msg_Status07_Text     = "Offline"

const L_Text_Msg_Status08_Text     = "Paused"

const L_Text_Msg_Status09_Text     = "Error"

const L_Text_Msg_Status10_Text     = "Busy"

const L_Text_Msg_Status11_Text     = "Not available"

const L_Text_Msg_Status12_Text     = "Waiting"

const L_Text_Msg_Status13_Text     = "Processing"

const L_Text_Msg_Status14_Text     = "Initializing"

const L_Text_Msg_Status15_Text     = "Power save"

const L_Text_Msg_Status16_Text     = "Pending deletion"

const L_Text_Msg_Status17_Text     = "I/O active"

const L_Text_Msg_Status18_Text     = "Manual feed"

const L_Text_Msg_Status19_Text     = "No error"

const L_Text_Msg_Status20_Text     = "Low paper"

const L_Text_Msg_Status21_Text     = "No paper"

const L_Text_Msg_Status22_Text     = "Low toner"

const L_Text_Msg_Status23_Text     = "No toner"

const L_Text_Msg_Status24_Text     = "Door open"

const L_Text_Msg_Status25_Text     = "Jammed"

const L_Text_Msg_Status26_Text     = "Service requested"

const L_Text_Msg_Status27_Text     = "Output bin full"

const L_Text_Msg_Status28_Text     = "Paper problem"

const L_Text_Msg_Status29_Text     = "Cannot print page"

const L_Text_Msg_Status30_Text     = "User intervention required"

const L_Text_Msg_Status31_Text     = "Out of memory"

const L_Text_Msg_Status32_Text     = "Server unknown"





'

' Debug messages

'

const L_Text_Dbg_Msg01_Text        = "In function RenamePrinter"

const L_Text_Dbg_Msg02_Text        = "New printer name"

const L_Text_Dbg_Msg03_Text        = "In function GetPrinter"

const L_Text_Dbg_Msg04_Text        = "In function SetPrinter"

const L_Text_Dbg_Msg05_Text        = "In function ParseCommandLine"



main



'

' Main execution starts here

'

sub main



    dim iAction

    dim iRetval

    dim oParamDict



    '

    ' Abort if the host is not cscript

    '

    if not IsHostCscript() then



        call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _

                          L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _

                          L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)



        wscript.quit



    end if



    set oParamDict = CreateObject("Scripting.Dictionary")



    iRetval = ParseCommandLine(iAction, oParamDict)



    if iRetval = kErrorSuccess then



        select case iAction



            case kActionSet

                 iRetval = SetPrinter(oParamDict)



            case kActionGet

                 iRetval = GetPrinter(oParamDict)



            case kActionRename

                 iRetval = RenamePrinter(oParamDict)



            case else

                 Usage(True)

                 exit sub



        end select



    end if



end sub



'

' Rename printer

'

function RenamePrinter(oParamDict)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text

    DebugPrint kDebugTrace, L_Text_Msg_Printer01_Text & L_Space_Text & oParamDict.Item(kServerName)

    DebugPrint kDebugTrace, L_Text_Msg_Printer02_Text & L_Space_Text & oParamDict.Item(kPrinterName)

    DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text & L_Space_Text & oParamDict.Item(kNewPrinterName)



    dim oPrinter

    dim oService

    dim iRetval

    dim uResult

    dim strServer

    dim strPrinter

    dim strNewName

    dim strUser

    dim strPassword



    iRetval = kErrorFailure



    strServer   = oParamDict.Item(kServerName)

    strPrinter  = oParamDict.Item(kPrinterName)

    strNewName  = oParamDict.Item(kNewPrinterName)

    strUser     = oParamDict.Item(kUserName)

    strPassword = oParamDict.Item(kPassword)



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'")



    else



        RenamePrinter = kErrorFailure



        exit function



    end if



    '

    ' Check if Get was successful

    '

    if Err.Number = kErrorSuccess then



        uResult = oPrinter.RenamePrinter(strNewName)



        if Err.Number = kErrorSuccess then



            if uResult = kErrorSuccess then



                wscript.echo L_Text_Msg_General01_Text & L_Space_Text & strPrinter

                wscript.echo L_Text_Msg_General02_Text & L_Space_Text & strNewName



                iRetval = kErrorSuccess



            else



                wscript.echo L_Text_Msg_General03_Text & L_Space_Text & strPrinter & L_Space_Text _

                             & L_Text_Error_General03_Text & L_Space_Text & uResult



            end if



        else



            wscript.echo L_Text_Msg_General04_Text & L_Space_Text & strPrinter & L_Space_Text _

                         & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                         & Err.Description



        end if



    else



        wscript.echo L_Text_Msg_General04_Text & L_Space_Text & strPrinter & L_Space_Text _

                     & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                     & Err.Description



        '

        ' Try getting extended error information

        '

        call LastError()



    end if



    RenamePrinter = iRetval



end function



'

' Get printer configuration

'

function GetPrinter(oParamDict)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text

    DebugPrint kDebugTrace, L_Text_Msg_Printer01_Text & L_Space_Text & oParamDict.Item(kServerName)

    DebugPrint kDebugTrace, L_Text_Msg_Printer02_Text & L_Space_Text & oParamDict.Item(kPrinterName)



    dim oPrinter

    dim oService

    dim iRetval

    dim uResult

    dim strServer

    dim strPrinter

    dim strAttributes

    dim strStart

    dim strEnd

    dim strUser

    dim strPassword



    iRetval = kErrorFailure



    strServer  = oParamDict.Item(kServerName)

    strPrinter = oParamDict.Item(kPrinterName)

    strUser     = oParamDict.Item(kUserName)

    strPassword = oParamDict.Item(kPassword)



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oPrinter = oService.Get("Win32_Printer='" & strPrinter & "'")



    else



        GetPrinter = kErrorFailure



        exit function



    end if



    '

    ' Check if Get was successful

    '

    if Err.Number = kErrorSuccess then



        wscript.echo L_Text_Msg_Printer01_Text & L_Space_Text & strServer

        wscript.echo L_Text_Msg_Printer02_Text & L_Space_Text & oPrinter.DeviceID

        wscript.echo L_Text_Msg_Printer03_Text & L_Space_Text & oPrinter.ShareName

        wscript.echo L_Text_Msg_Printer04_Text & L_Space_Text & oPrinter.DriverName

        wscript.echo L_Text_Msg_Printer05_Text & L_Space_Text & oPrinter.PortName

        wscript.echo L_Text_Msg_Printer06_Text & L_Space_Text & oPrinter.Comment

        wscript.echo L_Text_Msg_Printer07_Text & L_Space_Text & oPrinter.Location

        wscript.echo L_Text_Msg_Printer08_Text & L_Space_Text & oPrinter.SeparatorFile

        wscript.echo L_Text_Msg_Printer09_Text & L_Space_Text & oPrinter.PrintProcessor

        wscript.echo L_Text_Msg_Printer10_Text & L_Space_Text & oPrinter.PrintJobDatatype

        wscript.echo L_Text_Msg_Printer11_Text & L_Space_Text & oPrinter.Parameters

        wscript.echo L_Text_Msg_Printer13_Text & L_Space_Text & CStr(oPrinter.Priority)

        wscript.echo L_Text_Msg_Printer14_Text & L_Space_Text & CStr(oPrinter.DefaultPriority)



        strStart = Mid(CStr(oPrinter.StartTime), 9, 4)

        strEnd = Mid(CStr(oPrinter.UntilTime), 9, 4)



        if strStart <> "" and strEnd <> "" then



            wscript.echo L_Text_Msg_Printer15_Text & L_Space_Text & Mid(strStart, 1, 2) & "h" & Mid(strStart, 3, 2)

            wscript.echo L_Text_Msg_Printer16_Text & L_Space_Text & Mid(strEnd, 1, 2) & "h" & Mid(strEnd, 3, 2)



        else



            wscript.echo L_Text_Msg_General05_Text



        end if



        strAttributes = L_Text_Msg_Printer12_Text



        if oPrinter.Direct then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib01_Text



        end if



        if oPrinter.RawOnly then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib02_Text



        end if



        if oPrinter.Local then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib03_Text



        end if



        if oPrinter.Shared then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib04_Text



        end if



        if oPrinter.KeepPrintedJobs then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib05_Text



        end if



        if oPrinter.Published then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib06_Text



        end if



        if oPrinter.Queued then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib07_Text



        end if



        if oPrinter.Default then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib08_Text



        end if



        if oPrinter.Network then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib09_Text



        end if



        if oPrinter.EnableBiDi then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib10_Text



        end if



        if oPrinter.DoCompleteFirst then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib11_Text



        end if



        if oPrinter.WorkOffline then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib12_Text



        end if



        if oPrinter.Hidden then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib13_Text



        end if



        if oPrinter.EnableDevQueryPrint then



            strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib14_Text



        end if



        wscript.echo strAttributes

        wscript.echo

        wscript.echo L_Text_Msg_General10_Text & L_Space_Text & PrnStatusToString(oPrinter.PrinterStatus)

        wscript.echo L_Text_Msg_General11_Text & L_Space_Text & ExtPrnStatusToString(oPrinter.ExtendedPrinterStatus)

        wscript.echo L_Text_Msg_General12_Text & L_Space_Text & DetectedErrorStateToString(oPrinter.DetectedErrorState)

        wscript.echo L_Text_Msg_General13_Text & L_Space_Text & ExtDetectedErrorStateToString(oPrinter.ExtendedDetectedErrorState)



        iRetval = kErrorSuccess



    else



        wscript.echo L_Text_Msg_General04_Text & L_Space_Text & oParamDict.Item(kPrinterName) & L_Space_Text _

                     & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                     & Err.Description



        '

        ' Try getting extended error information

        '

        call LastError()



    end if



    GetPrinter = iRetval



end function



'

' Configure a printer

'

function SetPrinter(oParamDict)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text

    DebugPrint kDebugTrace, L_Text_Msg_Printer01_Text & L_Space_Text & oParamDict.Item(kServerName)

    DebugPrint kDebugTrace, L_Text_Msg_Printer02_Text & L_Space_Text & oParamDict.Item(kPrinterName)



    dim oPrinter

    dim oService

    dim iRetval

    dim uResult

    dim strServer

    dim strPrinter

    dim strUser

    dim strPassword



    iRetval = kErrorFailure



    strServer   = oParamDict.Item(kServerName)

    strPrinter  = oParamDict.Item(kPrinterName)

    strNewName  = oParamDict.Item(kNewPrinterName)

    strUser     = oParamDict.Item(kUserName)

    strPassword = oParamDict.Item(kPassword)



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oPrinter = oService.Get("Win32_Printer='" & strPrinter & "'")



    else



        SetPrinter = kErrorFailure



        exit function



    end if



    '

    ' Check if Get was successful

    '

    if Err.Number = kErrorSuccess then



        if oParamdict.Exists(kPortName)        then oPrinter.PortName            = oParamDict.Item(kPortName)        end if

        if oParamdict.Exists(kDriverName)      then oPrinter.DriverName          = oParamDict.Item(kDriverName)      end if

        if oParamdict.Exists(kShareName)       then oPrinter.ShareName           = oParamDict.Item(kShareName)       end if

        if oParamdict.Exists(kLocation)        then oPrinter.Location            = oParamDict.Item(kLocation)        end if

        if oParamdict.Exists(kComment)         then oPrinter.Comment             = oParamDict.Item(kComment)         end if

        if oParamdict.Exists(kDataType)        then oPrinter.PrintJobDataType    = oParamDict.Item(kDataType)        end if

        if oParamdict.Exists(kSepFile)         then oPrinter.SeparatorFile       = oParamDict.Item(kSepfile)         end if

        if oParamdict.Exists(kParameters)      then oPrinter.Parameters          = oParamDict.Item(kParameters)      end if

        if oParamdict.Exists(kPriority)        then oPrinter.Priority            = oParamDict.Item(kPriority)        end if

        if oParamdict.Exists(kDefaultPriority) then oPrinter.DefaultPriority     = oParamDict.Item(kDefaultPriority) end if

        if oParamdict.Exists(kPrintProc)       then oPrinter.PrintProc           = oParamDict.Item(kPrintProc)       end if

        if oParamdict.Exists(kStartTime)       then oPrinter.StartTime           = oParamDict.Item(kStartTime)       end if

        if oParamdict.Exists(kUntilTime)       then oPrinter.UntilTime           = oParamDict.Item(kUntilTime)       end if

        if oParamdict.Exists(kQueued)          then oPrinter.Queued              = oParamDict.Item(kQueued)          end if

        if oParamdict.Exists(kDirect)          then oPrinter.Direct              = oParamDict.Item(kDirect)          end if

        if oParamdict.Exists(kShared)          then oPrinter.Shared              = oParamDict.Item(kShared)          end if

        if oParamdict.Exists(kHidden)          then oPrinter.Hidden              = oParamDict.Item(kHidden)          end if

        if oParamdict.Exists(kEnabledevq)      then oPrinter.EnableDevQueryPrint = oParamDict.Item(kEnabledevq)      end if

        if oParamdict.Exists(kKeepPrintedJobs) then oPrinter.KeepPrintedJobs     = oParamDict.Item(kKeepPrintedJobs) end if

        if oParamdict.Exists(kDoCompleteFirst) then oPrinter.DoCompleteFirst     = oParamDict.Item(kDoCompleteFirst) end if

        if oParamdict.Exists(kWorkOffline)     then oPrinter.WorkOffline         = oParamDict.Item(kWorkOffline)     end if

        if oParamdict.Exists(kEnableBidi)      then oPrinter.EnableBidi          = oParamDict.Item(kEnableBidi)      end if

        if oParamdict.Exists(kRawonly)         then oPrinter.RawOnly             = oParamDict.Item(kRawonly)         end if

        if oParamdict.Exists(kPublished)       then oPrinter.Published           = oParamDict.Item(kPublished)       end if



        oPrinter.Put_(kFlagUpdateOnly)



        if Err.Number = kErrorSuccess then



            wscript.echo L_Text_Msg_General06_Text & L_Space_Text & strPrinter



            iRetval = kErrorSuccess



        else



            wscript.echo L_Text_Msg_General07_Text & L_Space_Text & strPrinter & L_Space_Text _

                         & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                         & Err.Description



            '

            ' Try getting extended error information

            '

            call LastError()



        end if



    else



        wscript.echo L_Text_Msg_General04_Text & L_Space_Text & strPrinter & L_Space_Text _

                     & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                     & Err.Description



        '

        ' Try getting extended error information

        '

        call LastError()



    end if



    SetPrinter = iRetval



end function



'

' Converts the printer status to a string

'

function PrnStatusToString(Status)



    dim str



    str = L_Empty_Text



    select case Status



        case 1

            str = str + L_Text_Msg_Status01_Text + L_Space_Text



        case 2

            str = str + L_Text_Msg_Status02_Text + L_Space_Text



        case 3

            str = str + L_Text_Msg_Status03_Text + L_Space_Text



        case 4

            str = str + L_Text_Msg_Status04_Text + L_Space_Text



        case 5

            str = str + L_Text_Msg_Status05_Text + L_Space_Text



        case 6

            str = str + L_Text_Msg_Status06_Text + L_Space_Text



        case 7

            str = str + L_Text_Msg_Status07_Text + L_Space_Text



    end select



    PrnStatusToString = str



end function



'

' Converts the extended printer status to a string

'

function ExtPrnStatusToString(Status)



    dim str



    str = L_Empty_Text



    select case Status



        case 1

            str = str + L_Text_Msg_Status01_Text + L_Space_Text



        case 2

            str = str + L_Text_Msg_Status02_Text + L_Space_Text



        case 3

            str = str + L_Text_Msg_Status03_Text + L_Space_Text



        case 4

            str = str + L_Text_Msg_Status04_Text + L_Space_Text



        case 5

            str = str + L_Text_Msg_Status05_Text + L_Space_Text



        case 6

            str = str + L_Text_Msg_Status06_Text + L_Space_Text



        case 7

            str = str + L_Text_Msg_Status07_Text + L_Space_Text



        case 8

            str = str + L_Text_Msg_Status08_Text + L_Space_Text



        case 9

            str = str + L_Text_Msg_Status09_Text + L_Space_Text



        case 10

            str = str + L_Text_Msg_Status10_Text + L_Space_Text



        case 11

            str = str + L_Text_Msg_Status11_Text + L_Space_Text



        case 12

            str = str + L_Text_Msg_Status12_Text + L_Space_Text



        case 13

            str = str + L_Text_Msg_Status13_Text + L_Space_Text



        case 14

            str = str + L_Text_Msg_Status14_Text + L_Space_Text



        case 15

            str = str + L_Text_Msg_Status15_Text + L_Space_Text



        case 16

            str = str + L_Text_Msg_Status16_Text + L_Space_Text



        case 17

            str = str + L_Text_Msg_Status17_Text + L_Space_Text



        case 18

            str = str + L_Text_Msg_Status18_Text + L_Space_Text



    end select



    ExtPrnStatusToString = str



end function



'

' Converts the detected error state to a string

'

function DetectedErrorStateToString(Status)



    dim str



    str = L_Empty_Text



    select case Status



        case 0

            str = str + L_Text_Msg_Status02_Text + L_Space_Text



        case 1

            str = str + L_Text_Msg_Status01_Text + L_Space_Text



        case 2

            str = str + L_Text_Msg_Status01_Text + L_Space_Text



        case 3

            str = str + L_Text_Msg_Status20_Text + L_Space_Text



        case 4

            str = str + L_Text_Msg_Status21_Text + L_Space_Text



        case 5

            str = str + L_Text_Msg_Status22_Text + L_Space_Text



        case 6

            str = str + L_Text_Msg_Status23_Text + L_Space_Text



        case 7

            str = str + L_Text_Msg_Status24_Text + L_Space_Text



        case 8

            str = str + L_Text_Msg_Status25_Text + L_Space_Text



        case 9

            str = str + L_Text_Msg_Status07_Text + L_Space_Text



        case 10

            str = str + L_Text_Msg_Status26_Text + L_Space_Text



        case 11

            str = str + L_Text_Msg_Status27_Text + L_Space_Text



    end select



    DetectedErrorStateToString = str



end function



'

' Converts the extended detected error state to a string

'

function ExtDetectedErrorStateToString(Status)



    dim str



    str = L_Empty_Text



    select case Status



        case 0

            str = str + L_Text_Msg_Status02_Text + L_Space_Text



        case 1

            str = str + L_Text_Msg_Status01_Text + L_Space_Text



        case 2

            str = str + L_Text_Msg_Status01_Text + L_Space_Text



        case 3

            str = str + L_Text_Msg_Status20_Text + L_Space_Text



        case 4

            str = str + L_Text_Msg_Status21_Text + L_Space_Text



        case 5

            str = str + L_Text_Msg_Status22_Text + L_Space_Text



        case 6

            str = str + L_Text_Msg_Status23_Text + L_Space_Text



        case 7

            str = str + L_Text_Msg_Status24_Text + L_Space_Text



        case 8

            str = str + L_Text_Msg_Status25_Text + L_Space_Text



        case 9

            str = str + L_Text_Msg_Status07_Text + L_Space_Text



        case 10

            str = str + L_Text_Msg_Status26_Text + L_Space_Text



        case 11

            str = str + L_Text_Msg_Status27_Text + L_Space_Text



        case 12

            str = str + L_Text_Msg_Status28_Text + L_Space_Text



        case 13

            str = str + L_Text_Msg_Status29_Text + L_Space_Text



        case 14

            str = str + L_Text_Msg_Status30_Text + L_Space_Text



        case 15

            str = str + L_Text_Msg_Status31_Text + L_Space_Text



        case 16

            str = str + L_Text_Msg_Status32_Text + L_Space_Text



    end select



    ExtDetectedErrorStateToString = str



end function



'

' Debug display helper function

'

sub DebugPrint(uFlags, strString)



    if gDebugFlag = true then



        if uFlags = kDebugTrace then



            wscript.echo L_Debug_Text & L_Space_Text & strString



        end if



        if uFlags = kDebugError then



            if Err <> 0 then



                wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _

                             & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _

                             & L_Space_Text & Err.Description



            end if



        end if



    end if



end sub



'

' Parse the command line into its components

'

function ParseCommandLine(iAction, oParamdict)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg05_Text



    dim oArgs

    dim iIndex



    iAction = kActionUnknown

    iIndex = 0



    set oArgs = wscript.Arguments



    while iIndex < oArgs.Count



        select case oArgs(iIndex)



            case "-g"

                iAction = kActionGet



            case "-t"

                iAction = kActionSet



            case "-x"

                iAction = kActionRename



            case "-p"

                iIndex = iIndex + 1

                oParamdict.Add kPrinterName, oArgs(iIndex)



            case "-s"

                iIndex = iIndex + 1

                oParamdict.Add kServerName, RemoveBackslashes(oArgs(iIndex))



            case "-r"

                iIndex = iIndex + 1

                oParamdict.Add kPortName, oArgs(iIndex)



            case "-h"

                iIndex = iIndex + 1

                oParamdict.Add kShareName, oArgs(iIndex)



            case "-m"

                iIndex = iIndex + 1

                oParamdict.Add kComment, oArgs(iIndex)



            case "-l"

                iIndex = iIndex + 1

                oParamdict.Add kLocation, oArgs(iIndex)



            case "-y"

                iIndex = iIndex + 1

                oParamdict.Add kDataType, oArgs(iIndex)



            case "-f"

                iIndex = iIndex + 1

                oParamdict.Add kSepFile, oArgs(iIndex)



            case "-z"

                iIndex = iIndex + 1

                oParamdict.Add kNewPrinterName, oArgs(iIndex)



            case "-u"

                iIndex = iIndex + 1

                oParamdict.Add kUserName, oArgs(iIndex)



            case "-w"

                iIndex = iIndex + 1

                oParamdict.Add kPassword, oArgs(iIndex)



            case "-st"

                iIndex = iIndex + 1

                oParamdict.Add kStartTime, "********" & oArgs(iIndex) & "00.000000+000"



            case "-o"

                iIndex = iIndex + 1

                oParamdict.Add kPriority, oArgs(iIndex)



            case "-i"

                iIndex = iIndex + 1

                oParamdict.Add kDefaultPriority, oArgs(iIndex)



            case "-ut"

                iIndex = iIndex + 1

                oParamdict.Add kUntilTime, "********" & oArgs(iIndex) & "00.000000+000"



            case "-queued"

                oParamdict.Add kQueued, false



            case "+queued"

                oParamdict.Add kQueued, true



            case "-direct"

                oParamdict.Add kDirect, false



            case "+direct"

                oParamdict.Add kDirect, true



            case "-shared"

                oParamdict.Add kShared, false



            case "+shared"

                oParamdict.Add kShared, true



            case "-hidden"

                oParamdict.Add kHidden, false



            case "+hidden"

                oParamdict.Add kHidden, true



            case "-enabledevq"

                oParamdict.Add kEnabledevq, false



            case "+enabledevq"

                oParamdict.Add kEnabledevq, true



            case "-keepprintedjobs"

                oParamdict.Add kKeepprintedjobs, false



            case "+keepprintedjobs"

                oParamdict.Add kKeepprintedjobs, true



            case "-docompletefirst"

                oParamdict.Add kDocompletefirst, false



            case "+docompletefirst"

                oParamdict.Add kDocompletefirst, true



            case "-workoffline"

                oParamdict.Add kWorkoffline, false



            case "+workoffline"

                oParamdict.Add kWorkoffline, true



            case "-enablebidi"

                oParamdict.Add kEnablebidi, false



            case "+enablebidi"

                oParamdict.Add kEnablebidi, true



            case "-rawonly"

                oParamdict.Add kRawonly, false



            case "+rawonly"

                oParamdict.Add kRawonly, true



            case "-published"

                oParamdict.Add kPublished, false



            case "+published"

                oParamdict.Add kPublished, true



            case "-?"

                Usage(true)

                exit function



            case else

                Usage(true)

                exit function



        end select



        iIndex = iIndex + 1



    wend



    if Err = kErrorSuccess then



        ParseCommandLine = kErrorSuccess



    else



        wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description



        ParseCommandLine = kErrorFailure



    end if



end function



'

' Display command usage.

'

sub Usage(bExit)



    wscript.echo L_Help_Help_General01_Text

    wscript.echo L_Help_Help_General02_Text

    wscript.echo L_Help_Help_General03_Text

    wscript.echo L_Help_Help_General04_Text

    wscript.echo L_Help_Help_General05_Text

    wscript.echo L_Help_Help_General06_Text

    wscript.echo L_Help_Help_General07_Text

    wscript.echo L_Help_Help_General08_Text

    wscript.echo L_Help_Help_General09_Text

    wscript.echo L_Help_Help_General10_Text

    wscript.echo L_Help_Help_General11_Text

    wscript.echo L_Help_Help_General12_Text

    wscript.echo L_Help_Help_General13_Text

    wscript.echo L_Help_Help_General14_Text

    wscript.echo L_Help_Help_General15_Text

    wscript.echo L_Help_Help_General16_Text

    wscript.echo L_Help_Help_General17_Text

    wscript.echo L_Help_Help_General18_Text

    wscript.echo L_Help_Help_General19_Text

    wscript.echo L_Help_Help_General20_Text

    wscript.echo L_Help_Help_General21_Text

    wscript.echo L_Help_Help_General22_Text

    wscript.echo L_Help_Help_General23_Text

    wscript.echo L_Help_Help_General24_Text

    wscript.echo L_Help_Help_General25_Text

    wscript.echo L_Help_Help_General26_Text

    wscript.echo L_Help_Help_General27_Text

    wscript.echo L_Empty_Text

    wscript.echo L_Help_Help_General28_Text

    wscript.echo L_Help_Help_General29_Text

    wscript.echo L_Help_Help_General30_Text

    wscript.echo L_Help_Help_General31_Text

    wscript.echo L_Help_Help_General32_Text

    wscript.echo L_Help_Help_General33_Text

    wscript.echo L_Help_Help_General34_Text

    wscript.echo L_Help_Help_General35_Text



    if bExit then



        wscript.quit(1)



    end if



end sub



'

' Determines which program is being used to run this script.

' Returns true if the script host is cscript.exe

'

function IsHostCscript()



    on error resume next



    dim strFullName

    dim strCommand

    dim i, j

    dim bReturn



    bReturn = false



    strFullName = WScript.FullName



    i = InStr(1, strFullName, ".exe", 1)



    if i <> 0 then



        j = InStrRev(strFullName, "\", i, 1)



        if j <> 0 then



            strCommand = Mid(strFullName, j+1, i-j-1)



            if LCase(strCommand) = "cscript" then



                bReturn = true



            end if



        end if



    end if



    if Err <> 0 then



        wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



    end if



    IsHostCscript = bReturn



end function



'

' Retrieves extended information about the last error that occurred

' during a WBEM operation. The methods that set an SWbemLastError

' object are GetObject, PutInstance, DeleteInstance

'

sub LastError()



    on error resume next



    dim oError



    set oError = CreateObject("WbemScripting.SWbemLastError")



    if Err = kErrorSuccess then



        wscript.echo L_Operation_Text            & L_Space_Text & oError.Operation

        wscript.echo L_Provider_Text             & L_Space_Text & oError.ProviderName

        wscript.echo L_Description_Text          & L_Space_Text & oError.Description

        wscript.echo L_Text_Error_General03_Text & L_Space_Text & oError.StatusCode



    end if



end sub



'

' Connects to the WMI service on a server. oService is returned as a service

' object (SWbemServices)

'

function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)



    on error resume next



    dim oLocator

    dim bResult



    oService = null



    bResult  = false



    set oLocator = CreateObject("WbemScripting.SWbemLocator")



    if Err = kErrorSuccess then



        set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)



        if Err = kErrorSuccess then



            bResult = true



            oService.Security_.impersonationlevel = 3



            '

            ' Required to perform administrative tasks on the spooler service

            '

            oService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege"



            Err.Clear



        else



            wscript.echo L_Text_Msg_General08_Text & L_Space_Text & L_Error_Text _

                         & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                         & Err.Description



        end if



    else



        wscript.echo L_Text_Msg_General09_Text & L_Space_Text & L_Error_Text _

                     & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                     & Err.Description



    end if



    WmiConnect = bResult



end function



'

' Remove leading "\\" from server name

'

function RemoveBackslashes(strServer)



    dim strRet



    strRet = strServer



    if Left(strServer, 2) = "\\" and Len(strServer) > 2 then



        strRet = Mid(strServer, 3)



    end if



    RemoveBackslashes = strRet



end function





'' SIG '' Begin signature block

'' SIG '' MIIhXAYJKoZIhvcNAQcCoIIhTTCCIUkCAQExDzANBglg

'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor

'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC

'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg

'' SIG '' ie1efOwNeF5D8l67XxhZUjMjDFmogSjxo1MJEQP87/Wg

'' SIG '' ggrlMIIFBjCCA+6gAwIBAgITMwAAAu0sReTBRc9IRAAA

'' SIG '' AAAC7TANBgkqhkiG9w0BAQsFADCBhDELMAkGA1UEBhMC

'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT

'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw

'' SIG '' b3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRv

'' SIG '' d3MgUHJvZHVjdGlvbiBQQ0EgMjAxMTAeFw0yMDEyMTUy

'' SIG '' MTI5MTRaFw0yMTEyMDIyMTI5MTRaMHAxCzAJBgNVBAYT

'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH

'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y

'' SIG '' cG9yYXRpb24xGjAYBgNVBAMTEU1pY3Jvc29mdCBXaW5k

'' SIG '' b3dzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC

'' SIG '' AQEA1/mOTaZIAMdvXd/Uq3DhEpREugbVndaHjzafKgYv

'' SIG '' XqdiboW0UGKgYBgiM+f66zVMFxocrP4gxe33290l7UFD

'' SIG '' 6iVt6t7BkJDi91lzCGFZMsjlKfRwvDC64ucGyhaS64N5

'' SIG '' uQlvjwH8a8YjNwPwfF2IOU8r1MStiYVtBS6cQPAGT9HK

'' SIG '' FsuKOkieubIYQMwh6F05jPheTP0NvbxlISpy9LEbUYoB

'' SIG '' bbOjZ+GJbjOil7USxnbYK+bEQ+qSCnrHfolbLX5Ajmk3

'' SIG '' uFC11bjuJxA9opD6cmwi2QAs+V4HFuDjAhvJojb8lP/v

'' SIG '' qiZRe4mRvp0xsaQWI2y/Jv5czI7ZBiI6v+0d1QIDAQAB

'' SIG '' o4IBgjCCAX4wHwYDVR0lBBgwFgYKKwYBBAGCNwoDBgYI

'' SIG '' KwYBBQUHAwMwHQYDVR0OBBYEFBX5vmhcu8syt5gpQoPf

'' SIG '' BQEaWSozMFQGA1UdEQRNMEukSTBHMS0wKwYDVQQLEyRN

'' SIG '' aWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0

'' SIG '' ZWQxFjAUBgNVBAUTDTIyOTg3OSs0NjMzNDQwHwYDVR0j

'' SIG '' BBgwFoAUqSkCOY4WxJd4zZD5nk+a4XxVr1MwVAYDVR0f

'' SIG '' BE0wSzBJoEegRYZDaHR0cDovL3d3dy5taWNyb3NvZnQu

'' SIG '' Y29tL3BraW9wcy9jcmwvTWljV2luUHJvUENBMjAxMV8y

'' SIG '' MDExLTEwLTE5LmNybDBhBggrBgEFBQcBAQRVMFMwUQYI

'' SIG '' KwYBBQUHMAKGRWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv

'' SIG '' bS9wa2lvcHMvY2VydHMvTWljV2luUHJvUENBMjAxMV8y

'' SIG '' MDExLTEwLTE5LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqG

'' SIG '' SIb3DQEBCwUAA4IBAQAeDDbpx7pwpcs42ObZbp01JdBL

'' SIG '' Ul1/8L2+4IaJVeTRbjYc5hRcGbh3wjkNLBP90gXISlh8

'' SIG '' ZsC7k22x+k89M8JnDPp47a81uAE0kO3eEq9M90XvusY1

'' SIG '' B+2Q2N62wRJAjlvrj8jsX5RPGD69Hf9Tl0+TXE2aZ+FU

'' SIG '' o1vH9WsKRHorLLASNzOO+VrSx+iPN4ht2sHppvFK749M

'' SIG '' fSiTpnwMv1YTQ9gj/AiT+Htn+DYj8k/siV96lsHRhgE8

'' SIG '' xuTSyl306rKlfiuoCI/Q2o1vPpbPMz30r2q9Yd3823uc

'' SIG '' uN9CoFTpeOjSnvjz7uLjnrxDSSoKopMFZgvnGGcLWNEV

'' SIG '' nlxc/H+/MIIF1zCCA7+gAwIBAgIKYQd2VgAAAAAACDAN

'' SIG '' BgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzAR

'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v

'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv

'' SIG '' bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm

'' SIG '' aWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTExMDE5MTg0

'' SIG '' MTQyWhcNMjYxMDE5MTg1MTQyWjCBhDELMAkGA1UEBhMC

'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT

'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw

'' SIG '' b3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRv

'' SIG '' d3MgUHJvZHVjdGlvbiBQQ0EgMjAxMTCCASIwDQYJKoZI

'' SIG '' hvcNAQEBBQADggEPADCCAQoCggEBAN0Mu6LkLgnj58X3

'' SIG '' lmm8ACG9aTMz760Ey1SA7gaDu8UghNn30ovzOLCrpK0t

'' SIG '' fGJ5Bf/jSj8ENSBw48Tna+CcwDZ16Yox3Y1w5dw3tXRG

'' SIG '' lihbh2AjLL/cR6Vn91EnnnLrB6bJuR47UzV85dPsJ7mH

'' SIG '' HP65ySMJb6hGkcFuljxB08ujP10Cak3saR8lKFw2//1D

'' SIG '' FQqU4Bm0z9/CEuLCWyfuJ3gwi1sqCWsiiVNgFizAaB1T

'' SIG '' uuxJ851hjIVoCXNEXX2iVCvdefcVzzVdbBwrXM68nCOL

'' SIG '' b261Jtk2E8NP1ieuuTI7QZIs4cfNd+iqVE73XAsEh2W0

'' SIG '' QxiosuBtGXfsWiT6SAMCAwEAAaOCAUMwggE/MBAGCSsG

'' SIG '' AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBSpKQI5jhbEl3jN

'' SIG '' kPmeT5rhfFWvUzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi

'' SIG '' AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB

'' SIG '' /zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoY

'' SIG '' xDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1p

'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNS

'' SIG '' b29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUH

'' SIG '' AQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1p

'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1

'' SIG '' dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOC

'' SIG '' AgEAFPx8cVGlecJusu85Prw8Ug9uKz8QE3P+qGjQSKY0

'' SIG '' TYqWBSbuMUaQYXnW/zguRWv0wOUouNodj4rbCdcax0wK

'' SIG '' NmZqjOwb1wSQqBgXpJu54kAyNnbEwVrGv+QEwOoW06zD

'' SIG '' aO9irN1UbFAwWKbrfP6Up06O9Ox8hnNXwlIhczRa86OK

'' SIG '' VsgE2gcJ7fiL4870fo6u8PYLigj7P8kdcn9TuOu+Y+Dj

'' SIG '' PTFlsIHl8qzNFqSfPaixm8JC0JCEX1Qd/4nquh1HkG+w

'' SIG '' c05Bn0CfX+WhKrIRkXOKISjwzt5zOV8+q1xg7N8DEKjT

'' SIG '' Cen09paFtn9RiGZHGY2isBI9gSpoBXe7kUxie7bBB8e6

'' SIG '' eoc0Aw5LYnqZ6cr8zko3yS2kV3wc/j3cuA9a+tbEswKF

'' SIG '' Ajrqs9lu5GkhN96B0fZ1GQVn05NXXikbOcjuLeHN5EVz

'' SIG '' W9DSznqrFhmCRljQXp2Bs2evbDXyvOU/JOI1ogp1BvYY

'' SIG '' VpnUeCzRBRvr0IgBnaoQ8QXfun4sY7cGmyMhxPl4bOJY

'' SIG '' FwY2K5ESA8yk2fItuvmUnUDtGEXxzopcaz6rA9NwGCoK

'' SIG '' auBfR9HVYwoy8q/XNh8qcFrlQlkIcUtXun6DgfAhPPQc

'' SIG '' wcW5kJMOiEWThumxIJm+mMvFlaRdYtagYwggvXUQd309

'' SIG '' 80W5n5efy1eAbzOpBM93pGIcWX4xghXPMIIVywIBATCB

'' SIG '' nDCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp

'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT

'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEuMCwGA1UEAxMl

'' SIG '' TWljcm9zb2Z0IFdpbmRvd3MgUHJvZHVjdGlvbiBQQ0Eg

'' SIG '' MjAxMQITMwAAAu0sReTBRc9IRAAAAAAC7TANBglghkgB

'' SIG '' ZQMEAgEFAKCCAQQwGQYJKoZIhvcNAQkDMQwGCisGAQQB

'' SIG '' gjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC

'' SIG '' ARUwLwYJKoZIhvcNAQkEMSIEIEHXr2fNkPIz71v/XM89

'' SIG '' 8g/jo6d0nlVsrO6ai8Bf2Tl8MDwGCisGAQQBgjcKAxwx

'' SIG '' LgwsRDlHUDNYOHVMTC9BRFFEMUNndGpodDVRdnNUcTRP

'' SIG '' MlRTc0IwbHFvN1ZKMD0wWgYKKwYBBAGCNwIBDDFMMEqg

'' SIG '' JIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAAVwBpAG4AZABv

'' SIG '' AHcAc6EigCBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v

'' SIG '' d2luZG93czANBgkqhkiG9w0BAQEFAASCAQA3u15nKjPg

'' SIG '' hGqEZp0BsN4M6IJAEAVY20wIctBAKRrrCROO/Qvzg1YD

'' SIG '' 2wmgTIYxY9/Xci6WIOFXDROkBB7KbxpTHzPLcZTXRsT6

'' SIG '' 9CNGpHQh+BGKySG76Pc1jyxMtXME6qtbbgG5zbeUL9EP

'' SIG '' gQ8rNjUkBSp6Is4VCdCfUwWO80E3XAlhy5RJHT/aj7mv

'' SIG '' 2SECrJPXPkrqCdKtGxNoqH/mYwPd7zgH90ChudRlvnHc

'' SIG '' sjZX1MNo0zVGeT/Et22FqTbrn0ApcaV8efQ5ONUUfgNz

'' SIG '' sCUG5/Uo0CfPCOaCS/cg/zc1aLNNVQy+s7Y06FkxWkDf

'' SIG '' lo8AKd18I0Ew+LpOHIM2r9x2oYIS+zCCEvcGCisGAQQB

'' SIG '' gjcDAwExghLnMIIS4wYJKoZIhvcNAQcCoIIS1DCCEtAC

'' SIG '' AQMxDzANBglghkgBZQMEAgEFADCCAVkGCyqGSIb3DQEJ

'' SIG '' EAEEoIIBSASCAUQwggFAAgEBBgorBgEEAYRZCgMBMDEw

'' SIG '' DQYJYIZIAWUDBAIBBQAEIIneO245p/atapq2455PdWHL

'' SIG '' XaPcKL/AlGOgVIQn/CawAgZgivkVw3MYEzIwMjEwNTA4

'' SIG '' MDUxMzU0Ljg5NlowBIACAfSggdikgdUwgdIxCzAJBgNV

'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD

'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg

'' SIG '' Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJ

'' SIG '' cmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UE

'' SIG '' CxMdVGhhbGVzIFRTUyBFU046ODZERi00QkJDLTkzMzUx

'' SIG '' JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNl

'' SIG '' cnZpY2Wggg5KMIIE+TCCA+GgAwIBAgITMwAAAT7OyndS

'' SIG '' xfc0KwAAAAABPjANBgkqhkiG9w0BAQsFADB8MQswCQYD

'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G

'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0

'' SIG '' IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg

'' SIG '' VGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMDEwMTUxNzI4

'' SIG '' MjVaFw0yMjAxMTIxNzI4MjVaMIHSMQswCQYDVQQGEwJV

'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH

'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv

'' SIG '' cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFu

'' SIG '' ZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRo

'' SIG '' YWxlcyBUU1MgRVNOOjg2REYtNEJCQy05MzM1MSUwIwYD

'' SIG '' VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl

'' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA

'' SIG '' vFTEyDzZfpws404gSC0kt4VSyX/vaxwOfri89gQdxvfQ

'' SIG '' NvvQARebKR3plqHz0ZHZW+bmFxyGtTh9zw20LSdpMcWY

'' SIG '' DFc1rzPuJvTNAnDkKyQP+TqrW7j/lDlCLbqi8ubo4EqS

'' SIG '' pkHra0Zt15j2r/IJGZbu3QaRY6qYMZxxkkw4Y5ubAwV3

'' SIG '' E1p+TNzFg8nzgJ9kwEM4xvZAf9NhHhM2K/jx092xmKxy

'' SIG '' Ffp0X0tboY9d1OyhdCXl8spOigE32g8zH12Y2NXTfI41

'' SIG '' 41LQU+9dKOKQ7YFF1kwofuGGwxMU0CsDimODWgr6VFVc

'' SIG '' NDd2tQbGubgdfLBGEBfje0PyoOOXEO1m4QIDAQABo4IB

'' SIG '' GzCCARcwHQYDVR0OBBYEFJNa8534u9BiLWvwtbZUDraG

'' SIG '' iP17MB8GA1UdIwQYMBaAFNVjOlyKMZDzQ3t8RhvFM2ha

'' SIG '' hW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu

'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p

'' SIG '' Y1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNybDBaBggrBgEF

'' SIG '' BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu

'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGltU3Rh

'' SIG '' UENBXzIwMTAtMDctMDEuY3J0MAwGA1UdEwEB/wQCMAAw

'' SIG '' EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEL

'' SIG '' BQADggEBAKaz+RF9Wp+GkrkVj6cY5djCdVepJFyufABJ

'' SIG '' 1qKlCWXhOoYAcB7w7ZxzRC4Z2iY4bc9QU93sa2YDwhQw

'' SIG '' FPeqfKZfWSkmrcus49QB9EGPc9FwIgfBQK2AJthaYEys

'' SIG '' TawS40f6yc6w/ybotAclqFAr+BPDt0zGZoExvGc8ZpVA

'' SIG '' ZpvSyXbzGLuKtm8K+R73VC4DUp4sRFck1Cx8ILvYdYSN

'' SIG '' YqORyh0Gwi3v4HWmw6HutafFOdFjaKQEcSsn0SNLfY25

'' SIG '' qOqnu6DL+NAo7z3qD0eBDISilWob5dllDcONfsu99UEt

'' SIG '' Onrbdl292yGNIyxilpI8XGNgGcZxKN6VqLBxAuKlWOYw

'' SIG '' ggZxMIIEWaADAgECAgphCYEqAAAAAAACMA0GCSqGSIb3

'' SIG '' DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK

'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG

'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYD

'' SIG '' VQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBB

'' SIG '' dXRob3JpdHkgMjAxMDAeFw0xMDA3MDEyMTM2NTVaFw0y

'' SIG '' NTA3MDEyMTQ2NTVaMHwxCzAJBgNVBAYTAlVTMRMwEQYD

'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k

'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x

'' SIG '' JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD

'' SIG '' QSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB

'' SIG '' CgKCAQEAqR0NvHcRijog7PwTl/X6f2mUa3RUENWlCgCC

'' SIG '' hfvtfGhLLF/Fw+Vhwna3PmYrW/AVUycEMR9BGxqVHc4J

'' SIG '' E458YTBZsTBED/FgiIRUQwzXTbg4CLNC3ZOs1nMwVyaC

'' SIG '' o0UN0Or1R4HNvyRgMlhgRvJYR4YyhB50YWeRX4FUsc+T

'' SIG '' TJLBxKZd0WETbijGGvmGgLvfYfxGwScdJGcSchohiq9L

'' SIG '' ZIlQYrFd/XcfPfBXday9ikJNQFHRD5wGPmd/9WbAA5ZE

'' SIG '' fu/QS/1u5ZrKsajyeioKMfDaTgaRtogINeh4HLDpmc08

'' SIG '' 5y9Euqf03GS9pAHBIAmTeM38vMDJRF1eFpwBBU8iTQID

'' SIG '' AQABo4IB5jCCAeIwEAYJKwYBBAGCNxUBBAMCAQAwHQYD

'' SIG '' VR0OBBYEFNVjOlyKMZDzQ3t8RhvFM2hahW1VMBkGCSsG

'' SIG '' AQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIB

'' SIG '' hjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2

'' SIG '' VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJ

'' SIG '' oEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv

'' SIG '' Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2

'' SIG '' LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUH

'' SIG '' MAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kv

'' SIG '' Y2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0

'' SIG '' MIGgBgNVHSABAf8EgZUwgZIwgY8GCSsGAQQBgjcuAzCB

'' SIG '' gTA9BggrBgEFBQcCARYxaHR0cDovL3d3dy5taWNyb3Nv

'' SIG '' ZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBA

'' SIG '' BggrBgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8A

'' SIG '' bABpAGMAeQBfAFMAdABhAHQAZQBtAGUAbgB0AC4gHTAN

'' SIG '' BgkqhkiG9w0BAQsFAAOCAgEAB+aIUQ3ixuCYP4FxAz2d

'' SIG '' o6Ehb7Prpsz1Mb7PBeKp/vpXbRkws8LFZslq3/Xn8Hi9

'' SIG '' x6ieJeP5vO1rVFcIK1GCRBL7uVOMzPRgEop2zEBAQZvc

'' SIG '' XBf/XPleFzWYJFZLdO9CEMivv3/Gf/I3fVo/HPKZeUqR

'' SIG '' UgCvOA8X9S95gWXZqbVr5MfO9sp6AG9LMEQkIjzP7QOl

'' SIG '' lo9ZKby2/QThcJ8ySif9Va8v/rbljjO7Yl+a21dA6fHO

'' SIG '' mWaQjP9qYn/dxUoLkSbiOewZSnFjnXshbcOco6I8+n99

'' SIG '' lmqQeKZt0uGc+R38ONiU9MalCpaGpL2eGq4EQoO4tYCb

'' SIG '' IjggtSXlZOz39L9+Y1klD3ouOVd2onGqBooPiRa6YacR

'' SIG '' y5rYDkeagMXQzafQ732D8OE7cQnfXXSYIghh2rBQHm+9

'' SIG '' 8eEA3+cxB6STOvdlR3jo+KhIq/fecn5ha293qYHLpwms

'' SIG '' ObvsxsvYgrRyzR30uIUBHoD7G4kqVDmyW9rIDVWZeodz

'' SIG '' OwjmmC3qjeAzLhIp9cAvVCch98isTtoouLGp25ayp0Ki

'' SIG '' yc8ZQU3ghvkqmqMRZjDTu3QyS99je/WZii8bxyGvWbWu

'' SIG '' 3EQ8l1Bx16HSxVXjad5XwdHeMMD9zOZN+w2/XU/pnR4Z

'' SIG '' OC+8z1gFLu8NoFA12u8JJxzVs341Hgi62jbb01+P3nSI

'' SIG '' SRKhggLUMIICPQIBATCCAQChgdikgdUwgdIxCzAJBgNV

'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD

'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg

'' SIG '' Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJ

'' SIG '' cmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UE

'' SIG '' CxMdVGhhbGVzIFRTUyBFU046ODZERi00QkJDLTkzMzUx

'' SIG '' JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNl

'' SIG '' cnZpY2WiIwoBATAHBgUrDgMCGgMVAKBMFej0xjCTjCk1

'' SIG '' sTdTKa+TzJDUoIGDMIGApH4wfDELMAkGA1UEBhMCVVMx

'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl

'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh

'' SIG '' dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh

'' SIG '' bXAgUENBIDIwMTAwDQYJKoZIhvcNAQEFBQACBQDkQANL

'' SIG '' MCIYDzIwMjEwNTA4MDIxOTU1WhgPMjAyMTA1MDkwMjE5

'' SIG '' NTVaMHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAORAA0sC

'' SIG '' AQAwBwIBAAICBI4wBwIBAAICEdIwCgIFAORBVMsCAQAw

'' SIG '' NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAK

'' SIG '' MAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0B

'' SIG '' AQUFAAOBgQAsdof6NEyE7+dm1YWfZ1AZ40y/yzH07sdc

'' SIG '' VwSXm9A7ryx5RS566tLC5Tuuac60Ihbzrk+ELKfkbwb0

'' SIG '' L5O9Dxt4bZXcSd0UcI/IiKGb480KKh4OBC+Z3T8DAQHj

'' SIG '' S7vG6xkWrBIlQWtVwOCAVSHMvlGYuz1FR2T3WX+ztK9j

'' SIG '' 5wgRqzGCAw0wggMJAgEBMIGTMHwxCzAJBgNVBAYTAlVT

'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS

'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y

'' SIG '' YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0

'' SIG '' YW1wIFBDQSAyMDEwAhMzAAABPs7Kd1LF9zQrAAAAAAE+

'' SIG '' MA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMx

'' SIG '' DQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIDFd

'' SIG '' TyOl1jzIwpQ9pJBHUzvgD3yFrIv7G4QZQz70uvziMIH6

'' SIG '' BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgi+vOjaqN

'' SIG '' TvKOZGut49HXrqtwUj2ZCnVOurBwfgQxmxMwgZgwgYCk

'' SIG '' fjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu

'' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV

'' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N

'' SIG '' aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAA

'' SIG '' AT7OyndSxfc0KwAAAAABPjAiBCB2b8sSm9pla37bVhvT

'' SIG '' qMwV6M9QPHtZrFzC/Aat0yJ74TANBgkqhkiG9w0BAQsF

'' SIG '' AASCAQCBwB50FcmqncTnM13/e8+cbbQG3rWhkSMTPetv

'' SIG '' mK/MR94X/xJwZRkz8uh34XFLMFQoylvaZx7pdKGL8Z9O

'' SIG '' 8NqYxw/Zbd4Degq3WmrjdWLL4Hca9tjTdVCMSHBQsQ4T

'' SIG '' /vUEKcdw+8G134aWh5iwACFs2JKS/UeBGRoeFD029Q9y

'' SIG '' IM8OImMLarA1xZHIXageLkz3VrSKhFCoxXz/pbpG3Ajp

'' SIG '' v2L9D6dk/i5pt4LHAvfKSZe3uuqMaMnFnrbarWQ8cQgi

'' SIG '' sjVx151wUc5GcVbsJcSR+n9ZPulpiRex+wEwyToe/F8g

'' SIG '' 4rWboWD/xi5+RfOPF0uCQZihYxRCm5uUciqnsQb1

'' SIG '' End signature block