windows-nt/Source/XPSP1/NT/com/rpc/ndr20/ia64/stubless.s
2020-09-26 16:20:57 +08:00

1543 lines
47 KiB
ArmAsm

// Copyright (c) 1993-1999 Microsoft Corporation
.file "stubless.s"
#include "ksia64.h"
.global ObjectStublessClient
.type ObjectStublessClient, @function
//++
//
// Function: REGISTER_TYPE __stdcall Invoke(MANAGER_FUNCTION pFunction,
// REGISTER_TYPE *pArgumentList,
// ULONG FloatMask,
// ULONG cArguments);
//
// Synopsis: Given a function pointer and an argument list, Invoke builds
// a stack frame and calls the function.
//
// Arguments: pFunction - Pointer to the function to be called.
//
// pArgumentList - Pointer to the buffer containing the
// function parameters.
//
// FloatMask - A mask that indicates argument slots passed as float/double registers
// Each nibble indicates if the argument slot contains a float
// Float : D8 F8 D7 F7 D6 F6 D5 F5 D4 F4 D3 F3 D2 F2 D1 F1
// bit position: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
// 16 bits represents 8 slots
// If both the D and F bits are set then the argument slot contains
// *two* floating point args.
//
// cArguments - The size of the argument list in REGISTER_TYPEs.
//
//
// Notes: In the __stdcall calling convention, the callee must pop
// the parameters.
//
//--
NESTED_ENTRY(Invoke)
NESTED_SETUP(4,4,8,0)
NumParam = a3
FloatMask = a2
ParamStartAddr = a1
CallFuncAddr = a0
savedSP = loc2
savedLC = loc3
paramSz = t10
funcAddr = t11
paramAddr = t12
startP = t13
endP = t14
ARGPTR (a0)
ARGPTR (a1)
.vframe savedSP
mov savedSP = sp // save sp
mov savedLC = ar.lc // preserve loop count
shl paramSz = NumParam, 3 // num * szof(register)
;;
PROLOGUE_END
mov paramAddr = ParamStartAddr // param address
add startP = ParamStartAddr,paramSz // to copy bottom to top
;;
//
// Check if the parameter list is > 64 bytes. If so then jump to the default
// label. This will copy parameters > 64 bytes to the stack.
//
// If the paramter list is < 64 bytes then calculate the number of registers required
// and dispatch to the correct load label.
//
add startP = -8, startP // compute start address
// = pAddr + pSz - 8
cmp4.ge pt0, pt1 = 64, paramSz // if paramSz > 64 bytes
(pt1) br.cond.spnt default // yes
movl t0 = label0 // no. mem copy not needed
shl t1 = NumParam, 4;;
sub t0 = t0, t1;; // get correct bundle addr
mov bt0 = t0 // to jump to
br.cond.sptk bt0
default: // copy in-memory args
tbit.nz pt2, pt3 = NumParam, 0 // is NumParam even?
add endP = 64, paramAddr // last address
add t0 = -64, paramSz
;;
(pt2) add t0 = -8, t0
(pt3) add t0 = -16, t0
(pt2) mov t2 = savedSP
(pt3) add t2 = 8, savedSP
;;
sub sp = sp, t0 // allocate stack frame
//
// Load arguments > 64 bytes on to the stack
//
NextParam:
ld8 t3 = [startP], -8
;;
st8 [t2] = t3, -8
cmp.lt pt0, pt1 = startP, endP // while current >= end
(pt1) br.cond.sptk NextParam
;;
//
// Load the appropriate number of registers
//
label8:
ld8 out7 = [startP], -8
nop.i 0
nop.i 0;;
label7:
ld8 out6 = [startP], -8
nop.i 0
nop.i 0;;
label6:
ld8 out5 = [startP], -8
nop.i 0
nop.i 0;;
label5:
ld8 out4 = [startP], -8
nop.i 0
nop.i 0;;
label4:
ld8 out3 = [startP], -8
nop.i 0
nop.i 0;;
label3:
ld8 out2 = [startP], -8
nop.i 0
nop.i 0;;
label2:
ld8 out1 = [startP], -8
nop.i 0
nop.i 0;;
label1:
ld8 out0 = [startP]
nop.i 0
nop.i 0;;
label0:
//
// If there are any floating point registers load them here
//
cmp.eq pt1 = 0,FloatMask // Check for Zero FP Arguments
(pt1) br.cond.sptk NoFloat // If eql zero we are All done
//
// Loop through the floating mask looking for slots containing fp values
// Algorithm:
// The position of float arguments is unknown so iterate sequentially
// through the FloatMask. Each time a float is found rotate the registers
// using a counted loop.
//
// lc - Loop count. Initialize to the maximum number of arguments
// t15 - Contains the floatmask. Shifted each iteration of the loop
// t14 - bits<1:0> contain the current float descriptor
// t12 - Contains the current parameter (i.e., slot) address
// f32 - Rotated float register
// pt1 - True if FloatMask equals zero
// pt2 - True if current descriptor equals zero
// pr16 - True if current descriptor contains a float. Rotate (pr17,pr18,etc) each iteration of the loop
// pt3 - True if current descriptor contains float value
// pt4 - True if current descriptor contanis double value
//
//
mov t15 = FloatMask;; // Make a copy
popcnt t4 = t15;; // Count the number of floating point regs needed
mov t12 = paramAddr
mov ar.lc = t4;; // The maximum loop count
GetNextFloatDescriptor:
extr.u t14 = t15, 0, 2 // Extract the current descriptor (D or F)
shr t15 = t15,2;; // Shift to get next descriptor
cmp.eq pt1 = 0,t15 // See if the mask is zero ( 0 = all done)
cmp.eq pt2 = 0,t14 // If the current descriptor is zero get the next descriptor
cmp.eq pt3 = 1,t14 // Check for float
cmp.eq pt4 = 2,t14 // Check for double
cmp.ne pt5 = 3,t14;; // Check for dual floats
(pt3) ldfs f32 = [t12];; // Load float
(pt4) ldfd f32 = [t12];; // Load double
(pt5) br.cond.sptk SkipDualFloat
br.ctop.sptk DualFloatRegBump;; // Force an extra register rotate if dual floats
DualFloatRegBump:
ldfps f33,f32 = [t12];; // Load two floats
SkipDualFloat:
add t12 = 8,t12;; // Increment argument slot address
(pt1) br.cond.sptk MoveFloat // If the mask is zero exit loop
(pt2) br.cond.sptk GetNextFloatDescriptor // A zero descriptor pays a branch penality
// but it does not rotate the registers
br.ctop.sptk GetNextFloatDescriptor // Counted loop no penalty for branch rotate f32&pr16
;;
//
// At this point the fp values are in f32-f39. Predicate registers pr16-pr23
// are set for each float found. Copy the float values to f8-f15
//
MoveFloat:
cmp.eq pt1 = 1, t4;; // look at the number of floats and move accordingly.
(pt1) br.cond.sptk MoveOne
cmp.eq pt2 = 2, t4;;
(pt2) br.cond.sptk MoveTwo
cmp.eq pt3 = 3, t4;;
(pt3) br.cond.sptk MoveThree
cmp.eq pt4 = 4, t4;;
(pt4) br.cond.sptk MoveFour
cmp.eq pt5 = 5, t4;;
(pt5) br.cond.sptk MoveFive
cmp.eq pt6 = 6, t4;;
(pt6) br.cond.sptk MoveSix
cmp.eq pt7 = 7, t4;;
(pt7) br.cond.sptk MoveSeven
cmp.eq pt8 = 8, t4;;
(pt8) br.cond.sptk MoveEight
br.cond.sptk DoneMoveFloat;; // we should never get here, but just in case, exit.
MoveOne:
mov f8 = f32
br.cond.sptk DoneMoveFloat;;
MoveTwo:
mov f8 = f33
mov f9 = f32
br.cond.sptk DoneMoveFloat;;
MoveThree:
mov f8 = f34
mov f9 = f33
mov f10 = f32
br.cond.sptk DoneMoveFloat;;
MoveFour:
mov f8 = f35
mov f9 = f34
mov f10 = f33
mov f11 = f32
br.cond.sptk DoneMoveFloat;;
MoveFive:
mov f8 = f36
mov f9 = f35
mov f10 = f34
mov f11 = f33
mov f12 = f32
br.cond.sptk DoneMoveFloat;;
MoveSix:
mov f8 = f37
mov f9 = f36
mov f10 = f35
mov f11 = f34
mov f12 = f33
mov f13 = f32
br.cond.sptk DoneMoveFloat;;
MoveSeven:
mov f8 = f38
mov f9 = f37
mov f10 = f36
mov f11 = f35
mov f12 = f34
mov f13 = f33
mov f14 = f32
br.cond.sptk DoneMoveFloat;;
MoveEight:
mov f8 = f39
mov f9 = f38
mov f10 = f37
mov f11 = f36
mov f12 = f35
mov f13 = f34
mov f14 = f33
mov f15 = f32
DoneMoveFloat:
rum 1 << PSR_MFH
NoFloat:
add sp = -STACK_SCRATCH_AREA, sp // space for scratch area
ld8 funcAddr = [CallFuncAddr],PlGlobalPointer-PlEntryPoint
;;
ld8 gp = [CallFuncAddr]
mov bt1 = funcAddr // call the function
br.call.sptk brp = bt1
;;
mov ar.lc = savedLC // restore loop count register
.restore
mov sp = savedSP
NESTED_RETURN
NESTED_EXIT(Invoke)
//
// Define ObjectStublessClientBig routine macro.
// This macro can be used for any number of arguments
//
#define StublessClientProc(Method) \
\
.##global ObjectStublessClient##Method; \
NESTED_ENTRY(ObjectStublessClient##Method); \
NESTED_SETUP(8, 3, 2, 0); \
/* \
* Assume we have more than 8 arguments, starting from nineth \
* argument is located STACK_SCRATCH_AREA(sp'), \
* STACK_SCRATCH_AREA+8(sp') and so on ... sp' is sp at point of \
* call \
* \
* We have to push those 8 arguments into contiguous stack \
* starting at STACK_SCRATCH_AREA(sp). A local frame size of 64 \
* bytes is allocated for the 8 arguments, 8 bytes each. \
*/ \
.##fframe 64; \
add sp = -64, sp; \
;; \
\
.##save ar##.##unat, loc2; \
mov loc2 = ar##.##unat; \
add r2 = 64+STACK_SCRATCH_AREA-8, sp; \
add r3 = STACK_SCRATCH_AREA, sp; \
;; \
\
.##mem##.##offset 0,0; \
st8.spill [r2] = a7, -8; \
.##mem##.##offset 8,0; \
st8.spill [r3] = a0, 8; \
PROLOGUE_END \
;; \
\
.##mem##.##offset 0,0; \
st8.spill [r2] = a6, -8; \
.##mem##.##offset 8,0; \
st8.spill [r3] = a1, 8; \
;; \
\
.##mem##.##offset 0,0; \
st8.spill [r2] = a5, -8; \
.##mem##.##offset 8,0; \
st8.spill [r3] = a2, 8; \
;; \
\
.##mem##.##offset 0,0; \
st8.spill [r2] = a4; \
.##mem##.##offset 8,0; \
st8.spill [r3] = a3; \
;; \
\
mov ar##.##unat = loc2; \
add out0 = STACK_SCRATCH_AREA, sp; \
mov out1 = ##Method; \
\
br##.##call##.##sptk brp = ObjectStublessClient; \
;; \
\
.##restore; \
add sp = 64, sp; \
NESTED_RETURN; \
NESTED_EXIT(ObjectStublessClient##Method)
//++
//
// Function: void __stdcall SpillFPRegsForIA64(
// REGISTER_TYPE* pStack,
// ULONG FloatMask
// );
//
// Synopsis: Given a pointer to the virtual stack and floating-point mask,
// SpillFPRegsForIA64 copies the contents of the floating-point
// registers to the appropriate slots in pStack.
//
// Arguments: pStack - Pointer to the virtual stack in memory.
//
// FloatMask - A mask that indicates argument slots passed as float/double registers
// Each nibble indicates if the argument slot contains a float
// Float : D8 F8 D7 F7 D6 F6 D5 F5 D4 F4 D3 F3 D2 F2 D1 F1
// bit position: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
// 16 bits represents 8 slots
// If both the D and F bits are set then the argument slot contains
// *two* floating point args.
//
// Notes: In the __stdcall calling convention, the callee must pop
// the parameters.
//
//--
NESTED_ENTRY(SpillFPRegsForIA64)
NESTED_SETUP(4,4,8,0)
savedSP = loc2 // savedSP aliased to loc2
savedLC = loc3
pStack = a0 // pStack aliased to first param passed in
FloatMask = a1 // FloatMask aliased to second param passed in
mov savedSP = sp // save sp
mov savedLC = ar.lc // save lc
PROLOGUE_END
ARGPTR (a0) // sign-extend pStack for WIN32
//----------------------------------------------------------------
// start of main algorithm
//----------------------------------------------------------------
mov t0 = FloatMask;; // FloatMask copied to t0
mov t1 = pStack // pStack copied to t1
popcnt t4 = t0;; // count number of bits in FloatMask; i.e. how many
// active slots
cmp.eq pt0 = 8, t4 // look at the number of parameters and branch accordingly.
(pt0) br.cond.sptk ReverseFP8;;
cmp.eq pt0 = 7, t4 // the fp args are ordered by their arguement order; i.e.
(pt0) br.cond.sptk ReverseFP7;; // fp32 contains the first fp arg, fp32 contains the next
cmp.eq pt0 = 6, t4 // fp arg...etc.
(pt0) br.cond.sptk ReverseFP6;;
cmp.eq pt0 = 5, t4 // rotating registers rotate downward. because of this we
(pt0) br.cond.sptk ReverseFP5;; // reverse the order of the fp regs fp8 - fp15 to
cmp.eq pt0 = 4, t4 // fp47 - fp40. (see ReverseFP8 to ReverseFP1)
(pt0) br.cond.sptk ReverseFP4;;
cmp.eq pt0 = 3, t4
(pt0) br.cond.sptk ReverseFP3;;
cmp.eq pt0 = 2, t4
(pt0) br.cond.sptk ReverseFP2;;
cmp.eq pt0 = 1, t4
(pt0) br.cond.sptk ReverseFP1;;
ReverseFP8: // reverse fp reg order
mov f40 = f15
ReverseFP7:
mov f41 = f14
ReverseFP6:
mov f42 = f13
ReverseFP5:
mov f43 = f12
ReverseFP4:
mov f44 = f11
ReverseFP3:
mov f45 = f10
ReverseFP2:
mov f46 = f9
ReverseFP1:
mov f47 = f8
StartSpill:
mov ar.lc = t4 // the maximum loop count is total fp slots used
ProcessNextSlot:
extr.u t10 = t0, 0, 2 // extract the two FP slot nibbles into t10
shr.u t0 = t0, 2;; // shift FloatMask, since we've extracted the slot
cmp.eq pt0 = 0, t0 // check if FloatMask is zero; if so, we are done.
cmp.eq pt1 = 0, t10 // check if slot is 0; i.e. not a float or double
cmp.eq pt2 = 1, t10 // check first nibble of extracted slot is float
cmp.eq pt3 = 2, t10 // check second nibble of extracted slot is double
cmp.ne pt4 = 3, t10;; // check for dual floats
(pt2) stfs [t1] = f47;; // store float at pStack
(pt3) stfd [t1] = f47;; // store double at pStack
(pt4) br.cond.sptk SkipDualFloat2;;
stfs [t1] = f47, 4;; // store dual floats
stfs [t1] = f46, -4;;
br.ctop.sptk SkipDualFloat2;; // Force an extra register rotate if dual floats
SkipDualFloat2:
add t1 = 8, t1 // increment address to point to the next slot
(pt0) br.cond.sptk Done // FloatMask is zero, so we are done
(pt1) br.cond.sptk ProcessNextSlot // a zero slot pays a branch penality; but it does not
// rotate the fp & pr registers
br.ctop.sptk ProcessNextSlot;; // counted loop no penalty for branch rotate f32&pr16
;;
//----------------------------------------------------------------
// done, restore sp and exit
//----------------------------------------------------------------
Done:
mov ar.lc = savedLC // restore loop count register
.restore
mov sp = savedSP // restore sp
NESTED_RETURN
NESTED_EXIT(SpillFPRegsForIA64)
StublessClientProc( 3 )
StublessClientProc( 4 )
StublessClientProc( 5 )
StublessClientProc( 6 )
StublessClientProc( 7 )
StublessClientProc( 8 )
StublessClientProc( 9 )
StublessClientProc( 10 )
StublessClientProc( 11 )
StublessClientProc( 12 )
StublessClientProc( 13 )
StublessClientProc( 14 )
StublessClientProc( 15 )
StublessClientProc( 16 )
StublessClientProc( 17 )
StublessClientProc( 18 )
StublessClientProc( 19 )
StublessClientProc( 20 )
StublessClientProc( 21 )
StublessClientProc( 22 )
StublessClientProc( 23 )
StublessClientProc( 24 )
StublessClientProc( 25 )
StublessClientProc( 26 )
StublessClientProc( 27 )
StublessClientProc( 28 )
StublessClientProc( 29 )
StublessClientProc( 30 )
StublessClientProc( 31 )
StublessClientProc( 32 )
StublessClientProc( 33 )
StublessClientProc( 34 )
StublessClientProc( 35 )
StublessClientProc( 36 )
StublessClientProc( 37 )
StublessClientProc( 38 )
StublessClientProc( 39 )
StublessClientProc( 40 )
StublessClientProc( 41 )
StublessClientProc( 42 )
StublessClientProc( 43 )
StublessClientProc( 44 )
StublessClientProc( 45 )
StublessClientProc( 46 )
StublessClientProc( 47 )
StublessClientProc( 48 )
StublessClientProc( 49 )
StublessClientProc( 50 )
StublessClientProc( 51 )
StublessClientProc( 52 )
StublessClientProc( 53 )
StublessClientProc( 54 )
StublessClientProc( 55 )
StublessClientProc( 56 )
StublessClientProc( 57 )
StublessClientProc( 58 )
StublessClientProc( 59 )
StublessClientProc( 60 )
StublessClientProc( 61 )
StublessClientProc( 62 )
StublessClientProc( 63 )
StublessClientProc( 64 )
StublessClientProc( 65 )
StublessClientProc( 66 )
StublessClientProc( 67 )
StublessClientProc( 68 )
StublessClientProc( 69 )
StublessClientProc( 70 )
StublessClientProc( 71 )
StublessClientProc( 72 )
StublessClientProc( 73 )
StublessClientProc( 74 )
StublessClientProc( 75 )
StublessClientProc( 76 )
StublessClientProc( 77 )
StublessClientProc( 78 )
StublessClientProc( 79 )
StublessClientProc( 80 )
StublessClientProc( 81 )
StublessClientProc( 82 )
StublessClientProc( 83 )
StublessClientProc( 84 )
StublessClientProc( 85 )
StublessClientProc( 86 )
StublessClientProc( 87 )
StublessClientProc( 88 )
StublessClientProc( 89 )
StublessClientProc( 90 )
StublessClientProc( 91 )
StublessClientProc( 92 )
StublessClientProc( 93 )
StublessClientProc( 94 )
StublessClientProc( 95 )
StublessClientProc( 96 )
StublessClientProc( 97 )
StublessClientProc( 98 )
StublessClientProc( 99 )
StublessClientProc( 100 )
StublessClientProc( 101 )
StublessClientProc( 102 )
StublessClientProc( 103 )
StublessClientProc( 104 )
StublessClientProc( 105 )
StublessClientProc( 106 )
StublessClientProc( 107 )
StublessClientProc( 108 )
StublessClientProc( 109 )
StublessClientProc( 110 )
StublessClientProc( 111 )
StublessClientProc( 112 )
StublessClientProc( 113 )
StublessClientProc( 114 )
StublessClientProc( 115 )
StublessClientProc( 116 )
StublessClientProc( 117 )
StublessClientProc( 118 )
StublessClientProc( 119 )
StublessClientProc( 120 )
StublessClientProc( 121 )
StublessClientProc( 122 )
StublessClientProc( 123 )
StublessClientProc( 124 )
StublessClientProc( 125 )
StublessClientProc( 126 )
StublessClientProc( 127 )
StublessClientProc( 128 )
StublessClientProc( 129 )
StublessClientProc( 130 )
StublessClientProc( 131 )
StublessClientProc( 132 )
StublessClientProc( 133 )
StublessClientProc( 134 )
StublessClientProc( 135 )
StublessClientProc( 136 )
StublessClientProc( 137 )
StublessClientProc( 138 )
StublessClientProc( 139 )
StublessClientProc( 140 )
StublessClientProc( 141 )
StublessClientProc( 142 )
StublessClientProc( 143 )
StublessClientProc( 144 )
StublessClientProc( 145 )
StublessClientProc( 146 )
StublessClientProc( 147 )
StublessClientProc( 148 )
StublessClientProc( 149 )
StublessClientProc( 150 )
StublessClientProc( 151 )
StublessClientProc( 152 )
StublessClientProc( 153 )
StublessClientProc( 154 )
StublessClientProc( 155 )
StublessClientProc( 156 )
StublessClientProc( 157 )
StublessClientProc( 158 )
StublessClientProc( 159 )
StublessClientProc( 160 )
StublessClientProc( 161 )
StublessClientProc( 162 )
StublessClientProc( 163 )
StublessClientProc( 164 )
StublessClientProc( 165 )
StublessClientProc( 166 )
StublessClientProc( 167 )
StublessClientProc( 168 )
StublessClientProc( 169 )
StublessClientProc( 170 )
StublessClientProc( 171 )
StublessClientProc( 172 )
StublessClientProc( 173 )
StublessClientProc( 174 )
StublessClientProc( 175 )
StublessClientProc( 176 )
StublessClientProc( 177 )
StublessClientProc( 178 )
StublessClientProc( 179 )
StublessClientProc( 180 )
StublessClientProc( 181 )
StublessClientProc( 182 )
StublessClientProc( 183 )
StublessClientProc( 184 )
StublessClientProc( 185 )
StublessClientProc( 186 )
StublessClientProc( 187 )
StublessClientProc( 188 )
StublessClientProc( 189 )
StublessClientProc( 190 )
StublessClientProc( 191 )
StublessClientProc( 192 )
StublessClientProc( 193 )
StublessClientProc( 194 )
StublessClientProc( 195 )
StublessClientProc( 196 )
StublessClientProc( 197 )
StublessClientProc( 198 )
StublessClientProc( 199 )
StublessClientProc( 200 )
StublessClientProc( 201 )
StublessClientProc( 202 )
StublessClientProc( 203 )
StublessClientProc( 204 )
StublessClientProc( 205 )
StublessClientProc( 206 )
StublessClientProc( 207 )
StublessClientProc( 208 )
StublessClientProc( 209 )
StublessClientProc( 210 )
StublessClientProc( 211 )
StublessClientProc( 212 )
StublessClientProc( 213 )
StublessClientProc( 214 )
StublessClientProc( 215 )
StublessClientProc( 216 )
StublessClientProc( 217 )
StublessClientProc( 218 )
StublessClientProc( 219 )
StublessClientProc( 220 )
StublessClientProc( 221 )
StublessClientProc( 222 )
StublessClientProc( 223 )
StublessClientProc( 224 )
StublessClientProc( 225 )
StublessClientProc( 226 )
StublessClientProc( 227 )
StublessClientProc( 228 )
StublessClientProc( 229 )
StublessClientProc( 230 )
StublessClientProc( 231 )
StublessClientProc( 232 )
StublessClientProc( 233 )
StublessClientProc( 234 )
StublessClientProc( 235 )
StublessClientProc( 236 )
StublessClientProc( 237 )
StublessClientProc( 238 )
StublessClientProc( 239 )
StublessClientProc( 240 )
StublessClientProc( 241 )
StublessClientProc( 242 )
StublessClientProc( 243 )
StublessClientProc( 244 )
StublessClientProc( 245 )
StublessClientProc( 246 )
StublessClientProc( 247 )
StublessClientProc( 248 )
StublessClientProc( 249 )
StublessClientProc( 250 )
StublessClientProc( 251 )
StublessClientProc( 252 )
StublessClientProc( 253 )
StublessClientProc( 254 )
StublessClientProc( 255 )
StublessClientProc( 256 )
StublessClientProc( 257 )
StublessClientProc( 258 )
StublessClientProc( 259 )
StublessClientProc( 260 )
StublessClientProc( 261 )
StublessClientProc( 262 )
StublessClientProc( 263 )
StublessClientProc( 264 )
StublessClientProc( 265 )
StublessClientProc( 266 )
StublessClientProc( 267 )
StublessClientProc( 268 )
StublessClientProc( 269 )
StublessClientProc( 270 )
StublessClientProc( 271 )
StublessClientProc( 272 )
StublessClientProc( 273 )
StublessClientProc( 274 )
StublessClientProc( 275 )
StublessClientProc( 276 )
StublessClientProc( 277 )
StublessClientProc( 278 )
StublessClientProc( 279 )
StublessClientProc( 280 )
StublessClientProc( 281 )
StublessClientProc( 282 )
StublessClientProc( 283 )
StublessClientProc( 284 )
StublessClientProc( 285 )
StublessClientProc( 286 )
StublessClientProc( 287 )
StublessClientProc( 288 )
StublessClientProc( 289 )
StublessClientProc( 290 )
StublessClientProc( 291 )
StublessClientProc( 292 )
StublessClientProc( 293 )
StublessClientProc( 294 )
StublessClientProc( 295 )
StublessClientProc( 296 )
StublessClientProc( 297 )
StublessClientProc( 298 )
StublessClientProc( 299 )
StublessClientProc( 300 )
StublessClientProc( 301 )
StublessClientProc( 302 )
StublessClientProc( 303 )
StublessClientProc( 304 )
StublessClientProc( 305 )
StublessClientProc( 306 )
StublessClientProc( 307 )
StublessClientProc( 308 )
StublessClientProc( 309 )
StublessClientProc( 310 )
StublessClientProc( 311 )
StublessClientProc( 312 )
StublessClientProc( 313 )
StublessClientProc( 314 )
StublessClientProc( 315 )
StublessClientProc( 316 )
StublessClientProc( 317 )
StublessClientProc( 318 )
StublessClientProc( 319 )
StublessClientProc( 320 )
StublessClientProc( 321 )
StublessClientProc( 322 )
StublessClientProc( 323 )
StublessClientProc( 324 )
StublessClientProc( 325 )
StublessClientProc( 326 )
StublessClientProc( 327 )
StublessClientProc( 328 )
StublessClientProc( 329 )
StublessClientProc( 330 )
StublessClientProc( 331 )
StublessClientProc( 332 )
StublessClientProc( 333 )
StublessClientProc( 334 )
StublessClientProc( 335 )
StublessClientProc( 336 )
StublessClientProc( 337 )
StublessClientProc( 338 )
StublessClientProc( 339 )
StublessClientProc( 340 )
StublessClientProc( 341 )
StublessClientProc( 342 )
StublessClientProc( 343 )
StublessClientProc( 344 )
StublessClientProc( 345 )
StublessClientProc( 346 )
StublessClientProc( 347 )
StublessClientProc( 348 )
StublessClientProc( 349 )
StublessClientProc( 350 )
StublessClientProc( 351 )
StublessClientProc( 352 )
StublessClientProc( 353 )
StublessClientProc( 354 )
StublessClientProc( 355 )
StublessClientProc( 356 )
StublessClientProc( 357 )
StublessClientProc( 358 )
StublessClientProc( 359 )
StublessClientProc( 360 )
StublessClientProc( 361 )
StublessClientProc( 362 )
StublessClientProc( 363 )
StublessClientProc( 364 )
StublessClientProc( 365 )
StublessClientProc( 366 )
StublessClientProc( 367 )
StublessClientProc( 368 )
StublessClientProc( 369 )
StublessClientProc( 370 )
StublessClientProc( 371 )
StublessClientProc( 372 )
StublessClientProc( 373 )
StublessClientProc( 374 )
StublessClientProc( 375 )
StublessClientProc( 376 )
StublessClientProc( 377 )
StublessClientProc( 378 )
StublessClientProc( 379 )
StublessClientProc( 380 )
StublessClientProc( 381 )
StublessClientProc( 382 )
StublessClientProc( 383 )
StublessClientProc( 384 )
StublessClientProc( 385 )
StublessClientProc( 386 )
StublessClientProc( 387 )
StublessClientProc( 388 )
StublessClientProc( 389 )
StublessClientProc( 390 )
StublessClientProc( 391 )
StublessClientProc( 392 )
StublessClientProc( 393 )
StublessClientProc( 394 )
StublessClientProc( 395 )
StublessClientProc( 396 )
StublessClientProc( 397 )
StublessClientProc( 398 )
StublessClientProc( 399 )
StublessClientProc( 400 )
StublessClientProc( 401 )
StublessClientProc( 402 )
StublessClientProc( 403 )
StublessClientProc( 404 )
StublessClientProc( 405 )
StublessClientProc( 406 )
StublessClientProc( 407 )
StublessClientProc( 408 )
StublessClientProc( 409 )
StublessClientProc( 410 )
StublessClientProc( 411 )
StublessClientProc( 412 )
StublessClientProc( 413 )
StublessClientProc( 414 )
StublessClientProc( 415 )
StublessClientProc( 416 )
StublessClientProc( 417 )
StublessClientProc( 418 )
StublessClientProc( 419 )
StublessClientProc( 420 )
StublessClientProc( 421 )
StublessClientProc( 422 )
StublessClientProc( 423 )
StublessClientProc( 424 )
StublessClientProc( 425 )
StublessClientProc( 426 )
StublessClientProc( 427 )
StublessClientProc( 428 )
StublessClientProc( 429 )
StublessClientProc( 430 )
StublessClientProc( 431 )
StublessClientProc( 432 )
StublessClientProc( 433 )
StublessClientProc( 434 )
StublessClientProc( 435 )
StublessClientProc( 436 )
StublessClientProc( 437 )
StublessClientProc( 438 )
StublessClientProc( 439 )
StublessClientProc( 440 )
StublessClientProc( 441 )
StublessClientProc( 442 )
StublessClientProc( 443 )
StublessClientProc( 444 )
StublessClientProc( 445 )
StublessClientProc( 446 )
StublessClientProc( 447 )
StublessClientProc( 448 )
StublessClientProc( 449 )
StublessClientProc( 450 )
StublessClientProc( 451 )
StublessClientProc( 452 )
StublessClientProc( 453 )
StublessClientProc( 454 )
StublessClientProc( 455 )
StublessClientProc( 456 )
StublessClientProc( 457 )
StublessClientProc( 458 )
StublessClientProc( 459 )
StublessClientProc( 460 )
StublessClientProc( 461 )
StublessClientProc( 462 )
StublessClientProc( 463 )
StublessClientProc( 464 )
StublessClientProc( 465 )
StublessClientProc( 466 )
StublessClientProc( 467 )
StublessClientProc( 468 )
StublessClientProc( 469 )
StublessClientProc( 470 )
StublessClientProc( 471 )
StublessClientProc( 472 )
StublessClientProc( 473 )
StublessClientProc( 474 )
StublessClientProc( 475 )
StublessClientProc( 476 )
StublessClientProc( 477 )
StublessClientProc( 478 )
StublessClientProc( 479 )
StublessClientProc( 480 )
StublessClientProc( 481 )
StublessClientProc( 482 )
StublessClientProc( 483 )
StublessClientProc( 484 )
StublessClientProc( 485 )
StublessClientProc( 486 )
StublessClientProc( 487 )
StublessClientProc( 488 )
StublessClientProc( 489 )
StublessClientProc( 490 )
StublessClientProc( 491 )
StublessClientProc( 492 )
StublessClientProc( 493 )
StublessClientProc( 494 )
StublessClientProc( 495 )
StublessClientProc( 496 )
StublessClientProc( 497 )
StublessClientProc( 498 )
StublessClientProc( 499 )
StublessClientProc( 500 )
StublessClientProc( 501 )
StublessClientProc( 502 )
StublessClientProc( 503 )
StublessClientProc( 504 )
StublessClientProc( 505 )
StublessClientProc( 506 )
StublessClientProc( 507 )
StublessClientProc( 508 )
StublessClientProc( 509 )
StublessClientProc( 510 )
StublessClientProc( 511 )
StublessClientProc( 512 )
StublessClientProc( 513 )
StublessClientProc( 514 )
StublessClientProc( 515 )
StublessClientProc( 516 )
StublessClientProc( 517 )
StublessClientProc( 518 )
StublessClientProc( 519 )
StublessClientProc( 520 )
StublessClientProc( 521 )
StublessClientProc( 522 )
StublessClientProc( 523 )
StublessClientProc( 524 )
StublessClientProc( 525 )
StublessClientProc( 526 )
StublessClientProc( 527 )
StublessClientProc( 528 )
StublessClientProc( 529 )
StublessClientProc( 530 )
StublessClientProc( 531 )
StublessClientProc( 532 )
StublessClientProc( 533 )
StublessClientProc( 534 )
StublessClientProc( 535 )
StublessClientProc( 536 )
StublessClientProc( 537 )
StublessClientProc( 538 )
StublessClientProc( 539 )
StublessClientProc( 540 )
StublessClientProc( 541 )
StublessClientProc( 542 )
StublessClientProc( 543 )
StublessClientProc( 544 )
StublessClientProc( 545 )
StublessClientProc( 546 )
StublessClientProc( 547 )
StublessClientProc( 548 )
StublessClientProc( 549 )
StublessClientProc( 550 )
StublessClientProc( 551 )
StublessClientProc( 552 )
StublessClientProc( 553 )
StublessClientProc( 554 )
StublessClientProc( 555 )
StublessClientProc( 556 )
StublessClientProc( 557 )
StublessClientProc( 558 )
StublessClientProc( 559 )
StublessClientProc( 560 )
StublessClientProc( 561 )
StublessClientProc( 562 )
StublessClientProc( 563 )
StublessClientProc( 564 )
StublessClientProc( 565 )
StublessClientProc( 566 )
StublessClientProc( 567 )
StublessClientProc( 568 )
StublessClientProc( 569 )
StublessClientProc( 570 )
StublessClientProc( 571 )
StublessClientProc( 572 )
StublessClientProc( 573 )
StublessClientProc( 574 )
StublessClientProc( 575 )
StublessClientProc( 576 )
StublessClientProc( 577 )
StublessClientProc( 578 )
StublessClientProc( 579 )
StublessClientProc( 580 )
StublessClientProc( 581 )
StublessClientProc( 582 )
StublessClientProc( 583 )
StublessClientProc( 584 )
StublessClientProc( 585 )
StublessClientProc( 586 )
StublessClientProc( 587 )
StublessClientProc( 588 )
StublessClientProc( 589 )
StublessClientProc( 590 )
StublessClientProc( 591 )
StublessClientProc( 592 )
StublessClientProc( 593 )
StublessClientProc( 594 )
StublessClientProc( 595 )
StublessClientProc( 596 )
StublessClientProc( 597 )
StublessClientProc( 598 )
StublessClientProc( 599 )
StublessClientProc( 600 )
StublessClientProc( 601 )
StublessClientProc( 602 )
StublessClientProc( 603 )
StublessClientProc( 604 )
StublessClientProc( 605 )
StublessClientProc( 606 )
StublessClientProc( 607 )
StublessClientProc( 608 )
StublessClientProc( 609 )
StublessClientProc( 610 )
StublessClientProc( 611 )
StublessClientProc( 612 )
StublessClientProc( 613 )
StublessClientProc( 614 )
StublessClientProc( 615 )
StublessClientProc( 616 )
StublessClientProc( 617 )
StublessClientProc( 618 )
StublessClientProc( 619 )
StublessClientProc( 620 )
StublessClientProc( 621 )
StublessClientProc( 622 )
StublessClientProc( 623 )
StublessClientProc( 624 )
StublessClientProc( 625 )
StublessClientProc( 626 )
StublessClientProc( 627 )
StublessClientProc( 628 )
StublessClientProc( 629 )
StublessClientProc( 630 )
StublessClientProc( 631 )
StublessClientProc( 632 )
StublessClientProc( 633 )
StublessClientProc( 634 )
StublessClientProc( 635 )
StublessClientProc( 636 )
StublessClientProc( 637 )
StublessClientProc( 638 )
StublessClientProc( 639 )
StublessClientProc( 640 )
StublessClientProc( 641 )
StublessClientProc( 642 )
StublessClientProc( 643 )
StublessClientProc( 644 )
StublessClientProc( 645 )
StublessClientProc( 646 )
StublessClientProc( 647 )
StublessClientProc( 648 )
StublessClientProc( 649 )
StublessClientProc( 650 )
StublessClientProc( 651 )
StublessClientProc( 652 )
StublessClientProc( 653 )
StublessClientProc( 654 )
StublessClientProc( 655 )
StublessClientProc( 656 )
StublessClientProc( 657 )
StublessClientProc( 658 )
StublessClientProc( 659 )
StublessClientProc( 660 )
StublessClientProc( 661 )
StublessClientProc( 662 )
StublessClientProc( 663 )
StublessClientProc( 664 )
StublessClientProc( 665 )
StublessClientProc( 666 )
StublessClientProc( 667 )
StublessClientProc( 668 )
StublessClientProc( 669 )
StublessClientProc( 670 )
StublessClientProc( 671 )
StublessClientProc( 672 )
StublessClientProc( 673 )
StublessClientProc( 674 )
StublessClientProc( 675 )
StublessClientProc( 676 )
StublessClientProc( 677 )
StublessClientProc( 678 )
StublessClientProc( 679 )
StublessClientProc( 680 )
StublessClientProc( 681 )
StublessClientProc( 682 )
StublessClientProc( 683 )
StublessClientProc( 684 )
StublessClientProc( 685 )
StublessClientProc( 686 )
StublessClientProc( 687 )
StublessClientProc( 688 )
StublessClientProc( 689 )
StublessClientProc( 690 )
StublessClientProc( 691 )
StublessClientProc( 692 )
StublessClientProc( 693 )
StublessClientProc( 694 )
StublessClientProc( 695 )
StublessClientProc( 696 )
StublessClientProc( 697 )
StublessClientProc( 698 )
StublessClientProc( 699 )
StublessClientProc( 700 )
StublessClientProc( 701 )
StublessClientProc( 702 )
StublessClientProc( 703 )
StublessClientProc( 704 )
StublessClientProc( 705 )
StublessClientProc( 706 )
StublessClientProc( 707 )
StublessClientProc( 708 )
StublessClientProc( 709 )
StublessClientProc( 710 )
StublessClientProc( 711 )
StublessClientProc( 712 )
StublessClientProc( 713 )
StublessClientProc( 714 )
StublessClientProc( 715 )
StublessClientProc( 716 )
StublessClientProc( 717 )
StublessClientProc( 718 )
StublessClientProc( 719 )
StublessClientProc( 720 )
StublessClientProc( 721 )
StublessClientProc( 722 )
StublessClientProc( 723 )
StublessClientProc( 724 )
StublessClientProc( 725 )
StublessClientProc( 726 )
StublessClientProc( 727 )
StublessClientProc( 728 )
StublessClientProc( 729 )
StublessClientProc( 730 )
StublessClientProc( 731 )
StublessClientProc( 732 )
StublessClientProc( 733 )
StublessClientProc( 734 )
StublessClientProc( 735 )
StublessClientProc( 736 )
StublessClientProc( 737 )
StublessClientProc( 738 )
StublessClientProc( 739 )
StublessClientProc( 740 )
StublessClientProc( 741 )
StublessClientProc( 742 )
StublessClientProc( 743 )
StublessClientProc( 744 )
StublessClientProc( 745 )
StublessClientProc( 746 )
StublessClientProc( 747 )
StublessClientProc( 748 )
StublessClientProc( 749 )
StublessClientProc( 750 )
StublessClientProc( 751 )
StublessClientProc( 752 )
StublessClientProc( 753 )
StublessClientProc( 754 )
StublessClientProc( 755 )
StublessClientProc( 756 )
StublessClientProc( 757 )
StublessClientProc( 758 )
StublessClientProc( 759 )
StublessClientProc( 760 )
StublessClientProc( 761 )
StublessClientProc( 762 )
StublessClientProc( 763 )
StublessClientProc( 764 )
StublessClientProc( 765 )
StublessClientProc( 766 )
StublessClientProc( 767 )
StublessClientProc( 768 )
StublessClientProc( 769 )
StublessClientProc( 770 )
StublessClientProc( 771 )
StublessClientProc( 772 )
StublessClientProc( 773 )
StublessClientProc( 774 )
StublessClientProc( 775 )
StublessClientProc( 776 )
StublessClientProc( 777 )
StublessClientProc( 778 )
StublessClientProc( 779 )
StublessClientProc( 780 )
StublessClientProc( 781 )
StublessClientProc( 782 )
StublessClientProc( 783 )
StublessClientProc( 784 )
StublessClientProc( 785 )
StublessClientProc( 786 )
StublessClientProc( 787 )
StublessClientProc( 788 )
StublessClientProc( 789 )
StublessClientProc( 790 )
StublessClientProc( 791 )
StublessClientProc( 792 )
StublessClientProc( 793 )
StublessClientProc( 794 )
StublessClientProc( 795 )
StublessClientProc( 796 )
StublessClientProc( 797 )
StublessClientProc( 798 )
StublessClientProc( 799 )
StublessClientProc( 800 )
StublessClientProc( 801 )
StublessClientProc( 802 )
StublessClientProc( 803 )
StublessClientProc( 804 )
StublessClientProc( 805 )
StublessClientProc( 806 )
StublessClientProc( 807 )
StublessClientProc( 808 )
StublessClientProc( 809 )
StublessClientProc( 810 )
StublessClientProc( 811 )
StublessClientProc( 812 )
StublessClientProc( 813 )
StublessClientProc( 814 )
StublessClientProc( 815 )
StublessClientProc( 816 )
StublessClientProc( 817 )
StublessClientProc( 818 )
StublessClientProc( 819 )
StublessClientProc( 820 )
StublessClientProc( 821 )
StublessClientProc( 822 )
StublessClientProc( 823 )
StublessClientProc( 824 )
StublessClientProc( 825 )
StublessClientProc( 826 )
StublessClientProc( 827 )
StublessClientProc( 828 )
StublessClientProc( 829 )
StublessClientProc( 830 )
StublessClientProc( 831 )
StublessClientProc( 832 )
StublessClientProc( 833 )
StublessClientProc( 834 )
StublessClientProc( 835 )
StublessClientProc( 836 )
StublessClientProc( 837 )
StublessClientProc( 838 )
StublessClientProc( 839 )
StublessClientProc( 840 )
StublessClientProc( 841 )
StublessClientProc( 842 )
StublessClientProc( 843 )
StublessClientProc( 844 )
StublessClientProc( 845 )
StublessClientProc( 846 )
StublessClientProc( 847 )
StublessClientProc( 848 )
StublessClientProc( 849 )
StublessClientProc( 850 )
StublessClientProc( 851 )
StublessClientProc( 852 )
StublessClientProc( 853 )
StublessClientProc( 854 )
StublessClientProc( 855 )
StublessClientProc( 856 )
StublessClientProc( 857 )
StublessClientProc( 858 )
StublessClientProc( 859 )
StublessClientProc( 860 )
StublessClientProc( 861 )
StublessClientProc( 862 )
StublessClientProc( 863 )
StublessClientProc( 864 )
StublessClientProc( 865 )
StublessClientProc( 866 )
StublessClientProc( 867 )
StublessClientProc( 868 )
StublessClientProc( 869 )
StublessClientProc( 870 )
StublessClientProc( 871 )
StublessClientProc( 872 )
StublessClientProc( 873 )
StublessClientProc( 874 )
StublessClientProc( 875 )
StublessClientProc( 876 )
StublessClientProc( 877 )
StublessClientProc( 878 )
StublessClientProc( 879 )
StublessClientProc( 880 )
StublessClientProc( 881 )
StublessClientProc( 882 )
StublessClientProc( 883 )
StublessClientProc( 884 )
StublessClientProc( 885 )
StublessClientProc( 886 )
StublessClientProc( 887 )
StublessClientProc( 888 )
StublessClientProc( 889 )
StublessClientProc( 890 )
StublessClientProc( 891 )
StublessClientProc( 892 )
StublessClientProc( 893 )
StublessClientProc( 894 )
StublessClientProc( 895 )
StublessClientProc( 896 )
StublessClientProc( 897 )
StublessClientProc( 898 )
StublessClientProc( 899 )
StublessClientProc( 900 )
StublessClientProc( 901 )
StublessClientProc( 902 )
StublessClientProc( 903 )
StublessClientProc( 904 )
StublessClientProc( 905 )
StublessClientProc( 906 )
StublessClientProc( 907 )
StublessClientProc( 908 )
StublessClientProc( 909 )
StublessClientProc( 910 )
StublessClientProc( 911 )
StublessClientProc( 912 )
StublessClientProc( 913 )
StublessClientProc( 914 )
StublessClientProc( 915 )
StublessClientProc( 916 )
StublessClientProc( 917 )
StublessClientProc( 918 )
StublessClientProc( 919 )
StublessClientProc( 920 )
StublessClientProc( 921 )
StublessClientProc( 922 )
StublessClientProc( 923 )
StublessClientProc( 924 )
StublessClientProc( 925 )
StublessClientProc( 926 )
StublessClientProc( 927 )
StublessClientProc( 928 )
StublessClientProc( 929 )
StublessClientProc( 930 )
StublessClientProc( 931 )
StublessClientProc( 932 )
StublessClientProc( 933 )
StublessClientProc( 934 )
StublessClientProc( 935 )
StublessClientProc( 936 )
StublessClientProc( 937 )
StublessClientProc( 938 )
StublessClientProc( 939 )
StublessClientProc( 940 )
StublessClientProc( 941 )
StublessClientProc( 942 )
StublessClientProc( 943 )
StublessClientProc( 944 )
StublessClientProc( 945 )
StublessClientProc( 946 )
StublessClientProc( 947 )
StublessClientProc( 948 )
StublessClientProc( 949 )
StublessClientProc( 950 )
StublessClientProc( 951 )
StublessClientProc( 952 )
StublessClientProc( 953 )
StublessClientProc( 954 )
StublessClientProc( 955 )
StublessClientProc( 956 )
StublessClientProc( 957 )
StublessClientProc( 958 )
StublessClientProc( 959 )
StublessClientProc( 960 )
StublessClientProc( 961 )
StublessClientProc( 962 )
StublessClientProc( 963 )
StublessClientProc( 964 )
StublessClientProc( 965 )
StublessClientProc( 966 )
StublessClientProc( 967 )
StublessClientProc( 968 )
StublessClientProc( 969 )
StublessClientProc( 970 )
StublessClientProc( 971 )
StublessClientProc( 972 )
StublessClientProc( 973 )
StublessClientProc( 974 )
StublessClientProc( 975 )
StublessClientProc( 976 )
StublessClientProc( 977 )
StublessClientProc( 978 )
StublessClientProc( 979 )
StublessClientProc( 980 )
StublessClientProc( 981 )
StublessClientProc( 982 )
StublessClientProc( 983 )
StublessClientProc( 984 )
StublessClientProc( 985 )
StublessClientProc( 986 )
StublessClientProc( 987 )
StublessClientProc( 988 )
StublessClientProc( 989 )
StublessClientProc( 990 )
StublessClientProc( 991 )
StublessClientProc( 992 )
StublessClientProc( 993 )
StublessClientProc( 994 )
StublessClientProc( 995 )
StublessClientProc( 996 )
StublessClientProc( 997 )
StublessClientProc( 998 )
StublessClientProc( 999 )
StublessClientProc( 1000 )
StublessClientProc( 1001 )
StublessClientProc( 1002 )
StublessClientProc( 1003 )
StublessClientProc( 1004 )
StublessClientProc( 1005 )
StublessClientProc( 1006 )
StublessClientProc( 1007 )
StublessClientProc( 1008 )
StublessClientProc( 1009 )
StublessClientProc( 1010 )
StublessClientProc( 1011 )
StublessClientProc( 1012 )
StublessClientProc( 1013 )
StublessClientProc( 1014 )
StublessClientProc( 1015 )
StublessClientProc( 1016 )
StublessClientProc( 1017 )
StublessClientProc( 1018 )
StublessClientProc( 1019 )
StublessClientProc( 1020 )
StublessClientProc( 1021 )
StublessClientProc( 1022 )
StublessClientProc( 1023 )