Hacked By AnonymousFox

Current Path : C:/Windows/SysWOW64/
Upload File :
Current File : C:/Windows/SysWOW64/azroles.dll

MZ@	!L!This program cannot be run in DOS mode.

$D[%5\%5\%5\C6]%5\C1]%5\%4\$5\C4]%5\C0]%5\C5]%5\C<]%5\C\%5\C7]%5\Rich%5\PEL)!
z%


@F@A[ T21L .textyz `.data)$~@.idata@@.didat@.rsrc@@.reloc[\@B*@*xȲ@  P@ AA0B`ж0@0``0`г Pи@P0ppP0p@@ `&')`(p) p`@p@дP Pзp@@0`p`P0 0p Pве `0P0к0`  P    !@!p!!!0"p"0##p$$p% &)`*+`++,@,,,-P--.0/%//"#0$$0%%P..p/+ P@pPp@pPP0@0``0`г Pи@P0ppP0p@@ `&')`(p)pp`@p@дP Pзp@@0`p`P0 0p Pве `0P0@`к0`  P    !@!p!!!0"p"0##p$$p% &)`*+`++,@,,,-P--.0/%//"#0$$0%%P..p/+`0P@ AA0B0@0-0-0-PP0`p  p`@`@"#`@%&`@()`@+,`@./`@12`@ 5`5P60:60-0-0-0-0-0-0- 50-0-0-0-0-0-0- `20-0-0-0-0-0-0- `/0-0-0-0-0-0-0- `,0-0-0-0-0-0-0- `#0-0-0-0-0-0-0- `0-0-0-0-0-0-0- `):0:`:@;-p;90:>0P0
P@P	p
0
`@	 bpcPdp`  pp0@`0
 `
a[[P[[\@\p\\\]0]`]]]]P^^^0_p___ `````@0pp
p` ``@
`	pP0
` 

`@p`@P 
@@0PP 
@0Pp 
 
 @PEPF0GHH@I@JPKpLMMN@44P``p	``
	PP
P@0			0PpP0
0 	p	0POP0 `2220222 3P333345@5p555 667 88 9990:p::;@;;;<P<<< =`===0>p>>>BBC@CDE`A6@77`88`90DD`O`@
Pppp0p
```P`@pPpP0 P} ~P~~~p0 ЂP00 ` pp0P@pP@
@`0@0@VSSPSST@TTTpTU@UUPpp0P 0	0	 @P
p0  	 @p
	`
@uuvwyyz`{ @pP@ijpii0j`jjjok@kk@lmmnn@ooopPpqqrr0spsssttkl@mm@nn@PP
Pp		
`
 0@
`pp0@pЋ ``0` p`@@@
 
0
pP
 0 P P0 
0 Pp `0Р  Pд0`еp`0 5@0`p` `2` `/` `,@` `#`pP@ `P`P0  `) ` `&`p``Pp0-0-0-0-0-0-0- `&PPp`Pp`Qr!pf`Pq etp P@d@OpcPt@NPm@ aspP`к`@`p @@0У0`0  P00 p0  Е0 @p0 `  0  `0 0p  0pp`   pм0  0@  0`p`   p  0`   p  0`0 0p`}0 @`н{pxx@q  00-0-`   p  0@P`   poppPp0-00P`
0P`
0P
0P
0PP0
0P
0P
0P
0P0-00PXWWWhWxWWWWWXXXXXXYY0YTY|YYYYZZ@ZZZ Z,ZXZlZZZZZZZZNWWWW(8WHWXhxWHWWWWWWWW(W8WЧt@l0<8h0$TT\TT2MupMOO20pP@p#pP@ @0P  0` P@0P@`p0`@P`pв 0@P`pг 0@P`pд 0@P`pе 0@P`pж 0@P`pз 0@P`pи 0@P`p0`pкp@PP`0`p pP0`  P    !@!p!!!0"p""0###0$p$$$0%p%%% &&'`()p))`*+`+++,@,,,-P--P...0/p///0P0202`2222 3P33334@445@5p555 666@777 8`888 9`9990:p::;@;;;<P<<< =`===0>p>>>@`ABBCC0DDDEPEPF0GHH@I@JPKpLMMN`OOPPSSSST@TpTTTU@UU@VP[[[[\@\p\\\]0]`]]]]P^^^0_p___ `````abpcPdpiiij0j`jjjk@kkk@llm@mmmn@nnno@ooopPpqqrr0spsssttuuvwyyz`{} ~P~~~p0 P@pЂP0p0p ` @pЋ`  ``@0pp`Р  0  Pд0`е`0P p``@0p @Pp P@p0`0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p		 	0	@	P	`	p									

 
0
@
P
`
p








 0@P`p 0@P`p

 
0
@
P
`
p








 0@P`p 0@P`p 0@P`p 0P@Pp0`p 0P@Pp0`p 0P@Pp0`p 0P@` "#`#%&`&()`)+,`,./`/12`2 5`55P6666999:0:@:`:0;@;p;;>>@ AA0B@N@OP`QUZ`ZZZ [P\Pmpqrptt@upvvPPp`@0p`PPp`P @
`p=AGpJac@defPpp0qpqqsPttuuvPvp`p@п p  PPp@ @   ! $P$$$'P;;< =>???@0@@A0A`AABC`CpCCF0GPNNNNNPQRP[p[[`__op@qpxx{`}@`0p` @ЕpP00` У`p@@ pP`@`к 0pм 0@`pн 0@P`pPpp@0
0P``0!p#%())*@*0---`NNNNDstring too longinvalid string positionInvalid parameter passed to C runtime function.
FFF+ _,d* _,d* _,d3)6{O>`` 7
ʩWLDAP32.dllnetutils.dllDSROLE.dlldfscli.dlllogoncli.dllSecur32.dll3)6{O>`jو_@2QMPR.dllSHLWAPI.dllbad allocationValForceRemoveNoRemoveDelete#FSqlDatabase::SqlDatabase : Memory Allocation failed.
SqlConnection::Reconnect() : Connect failed with 0x%08X.
SqlConnection::Reconnect() : Connect succeeded.
SqlConnection::Reconnect() : SQLAllocHandle failed with 0x%08X.
SqlConnection::Reconnect() : BindParams failed with 0x%08X.
SqlConnection::Reconnect() : BindResult failed with 0x%08X.
SQLConnection::ReConnect(): Database::SwitchDatabase returned 0x%08X.
SQLConnection::ReConnect(): m_pszDBName is NULL !
SqlConnection::NeedsReConnect(): returned 0x%08X.
Microsoft SQL Server%u.%u.%u{?=CALL {CALL (?,)}odbc code %i, State %S, Message: %S
DbServer::CreateDatabase(): ::new failed with 0x%08X.DbServer::CreateDatabase(): ExecStatement(%S) failed with 0x%08X.
FILEcreate database [%s]
alter database [%s] set recovery simple
????????????????????????????????????????????????	???????

 !"#??????

 !"#?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????FF}PjItHD̩킛jO0EUwsB	s
%Oqln}^ERwFFF\Required CategoriesCLSID\\Implemented Categories.tlbFFFAPPIDModuleModule_RawREGISTRYHKCRHKCUHKLMHKUHKPDHKDDHKCCHKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSHKEY_PERFORMANCE_DATAHKEY_DYN_DATAHKEY_CURRENT_CONFIGSMDBAppIDCLSIDComponent CategoriesFileTypeInterfaceHardwareMimeSAMSECURITYSYSTEMSoftwareTypeLibAPI-MS-Win-Core-LocalRegistry-L1-1-0.dllRegDeleteKeyExWadvapi32.dllRegDeleteKeyW]:HpNܡMZ>o-\QKC<7̮wYWKi0@:>2H2H%e&?NF[VH
ciB*yMPsCpO@qOS}PjItHDsM;$1}dUZ
O+_իvٙ%DXf%UPEz@^DAH[M̌^q}J.@Y'OKKm]O(ADSo:=_h]M'nS<}^ERw+ H!HmF٤M_/}`"
bA4]CjL<FDXN6ySHx^m@kۦ5$E.}VE8LC
ŅӘ.lJ6mI85OV^aMDě^NtŕJ BlhjI|Cmj`{'Mk~%OqlnUwsB	s
킛jO0Evt=VT_EMPTYvt=VT_I4,%dvt=VT_I2,%dvt=VT_BSTR,%svt=VT_DISPATCHvt=VT_ARRAY,elementType=VT_I2 vt=VT_ARRAY,elementType=VT_I4 vt=VT_ARRAY,elementType=VT_BSTR vt=VT_ARRAY,elementType=VT_DISPATCH vt=VT_ARRAY,elementType=VT_VARIANT vt=VT_ARRAY,elementType=[other value]Count=%d <NULL>[BSTR=%s],[I4=%d],[I2=%d],[other value],[other value]%s\%s%s%s calls myAzNewObject enumObject=%d
%s leaves myAzNewObject: return HRESULT value=0x%lx
%s calls myAzCreateObject bstrObjectName=%s
%s leaves myAzCreateObject: return HRESULT value=0x%lx
%s calls myAzDeleteObject bstrObjectName=%s
%s leaves myAzDeleteObject: return HRESULT value=0x%lx
%s calls myAzOpenObject bstrObjectName=%s
%s leave myAzOpenObject: return HRESULT value=0x%lx
%s calls myAzCloseObject bstrObjectName=%s
%s leaves myAzCloseObject: return HRESULT value=0x%lx
%s calls myAzNextObject
Enumeration completed.
%s leaves myAzNextObject: no more results.
%s leaves myAzNextObject: return HRESULT value=0x%lx
%s calls myAzGetProperty: lPropId=%d
Can't DS bind. Will just return non-UPN names
%s leaves myAzGetProperty: return HRESULT value=0x%lx pvarProp=%s
%s leaves myAzGetProperty: return HRESULT value=0x%lx pvarProp=NULL
%s calls %s: lPropId=%d pvarProp=%s
%s calls %s: lPropId=%d pvarProp=NULL
myAzSetProperty%s leaves myAzSetProperty: return HRESULT value=0x%lx
myAzAddOrDeletePropertyItem%s leaves myAzAddOrDeletePropertyItem: return HRESULT value=0x%lx
%s calls myGetBstrProperty: lPropId=%d
%s leaves myGetBstrProperty: return HRESULT value=0x%lx pbstrProp=NULL
%s leaves myGetBstrProperty: return HRESULT value=0x%lx *pbstrProp=%s
%s calls mySetBstrProperty: lPropId=%d bstrProp=%s
%s leaves mySetBstrProperty: return HRESULT value=0x%lx
%s calls myGetLongProperty: lPropId=%d
%s leaves myGetLongProperty: return HRESULT value=0x%lx plProp=NULL
%s leaves myGetLongProperty: return HRESULT value=0x%lx *plProp=%d
%s calls mySetLongProperty: lPropId=%d lProp=%d
%s leaves mySetLongProperty: return HRESULT value=0x%lx
%s calls myGetBoolProperty: lPropId=%d
%s leaves myGetBoolProperty: return HRESULT value=0x%lx plProp=NULL
%s leaves myGetBoolProperty: return HRESULT value=0x%lx *plProp=%d
%s calls mySetBoolProperty: lPropId=%d fProp=%d
%s leaves mySetBoolProperty: return HRESULT value=0x%lx
CAzPrincipalLocator constructor called.Software\Microsoft\AzMan\ObjectPickerCAzPrincipalLocator::CAzPrincipalLocator, failed to query value for ObjectPicker CLSIDCAzPrincipalLocator::CAzPrincipalLocator, registered object picker doesn't implement IAzObjectPickerCAzPrincipalLocator::CAzPrincipalLocator, registered object picker doesn't implement IAzNameResolverCAzPrincipalLocator::CAzPrincipalLocator RegOpenKeyEx failed.CAzPrincipalLocator destructor called.Enter CAzPrincipalLocator::get_NameResolver
Leave CAzPrincipalLocator::get_NameResolver: return HRESULT value=0x%lx
Enter CAzPrincipalLocator::get_ObjectPicker
Leave CAzPrincipalLocator::get_ObjectPicker: return HRESULT value=0x%lx
CAzAuthorizationStore constructor called.
CAzAuthorizationStore destructor called.
CAzAuthorizationStore::get_DescriptionCAzAuthorizationStore::put_DescriptionCAzAuthorizationStore::get_ApplicationDataCAzAuthorizationStore::put_ApplicationDataCAzAuthorizationStore::get_DomainTimeoutCAzAuthorizationStore::put_DomainTimeoutCAzAuthorizationStore::get_ScriptEngineTimeoutCAzAuthorizationStore::put_ScriptEngineTimeoutCAzAuthorizationStore::get_MaxScriptEnginesCAzAuthorizationStore::put_MaxScriptEnginesCAzAuthorizationStore::get_GenerateAuditsCAzAuthorizationStore::put_GenerateAuditsCAzAuthorizationStore::get_WritableCAzAuthorizationStore::GetPropertyCAzAuthorizationStore::SetPropertyCAzAuthorizationStore::AddPropertyItemCAzAuthorizationStore::DeletePropertyItemCAzAuthorizationStore::get_PolicyAdministratorsCAzAuthorizationStore::get_PolicyAdministratorsNameCAzAuthorizationStore::get_PolicyReadersCAzAuthorizationStore::get_PolicyReadersNameCAzAuthorizationStore::AddPolicyAdministratorCAzAuthorizationStore::AddPolicyAdministratorNameCAzAuthorizationStore::DeletePolicyAdministratorCAzAuthorizationStore::DeletePolicyAdministratorNameCAzAuthorizationStore::AddPolicyReaderCAzAuthorizationStore::AddPolicyReaderNameCAzAuthorizationStore::DeletePolicyReaderCAzAuthorizationStore::DeletePolicyReaderNameCAzAuthorizationStore::get_TargetMachineEnter CAzAuthorizationStore::Initialize: lFlag=0x%lx bstrPolicyURL=[%s]
Leave CAzAuthorizationStore::Initialize: return HRESULT value=0x%lx
Enter CAzAuthorizationStore::IsUpdateNeeded
Leave CAzAuthorizationStore::IsUpdateNeeded: return HRESULT value=0x%lx pbIsUpdateNeeded == NULL
Leave CAzAuthorizationStore::IsUpdateNeeded: return HRESULT value=0x%lx *pbIsUpdateNeeded=%d
Enter CAzAuthorizationStore::UpdateCache
Leave CAzAuthorizationStore::UpdateCache: return HRESULT value=0x%lx
Enter CAzAuthorizationStore::Delete
Leave CAzAuthorizationStore::Delete: return HRESULT value=0x%lx
CAzAuthorizationStore::get_ApplicationsCAzAuthorizationStore::OpenApplicationCAzAuthorizationStore::CloseApplicationCAzAuthorizationStore::CreateApplicationCAzAuthorizationStore::DeleteApplicationCAzAuthorizationStore::get_ApplicationGroupsCAzAuthorizationStore::CreateApplicationGroupCAzAuthorizationStore::OpenApplicationGroupCAzAuthorizationStore::DeleteApplicationGroupEnter CAzAuthorizationStore::Submit lFlags=%d
Leave CAzAuthorizationStore::Submit: return HRESULT value=0x%lx
CAzAuthorizationStore::get_DelegatedPolicyUsersCAzAuthorizationStore::get_DelegatedPolicyUsersNameCAzAuthorizationStore::AddDelegatedPolicyUserCAzAuthorizationStore::AddDelegatedPolicyUserNameCAzAuthorizationStore::DeleteDelegatedPolicyUserCAzAuthorizationStore::DeleteDelegatedPolicyUserNameCAzAuthorizationStore::put_ApplyStoreSaclCAzAuthorizationStore::get_ApplyStoreSaclCAzAuthorizationStore::OpenApplication2CAzAuthorizationStore::CreateApplication2CAzApplication constructor calledCAzApplication destructor calledEnter CAzApplication::_Init hHandle=0x%lx
Leave CAzApplication::_Init: return HRESULT value=0x%lx
CAzApplication::get_DescriptionCAzApplication::put_DescriptionCAzApplication::get_NameCAzApplication::put_NameCAzApplication::get_ApplicationDataCAzApplication::put_ApplicationDataCAzApplication::get_AuthzInterfaceClsidCAzApplication::put_AuthzInterfaceClsidCAzApplication::get_VersionCAzApplication::put_VersionCAzApplication::get_GenerateAuditsCAzApplication::put_GenerateAuditsCAzApplication::get_BizruleEnabledCAzApplication::get_ApplyStoreSaclCAzApplication::put_ApplyStoreSaclCAzApplication::get_WritableCAzApplication::GetPropertyCAzApplication::SetPropertyCAzApplication::get_PolicyAdministratorsCAzApplication::get_PolicyAdministratorsNameCAzApplication::get_PolicyReadersCAzApplication::get_PolicyReadersNameCAzApplication::AddPolicyAdministratorCAzApplication::AddPolicyAdministratorNameCAzApplication::DeletePolicyAdministratorCAzApplication::DeletePolicyAdministratorNameCAzApplication::AddPolicyReaderCAzApplication::AddPolicyReaderNameCAzApplication::DeletePolicyReaderCAzApplication::DeletePolicyReaderNameCAzApplication::get_ScopesCAzApplication::OpenScopeCAzApplication::CreateScopeCAzApplication::DeleteScopeCAzApplication::get_OperationsCAzApplication::OpenOperationCAzApplication::CreateOperationCAzApplication::DeleteOperationCAzApplication::get_TasksCAzApplication::OpenTaskCAzApplication::CreateTaskCAzApplication::DeleteTaskCAzApplication::get_ApplicationGroupsCAzApplication::OpenApplicationGroupCAzApplication::CreateApplicationGroupCAzApplication::DeleteApplicationGroupCAzApplication::get_RolesCAzApplication::OpenRoleCAzApplication::CreateRoleCAzApplication::DeleteRoleEnter CAzApplication::InitializeClientContextFromToken ullTokenHandle=0x%8lx%8lx
Enter CAzApplication::InitializeClientContextFromToken ullTokenHandle=%d
CAzApplication::InitializeClientContextFromTokenLeave CAzApplication::InitializeClientContextFromToken: return HRESULT value=0x%lx
Enter CAzApplication::InitializeClientContextFromName ClientName=%s DomainName=%s
CAzApplication::InitializeClientContextFromNameLeave CAzApplication::InitializeClientContextFromName: return HRESULT value=0x%lx
Enter CAzApplication::InitializeClientContextFromStringSid SidString=%s
CAzApplication::InitializeClientContextFromStringSidLeave CAzApplication::InitializeClientContextFromStringSid: return HRESULT value=0x%lx
CAzApplication::AddPropertyItemCAzApplication::DeletePropertyItemEnter CAzApplication::Submit lFlags=%d
Leave CAzApplication::Submit: return HRESULT value=0x%lx
get_DelegatedPolicyUsersget_DelegatedPolicyUsersNameCAzApplication::AddDelegatedPolicyUserCAzApplication::AddDelegatedPolicyUserNameCAzApplication::DeleteDelegatedPolicyUserEnter CAzApplication::ScopeExists bstrScopeName=%s
Bad Param: %d , %d
Leave CAzApplication::ScopeExists: return HRESULT value=0x%lx
Enter CAzApplication::OpenScope2 bstrScopeName=%s
Leave CAzApplication::OpenScope2: return HRESULT value=0x%lx
Enter CAzApplication::CreateScope2 bstrScopeName=%s
Leave CAzApplication::CreateScope2: return HRESULT value=0x%lx
Enter CAzApplication::DeleteScope2 bstrScopeName=%s
Leave CAzApplication::DeleteScope2: return HRESULT value=0x%lx
Enter CAzApplication::get_RoleDefinitions
CAzApplication::get_RoleDefinitionsLeave CAzApplication::get_RoleDefinitions: return HRESULT value=0x%lx
Enter CAzApplication::CreateRoleDefinition bstrRoleDefinitionName=%s
Leave CAzApplication::CreateRoleDefinition: return HRESULT value=0x%lx
Enter CAzApplication::OpenRoleDefinition bstrRoleDefinitionName=%s
Leave CAzApplication::OpenRoleDefinition: return HRESULT value=0x%lx
Enter CAzApplication::DeleteRoleDefinition bstrRoleDefinitionName=%s
Leave CAzApplication::DeleteRoleDefinition: return HRESULT value=0x%lx
Enter CAzApplication::get_RoleAssignments
CAzApplication::get_RoleAssignmentsLeave CAzApplication::get_RoleAssignments: return HRESULT value=0x%lx
Enter CAzApplication::CreateRoleAssignment bstrRoleAssignmentName=%s
Leave CAzApplication::CreateRoleAssignment: return HRESULT value=0x%lx
Enter CAzApplication::OpenRoleAssignment bstrRoleAssignmentName=%s
Leave CAzApplication::OpenRoleAssignment: return HRESULT value=0x%lx
Enter CAzApplication::DeleteRoleAssignment bstrRoleAssignmentName=%s
Leave CAzApplication::DeleteRoleAssignment: return HRESULT value=0x%lx
CAzApplication::DeleteDelegatedPolicyUserNameEnter CAzApplication::InitializeClientContext2 IdentifyingString=%s
CAzApplication::InitializeClientContext2Leave CAzApplication::InitializeClientContext2: return HRESULT value=0x%lx
Enter CAzApplication::InitializeClientContextFromToken2 ulTokenHandleLowPart=%d ulTokenHandleHighPart=%d
Leave CAzApplication::InitializeClientContextFromToken2: return HRESULT value=0x%lx
Enter CAzApplications::_Init
CAzApplications::_InitLeave CAzApplications::_Init: return HRESULT value=0x%lx
CAzOperation constructor called.
CAzOperation destructor called.
Enter: CAzOperation::_Init hOwnerApp=%d hHandle=%d.
Leave CAzOperation::_Init: return HRESULT value=0x%lx
CAzOperation::get_DescriptionCAzOperation::put_DescriptionCAzOperation::get_NameCAzOperation::put_NameCAzOperation::get_ApplicationDataCAzOperation::put_ApplicationDataCAzOperation::get_WritableCAzOperation::get_OperationIDCAzOperation::put_OperationIDCAzOperation::GetPropertyCAzOperation::SetPropertyEnter CAzOperation::Submit lFlags=%d
Leave CAzOperation::Submit: return HRESULT value=0x%lx
Enter CAzOperation::RoleAssignments bstrScopeName=%s bRecursive=%d
Leave CAzOperation::RoleAssignments: return HRESULT value=0x%lx
Enter CAzOperations::_Init hOwnerApp=%d hParent=%d
CAzOperations::_InitLeave CAzOperations::_Init: return HRESULT value=0x%lx
Enter CAzOperations::_Init hOwnerApp=%d
Enter CAzOperations::_AddOperation pOperation=%d
CAzOperations::_AddOperationLeave CAzOperations::_AddOperation: return HRESULT value=0x%lx
Enter CAzOperations::_AddOperationFromTaskObj hParent=%d
Leave CAzOperations::_AddOperationFromTaskObj: return HRESULT value=0x%lx
CAzTask constructor called.
CAzTask destructor called.
Enter CAzTask::_Init hOwnerApp=%d hHandle=%d
Leave CAzTask::_Init: return HRESULT value=0x%lx
CAzTask::get_DescriptionCAzTask::put_DescriptionCAzTask::get_NameCAzTask::put_NameCAzTask::get_ApplicationDataCAzTask::put_ApplicationDataCAzTask::get_BizRuleCAzTask::put_BizRuleCAzTask::get_BizRuleLanguageCAzTask::put_BizRuleLanguageCAzTask::get_BizRuleImportedPathCAzTask::put_BizRuleImportedPathCAzTask::get_IsRoleDefinitionCAzTask::put_IsRoleDefinitionCAzTask::get_OperationsCAzTask::get_TasksCAzTask::AddOperationCAzTask::DeleteOperationCAzTask::AddTaskCAzTask::DeleteTaskget_WritableCAzTask::GetPropertyCAzTask::SetPropertyCAzTask::AddPropertyItemCAzTask::DeletePropertyItemEnter CAzTask::Submit lFlags=%d
Leave CAzTask::Submit: return HRESULT value=0x%lx
Enter CAzTask::RoleAssignments bstrScopeName=%s
Leave CAzTask::RoleAssignments: return HRESULT value=0x%lx
Enter CAzTask::AddRoleDefinition bstrRoleDefinition=%s
CAzTask::AddRoleDefinitionLeave CAzTask::AddRoleDefinition: return HRESULT value=0x%lx
Enter CAzTask::DeleteRoleDefinition bstrRoleDefinition=%s
CAzTask::DeleteRoleDefinitionLeave CAzTask::DeleteRoleDefinition: return HRESULT value=0x%lx
Enter CAzTask::get_RoleDefinitions
CAzTask::get_RoleDefinitionsLeave CAzTask::get_RoleDefinitions: return HRESULT value=0x%lx
Enter CAzTasks::_Init
CAzTasks::_InitLeave CAzTasks::_Init: return HRESULT value=0x%lx
Enter CAzTasks::_AddTask
CAzTasks::_AddTaskLeave CAzTasks::_AddTask: return HRESULT value=0x%lx
Enter CAzTasks::_AddTaskFrom
Leave CAzTasks::_AddTaskFrom: return HRESULT value=0x%lx
Enter CAzScope constructor called.
Enter CAzScope destructor called.
Enter CAzScope::_Init
Leave CAzScope::_Init: return HRESULT value=0x%lx
CAzScope::get_DescriptionCAzScope::put_DescriptionCAzScope::get_NameCAzScope::put_NameCAzScope::get_ApplicationDataCAzScope::put_ApplicationDataCAzScope::get_WritableCAzScope::GetPropertyCAzScope::AddPropertyItemCAzScope::DeletePropertyItemCAzScope::get_PolicyAdministratorsCAzScope::get_PolicyAdministratorsNameCAzScope::get_PolicyReadersCAzScope::get_PolicyReadersNameCAzScope::AddPolicyAdministratorCAzScope::AddPolicyAdministratorNameCAzScope::DeletePolicyAdministratorCAzScope::DeletePolicyAdministratorNameCAzScope::AddPolicyReaderCAzScope::AddPolicyReaderNameCAzScope::DeletePolicyReaderCAzScope::DeletePolicyReaderNameCAzScope::SetPropertyCAzScope::get_ApplicationGroupsCAzScope::OpenApplicationGroupCAzScope::CreateApplicationGroupCAzScope::DeleteApplicationGroupEnter CAzScope::get_Roles
CAzScope::get_RolesLeave get_Roles: return HRESULT value=0x%lx
Enter CAzScope::OpenRole: bstrRoleName=%s
CAzScope::OpenRoleLeave CAzScope::OpenRole: return HRESULT value=0x%lx
Enter CAzScope::CreateRole: bstrRoleName=%s
CAzScope::CreateRoleLeave CAzScope::CreateRole: return HRESULT value=0x%lx
CAzScope::DeleteRoleCAzScope::get_TasksCAzScope::OpenTaskCAzScope::CreateTaskCAzScope::DeleteTaskEnter CAzScope::Submit: lFlags=%d
Leave CAzScope::Submit: return HRESULT value=0x%lx
CAzScope::get_CanBeDelegatedCAzScope::get_BizrulesWritableEnter CAzScope::get_RoleDefinitions
CAzScope::get_RoleDefinitionsLeave CAzScope::get_RoleDefinitions: return HRESULT value=0x%lx
Enter CAzScope::CreateRoleDefinition bstrRoleDefinitionName=%s
CAzScope::CreateRoleDefinition: NULL IAzRoleDefinition parameter.Leave CAzScope::CreateRoleDefinition: return HRESULT value=0x%lx
Enter CAzScope::OpenRoleDefinition bstrRoleDefinitionName=%s
CAzScope::OpenRoleDefinition: NULL IAzRoleDefinition parameter.Leave CAzScope::OpenRoleDefinition: return HRESULT value=0x%lx
Enter CAzScope::DeleteRoleDefinition bstrRoleDefinitionName=%s
Leave CAzScope::DeleteRoleDefinition: return HRESULT value=0x%lx
Enter CAzScope::get_RoleAssignments
CAzScope::get_RoleAssignmentsLeave CAzScope::get_RoleAssignments: return HRESULT value=0x%lx
Enter CAzScope::CreateRoleAssignment bstrRoleAssignmentName=%s
Leave CAzScope::CreateRoleAssignment: return HRESULT value=0x%lx
Enter CAzScope::OpenRoleAssignment bstrRoleAssignmentName=%s
Leave CAzScope::OpenRoleAssignment: return HRESULT value=0x%lx
Enter CAzScope::DeleteRoleAssignment bstrRoleAssignmentName=%s
Leave CAzScope::DeleteRoleAssignment: return HRESULT value=0x%lx
Enter CAzScopes::_Init
CAzScopes::_InitLeave CAzScopes::_Init: return HRESULT value=0x%lx
CAzApplicationGroup constructor called.
CAzApplicationGroup destructor called.
Enter CAzApplicationGroup::_Init
Leave CAzApplicationGroup::_Init: return HRESULT value=0x%lx
CAzApplicationGroup::get_TypeCAzApplicationGroup::put_TypeCAzApplicationGroup::get_LdapQueryCAzApplicationGroup::put_LdapQueryCAzApplicationGroup::get_AppMembersCAzApplicationGroup::get_AppNonMembersCAzApplicationGroup::get_MembersCAzApplicationGroup::get_MembersNameCAzApplicationGroup::get_NonMembersCAzApplicationGroup::get_NonMembersNameCAzApplicationGroup::get_DescriptionCAzApplicationGroup::put_DescriptionCAzApplicationGroup::get_NameCAzApplicationGroup::put_NameCAzApplicationGroup::get_BizRuleCAzApplicationGroup::put_BizRuleCAzApplicationGroup::get_BizRuleLanguageCAzApplicationGroup::put_BizRuleLanguageCAzApplicationGroup::get_BizRuleImportedPathCAzApplicationGroup::put_BizRuleImportedPathCAzApplicationGroup::AddAppMemberCAzApplicationGroup::DeleteAppMemberCAzApplicationGroup::AddAppNonMemberCAzApplicationGroup::DeleteAppNonMemberCAzApplicationGroup::AddMemberCAzApplicationGroup::DeleteMemberCAzApplicationGroup::AddMemberNameCAzApplicationGroup::DeleteMemberNameCAzApplicationGroup::AddNonMemberCAzApplicationGroup::DeleteNonMemberCAzApplicationGroup::AddNonMemberNameCAzApplicationGroup::DeleteNonMemberNameCAzApplicationGroup::get_WritableCAzApplicationGroup::GetPropertyCAzApplicationGroup::SetPropertyCAzApplicationGroup::AddPropertyItemCAzApplicationGroup::DeletePropertyItemEnter CAzApplicationGroup::Submit: lFlags=%d
Leave CAzApplicationGroup::Submit: return HRESULT value=0x%lx
Enter CAzApplicationGroup::RoleAssignments: bstrScopeName=%s bRecusive=%d
Leave CAzApplicationGroup::RoleAssignments: return HRESULT value=0x%lx
Enter CAzApplicationGroups::_Init
CAzApplicationGroups::_InitLeave CAzApplicationGroups::_Init: return HRESULT value=0x%lx
CAzRole constructor called
CAzRole destructor called
Enter CAzRole::_Init
Leave CAzRole::_Init: return HRESULT value=0x%lx
CAzRole::get_DescriptionCAzRole::put_DescriptionCAzRole::get_NameCAzRole::put_NameCAzRole::get_ApplicationDataCAzRole::put_ApplicationDataCAzRole::get_AppMembersCAzRole::get_MembersCAzRole::get_MembersNameCAzRole::get_OperationsCAzRole::get_TasksCAzRole::AddAppMemberCAzRole::DeleteAppMemberCAzRole::AddTaskCAzRole::DeleteTaskCAzRole::AddOperationCAzRole::DeleteOperationCAzRole::AddMemberCAzRole::DeleteMemberCAzRole::AddMemberNameCAzRole::DeleteMemberNameCAzRole::get_WritableCAzRole::GetPropertyCAzRole::SetPropertyCAzRole::AddPropertyItemCAzRole::DeletePropertyItemCAzRole::AddRoleDefinitionCAzRole::DeleteRoleDefinitionEnter CAzRole::get_RoleDefinitions
CAzRole::get_RoleDefinitionsLeave CAzRole::get_RoleDefinitions: return HRESULT value=0x%lx
Enter CAzRole::get_Scope
Leave CAzRole::get_Scope: return HRESULT value=0x%lx
Enter CAzRole::Submit lFlags=%d
Leave CAzRole::Submit: return HRESULT value=0x%lx
Enter CAzRoles::_Init
CAzRoles::_InitLeave CAzRoles::_Init: return HRESULT value=0x%lx
CAzRoleAssignments constructor called.
Enter CAzRoleAssignments::_InitRolesForGivenObj: bstrScopeName=%s bRecursive=%d
Leave CAzRoleAssignments::_InitRolesForGivenObj: return HRESULT value=0x%lx
Enter CAzRoleAssignments::GetRoleAssigmentObj bstrScopeName=%s ScopeFlags=%d
CAzRoleAssignments::GetRoleAssigmentObjLeave CAzRoleAssignments::GetRoleAssigmentObj: return HRESULT value=0x%lx
CAzClientContext constructor called.
CAzClientContext destructor called.
Enter CAzClientContext::AccessCheck2 bstrObjectName=%s, bstrScopeName=%s lOperation=%d
CAzClientContext::AccessCheck2 receives NULL plResult parameter.
Leave CAzClientContext::AccessCheck2: return HRESULT value=0x%lx plResult=NULL
Leave CAzClientContext::AccessCheck2: return HRESULT value=0x%lx *plResult=%d
Enter CAzClientContext::AccessCheck bstrObjectName=%s, bstrScopeNames=%s varOperations=%s
Leave CAzClientContext::AccessCheck: return HRESULT value=0x%lx *pvarResults=%s
Leave CAzClientContext::AccessCheck: return HRESULT value=0x%lx *pvarResults=NULL
Enter CAzClientContext::GetAssignedScopesPage lOptions=%d PageSize=%d
Leave CAzClientContext::GetAssignedScopesPage: return HRESULT value=0x%lx *pvarScopeNames=%s
Leave CAzClientContext::GetAssignedScopesPage: return HRESULT value=0x%lx pvarScopeNames=NULL
Enter CAzClientContext::GetOperations bstrScopeName=%s
Leave CAzClientContext::GetOperations: return HRESULT value=0x%lx
Enter CAzClientContext::GetTasks bstrScopeName=%s
Leave CAzClientContext::GetTasks: return HRESULT value=0x%lx
Enter CAzClientContext::IsInRoleAssignment bstrScopeName=%s bstrRoleName=%s
Leave CAzClientContext::IsInRoleAssignment: return HRESULT value=0x%lx pbIsInRole=NULL
Leave CAzClientContext::IsInRoleAssignment: return HRESULT value=0x%lx *pbIsInRole=%d
Enter CAzClientContext::GetRoles bstrScopeName=%s
Leave CAzClientContext::GetRoles: return HRESULT value=0x%lx
Enter CAzClientContext::GetBusinessRuleString
Leave CAzClientContext::GetBusinessRuleString: return HRESULT value=0x%lx pbstrBusinessRuleString=NULL
Leave CAzClientContext::GetBusinessRuleString: return HRESULT value=0x%lx *pbstrBusinessRuleString=%s
CAzClientContext::get_UserDnCAzClientContext::get_UserSamCompatCAzClientContext::get_UserDisplayCAzClientContext::get_UserGuidCAzClientContext::get_UserCanonicalCAzClientContext::get_UserUpnCAzClientContext::get_UserDnsSamCompatCAzClientContext::GetPropertyCAzClientContext::get_RoleForAccessCheckCAzClientContext::put_RoleForAccessCheckEnter CAzClientContext::AddApplicationGroups
Leave CAzClientContext::AddApplicationGroups: return HRESULT value=0x%lx
Enter CAzClientContext::AddRoles bstrScopeName=%s
Leave CAzClientContext::AddRoles: return HRESULT value=0x%lx
Enter CAzClientContext::AddStringSids
Leave CAzClientContext::AddStringSids: return HRESULT value=0x%lx
CAzClientContext::get_LDAPQueryDNCAzClientContext::put_LDAPQueryDNEnter CAzClientContext::_Init
Leave CAzClientContext::_Init: return HRESULT value=0x%lx
Enter get_BizRuleParameters::_Init
Leave CAzClientContext::get_BizRuleParameters: return HRESULT value=0x%lx
Enter get_BizRuleInterfaces::_Init
Leave CAzClientContext::get_BizRuleInterfaces: return HRESULT value=0x%lx
Enter CAzClientContext::GetGroups bstrScopeName=%s
Leave CAzClientContext::GetGroups: return HRESULT value=0x%lx
Enter CAzClientContext::get_Sids.
Leave CAzClientContext::get_Sids: return HRESULT value=0x%lx
Enter CAzRoleDefinitions::_Init
CAzRoleDefinitions::_InitLeave CAzRoleDefinitions::_Init: return HRESULT value=0x%lx
Enter CAzRoleDefinitions::CollectTaskAsRoleDefinition
CAzRoleDefinitions::CollectTaskAsRoleDefinitionLeave CAzRoleDefinitions::CollectTaskAsRoleDefinition: return HRESULT value=0x%lx
Enter CAzRoleDefinitions::CollectNamedRoleDefinitions
AZ_PROP_ROLE_TASKS returns bogus task object %s
Leave CAzRoleDefinitions::CollectNamedRoleDefinitions: return HRESULT value=0x%lx
Enter CAzRoleAssignments::_Init
CAzRoleAssignments::_InitLeave CAzRoleAssignments::_Init: return HRESULT value=0x%lx
%09IuObject with the same name existmap/set<T> too longSOFTWARE\Microsoft\OleEnableATLEnumClassLockH
ciB*yMPsCpO@qOSinvalid map/set<T> iterator.lJ6mH2H%e&ٙ%DXf_h]M'nS<{'Mk~hjI|Cmj`^q}J.DXN6y?NF[VOV^aMDě^Nt^DAH[M̌̇$E.}VE@Y'
bA4]C1}dUZ
O+_իvHmF٤OKKm]OŕJ BljL<FI858LC
ŅӘSHx^m@kۦ5M_/}`"%UPEz@sM;$(ADSo:=+ H!CAzBizRuleContext
~CAzBizRuleContext
CAzBizRuleContext::put_BusinessRuleResult: %ld
CAzBizRuleContext::put_BusinessRuleString: %ws
CAzBizRuleContext::get_BusinessRuleString: %ws
CAzBizRuleContext::GetParameter: %ls
CAzBizRuleContext::GetParameter: %ls: Parameter not passed in.
CAzBizRuleContext::SetAccessCheckContext
SYSTEM\CurrentControlSet\Control\LSA\AzRolesUseStrongLockingSoftware\Microsoft\AzMan\LoggingFlagsAPPDATA\Microsoft\AzMan\AzManDebug_%d.log
AzMan log file
Process Name: Current User Name: Current System Time: %02u/%02u/%02u %02u:%02u:%02u

S-1-3-4AzpAzStoreGetProperty: invalid prop id %ld
SetProperty: Object doesn't support dirty bit 0x%lx
IsNormalFlags(_Flags) = TRUE
(_GenericObject->DirtyBits & _DirtyBit) = 0
IsRefreshFlags(_Flags) = TRUE
AzpAzStoreManagerSetProperty: domain timeout too small %ld
AzpAzStoreManagerSetProperty: script engine timeout too small %ld
AzpAzStoreManagerSetProperty: max script engines too small %ld
AzpAzStoreManagerSetProperty: invalid prop id %ld
AzInitialize: Reserved != 0
AzInitialize: Invalid flags 0x%lx
AzInitialize: Failed to Initialize Audit system: %ld
AzAuthorizationStoreDelete: Reserved != 0
AzCloseHandle: Reserved != 0
AzAuthorizationStore in AzCloseHandle refAzpAddObjectToGuidMap: objects already in mapvector<T> too long%s:%dAzApplicationGetProperty: invalid prop id %ld
AzpApplicationSetProperty: cannot convert CLSID %ws %ld
AzpApplicationSetProperty: invalid prop id %ld
AzApplicationClose: Failed to capture application name: %ld
AzApplicationClose: Cannot reference application %ws: %ld
AzApplicationClose: Cannot reload children on unload failure: %ld
SOFTWARE\Microsoft\AzMan\BizRuleEnabledApplicationsAvoided script engine in non-base thread.
Using free script engine from non-base thread.
ReuseEngine failed: 0x%lx
Using free script engine.
Using clone of running script engine.
new CScriptEngine failed: 0x%lx
ScriptEngine->Init failed: 0x%lx
Using new script engine.
Engine doesn't support reset: 0x%lx
Script changed while engine was running
Script LRU'ed out: %ld
Script Freed from free script list
AzpGetScriptEngine failed: 0x%lx, %ld
RunScript failed: 0x%lx, %ld
CoInitializeEx failed: 0x%lx, %ld
Script Timed out.
CScriptEngine
~CScriptEngine
CScriptEngine::InitializeScriptEngine
Failed to get scripting engine CLSID: 0x%lx
Failed to create scripting engine: 0x%lx
IActiveScript::QueryInterface()Exception: %s: 0x%lx
Engine doesn't support IActiveScriptParse: 0x%lx
Failed to create AzBizRuleContext instance: 0x%lx
IActiveScript::GetCurrentScriptThreadID()Error calling GetCurrentScriptThreadID: 0x%lx
Set ThreadId to: 0x%lx 0x%lx
IActiveScript::SetScriptSite()Error calling SetScriptSite: 0x%lx
IActiveScriptParse::InitNew()Error calling InitNew: 0x%lx
AzBizRuleContextIActiveScript::AddNamedItem()Failed to AddNamedItem: 0x%lx
IActiveScriptParse::ParseScriptText()Failed to ParseScriptText: 0x%lx
Remap error to: 0x%lx
CScriptEngine::RunScript
RunScript took an exception: 0x%lx
Script took an exception: 0x%lx
Failed to SetScriptState(STARTED): 0x%lx
Script from access check to caller: 0x%lx
Return script error to caller: 0x%lx
Cannot DeleteTimerQueurTimer: %ld
CScriptEngine::InterruptScript
IActiveScript::InterruptScriptThread()CScriptEngine::ResetToUninitialized
IActiveScriptParse::Release()IActiveScript::SetScriptState()Failed to SetScriptState(INITIALIZED): 0x%lx
CScriptEngine::ReuseEngine
IActiveScript::GetScriptState()Failed to GetScriptState: 0x%lx
Failed to SetScriptState(UNINITIALIZED): 0x%lx
Changed ThreadId to: 0x%lx 0x%lx
CScriptEngine::IsBaseThread
CScriptEngine::FinalRelease
IActiveScript::Close()Cannot CloseEngine: 0x%lx
IActiveScript::Release()CScriptEngine::InsertHeadList
CScriptEngine::RemoveListEntry
CScriptEngine::InsertHeadLruList
CScriptEngine::RemoveLruListEntry
CScriptEngine::QueryInterface->IUnknown
IActiveScriptSite
Unsupported Interface: 
CScriptEngine::AddRef %ld
CScriptEngine::Release %ld
CScriptEngine::GetLCID
CScriptEngine::GetItemInfo: %ws
GetItemInfo took an exception: 0x%lx
CScriptEngine::GetDocVersionString
CScriptEngine::OnScriptTerminate
CScriptEngine::OnStateChange:State: Uninitialized.
State: Initialized.
State: Started.
State: Connected.
State: Disconnected.
State: Closed.
CScriptEngine::OnScriptError
Script Error: Code: 0x%lx %ld
              Src:  %ws
              File: %ws
              Desc: %ws
CScriptEngine::OnEnterScript
CScriptEngine::OnLeaveScript
CAzBizRuleParamInternal::AddParameters: Can't get name lbound 0x%lx
CAzBizRuleParamInternal::AddParameters: Can't get value lbound 0x%lx
CAzBizRuleParamInternal::AddParameters: Can't get name ubound 0x%lx
CAzBizRuleParamInternal::AddParameters: Can't get value ubound 0x%lx
CAzBizRuleParamInternal::AddParameters: Array bounds don't match %ld %ld %ld %ld
CAzBizRuleParamInternal::AddParameters: Can't access ParameterNames 0x%lx
CAzBizRuleParamInternal::AddParameters: Can't access ParameterValues 0x%lx
CAzBizRuleParameters::AddParameters: Parameter %ld isn't a VT_BSTR
CAzBizRuleParameters::AddParameters: Parameter %ws should have an interface value
AzpCaptureBizRuleInterfaces: Can't get name lbound 0x%lx
AzpCaptureBizRuleInterfaces: Can't get value lbound 0x%lx
AzpCaptureBizRuleInterfaces: Can't get interfaces lbound 0x%lx
AzpCaptureBizRuleInterfaces: Can't get name ubound 0x%lx
AzpCaptureBizRuleInterfaces: Can't get value ubound 0x%lx
AzpCaptureBizRuleInterfaces: Can't get interfaces ubound 0x%lx
AzpCaptureBizRuleInterfaces: Array bounds don't match %ld %ld %ld %ld %ld %ld
AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access ParameterNames 0x%lx
AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access Flags 0x%lx
AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access Interfaces 0x%lx
GroupRole-AzpClientContextFree:  AzpClientContextGenerateDeleteAudit failed with %ld
AzpGetUserNameEx: no cached token handle
AzpGetUserNameEx: Cannot get token statistics: %ld
AzpGetUserNameEx: Cannot GetThreadToken %ld
AzpGetUserNameEx: Cannot SetThreadToken %ld
AzpGetUserNameEx: Cannot GetUserNameExW %ld
AzpGetUserNameEx: Cannot SetThreadToken (revert) %ld
AzpClientContextGetProperty: invalid opcode %ld
AzpClientContextGetProperty: Cannot get token statistics: %ld
%ws\%wsAzpClientContextGetProperty: Cannot translate name: %ld
AzpClientContextSetProperty: invalid prop id %ld
AzpComputeAccountDn: AuthzGetInformationFromContext failed %ld
AzpComputeAccountDn: SafeAllocaAllocate failed %ld
AzpComputeAccountDn: AzpAllocateHeap failed %ld
<Sid=>AzpQueryUserDN: ClientContext is missing LdapQueryDN from a standalone machine.
AzpQueryUserDN: ClientContext (AZP_CONTEXT_CREATED_FROM_SID) is missing LdapQueryDN.
distinguishedName(objectClass=user)AzpCheckGroupMembershipLdap: %ws
AzpCheckGroupMembershipLdap: %ws: User is in NT 4 domain or local account: Membership is %ld
AzpCheckGroupMembershipLdap: %ws: AzpGetUserNameEx failed %ld
AzpCheckGroupMembershipLdap: ClientContext is missing LdapQueryDN.
AzpCheckGroupMembershipLdap: %ws: DsGetDcName failed %ld
ObjectClassAzpCheckGroupMembershipLdap: %ws: ldap_search failed on %ws: %ld: %s
AzpCheckGroupMembershipLdap: %ws: ldap_count_entries failed on %ws: %ld: %s
AzpCheckGroupMembershipLdap: %ws: ldap_search worked on %ws: Membership is %ld
(objectClass=*)AzpCheckGroupMembershipLdapForLdapUrl: %ws
    AzpQueryUserDN failed.    AzpCheckGroupMembershipLdapForLdapUrl:invalid LDAP query syntaxAzpCheckGroupMembershipLdapForLdapUrl: ldap_init failed on %ws: %ld: %s
AzpCheckGroupMembershipLdapForLdapUrl: AzpADSetDefaultLdapOptions failed on %ws: %ld
AzpCheckGroupMembershipLdapForLdapUrl: ldap_connect failed on %ws: %ld
AzpCheckGroupMembershipLdapForLdapUrl: AzpADSetLdapEncryptionOption failed on %ws: %ld
AzpCheckGroupMembershipLdapForLdapUrl: ldap_bind failed on %ws: %ld: %s
AzpCheckGroupMembershipOne: %ws
AzpCheckGroupMembershipOne: %ws: Create cache entry
AzpCheckGroupMembershipOne: %ws: %ld: %ld: Answer found in cache
AzpCheckGroupMembershipOne: %ws: Is a basic group
AzpCheckGroupMembershipOne: %ws: Cannot AzptCheckObjecSidMembership (non member) %ld
AzpCheckGroupMembershipOne: %ws: Is non member via NT Sid
AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (non member) %ld
AzpCheckGroupMembershipOne: %ws: Is non member via app group
AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (member) %ld
AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (member) extended status: %ld
AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (non member) extended status: %ld
AzpCheckGroupMembershipOne: %ws: %ld: %ld: Answer computed
AzpCheckGroupMembershipOne: %ws: Avoid ldapquery group
AzpCheckGroupMembershipOne: ClientContext is missing LdapQueryDNAzpCheckGroupMembershipOne: %ws: Is an ldapquery group
AzpCheckGroupMembershipOne: %ws: Is an invalid group type
Task referenceAzpCaptureBizRuleInterfaces: Names is NULL but Flags or Interfaces isn't
AzpCaptureBizRuleInterfaces: Flags or Interfaces is NULL but Names isn't
AzpWalkOpsAndTasks: %ws: %ws: All operations have been processed %ld.
AzpWalkOpsAndTasks: %ws: %ws: %ws: Operation granted
AzpWalkOpsAndTasks: %ws: %ws: %ws: Operation extended failure %ld
AzInitializeContextFromToken: Cannot initialize context since store is in manage mode %ld
AzInitializeContextFromToken: Cannot ObCommonCreateObject %ld
AzInitializeContextFromToken: Cannot OpenProcessToken %ld
AzInitializeContextFromToken: Cannot DuplicateTokenEx %ld
AzInitializeContextFromToken: Cannot OpenThreadToken %ld
AzInitializeContextFromToken:  GetTokenInformation failed with %ld
AzInitializeContextFromToken: Cannot AuthzInitializeContextFromToken %ld
AzpGenerateContextCreateAudit: Cannot ObCommonCreateObject %ld
AzManAPIKerberosAzRoles AzInitializeContextFromName: Cannot initialize context since store is in manage mode %ld
AzInitializeContextFromName: Cannot AzInitializeFromToken %ld
AzInitializeContextFromName: Cannot ObCommonCreateObject %ld
AzInitializeContextFromName: Cannot allocate LUID %ld
AzInitializeContextFromName: LookupAccoutName failed with %ld
AzInitializeContextFromName: Invalid user type - expected SIdTypeUser, got %ld
AzInitializeContextFromStringSid: Cannot initialize context since store is in manage mode %ld
AzInitializeContextFromStringSid: ConvertSidStringToSid failed with %ld
AzInitializeContextFromStringSid: LookupAccountSid failed with %ld
AzInitializeContextFromStringSid: Invalid user type - expected SIdTypeUser, got %ld
AzInitializeContextFromStringSid: Cannot ObCommonCreateObject %ld
AzInitializeContextFromStringSid: Cannot allocate LUID %ld
AzInitializeContextFromStringSid: CopySid failed with %ld
AzInitializeContextFromStringSid: Cannot AuthzInitializeContextFromStringSid %ld
S-1-0-0AzInitializeContext: Cannot initialize context since store is in manage mode %ld
AzInitializeContext: Cannot initialize context with null audit identifying string %ld
AzInitializeContext: ConvertSidStringToSid for null SID failed with %ld
AzInitializeContext: Cannot ObCommonCreateObject %ld
AzInitializeContext: Cannot allocate LUID %ld
AzInitializeContext: CopySid for null SID failed with %ld
AzInitializeContext: Cannot AuthzInitializeContext %ld
AzAccessCheck: %ws: GroupEvalSerialNumber changed from %ld to %ld
AzAccessCheck: Failed to load children for %ws: %ldAzAccessCheck: %ws: invalid OperationCount %ld
AzAccessCheck: %ws: %ws: There are no roles for this scope
Role referenceAzAccessCheck: This role %ws is not the requested role %ws 
AzAccessCheck: %ws: %ws: No operations for this role apply
AzAccessCheck: %ws: %ws: No roles have applicable operations %ld.
AzContextAccessCheck: Starting Access Check loops
AzAccessCheck: %ws: %ws: All roles have been processed %ld.
AzAccessCheck: %ws: %ws: All operations have been processed %ld.
AzAccessCheck: %ws: %ws: Process role
AzAccessCheck: %ws: %ws: AzpWalkOpsAndTasks failed %ld
AzAccessCheck: %ws: %ws: CheckSidMembership of role
AzAccessCheck: %ws: %ws: CheckSidMembership failed %ld
AzAccessCheck: %ws: %ws: CheckSidMembership is %ld
AzAccessCheck: %ws: %ws: CheckGroupMembership of role
AzAccessCheck: %ws: %ws: CheckGroupMembership failed %ld
AzAccessCheck: %ws: %ws: CheckGroupMembership extended status %ld
AzAccessCheck: %ws: %ws: CheckGroupMembership is %ld
AzAccessCheck: %ws: %ws: Role finished being processed
AzAccessCheck: %ws: %ws: Role finished being processed due to ACCESS_DENIED
AzAccessCheck: %ws: AzpAccessCheckGenerateAudit failed with %ld
AzpCheckRolesMembersip: %ws: CheckSidMembership of role
AzpCheckRolesMembersip: %ws: CheckSidMembership failed %ld
AzpCheckRolesMembersip: %ws: CheckSidMembership is %ld
AzpCheckRolesMembersip: %ws: CheckGroupMembership of role
AzpCheckRolesMembersip: %ws: CheckGroupMembership failed %ld
AzpCheckRolesMembersip: %ws: CheckGroupMembership is %ld
AzpCheckRolesMembersip: %ws: CheckGroupMembership extended status %ld
AzpCheckRolesMembersip: %ws: Role finished being processed 
Role/Group referenceAzpCheckGroupMembershipOne failed.
0x%lx %ws (%ld): Domain ref
0x%lx %ws (%ld): Domain deref
AzpAllocateDc: ldap_init failed on %ws: %ld: %s
AzpAllocateDc: AzpADSetDefaultLdapOptions failed on %ws: %ld
AzpAllocateDc: ldap_connect failed on %ws: %ld
AzpAllocateDc: AzpADSetLdapEncryptionOption failed on %ws: %ld
AzpAllocateDc: ldap_bind failed on %ws: %ld: %s
0x%lx %ws (%ld): DC Allocaote
0x%lx %ws (%ld): DC ref
0x%lx %ws (%ld): DC deref
AzAuthorizationStore in ObCloseHandle refAllocate objectChild handle refHandle ref0x%lx %ld (%ld): Open Handle
Authorization Store Handle ref0x%lx %ld (%ld): Close Handle
Authorization Store Handle derefHandle derefChild handle derefObDecrHandleRefCount: Cannot reload children on failure of unload: %ld
0x%lx: NULL handle is invalid
0x%lx %ld: Handle Object type is too large.
0x%lx %ld: Handle has no handle reference count.
0x%lx %ld: Handle has no ParentGenericObjectHead.
0x%lx %ld: Object is deleted.
0x%lx %ld: Object type doesn't match parent.
0x%lx %ld: Sequence number doesn't match parent.
0x%lx: AV accessing handle
ObReferenceObjectByName (by guid): Ref by name0x%lx: NULL handle not allowed.
0x%lx %ld: Object Type not local object type
Ref by Handle0x%lx %ld: Handle not in list.
Deref	

"*/:<>?\|	

ObCreateObject: %ws ObCommonCreateObject: Reserved != 0
ObCommonOpenObject: Reserved != 0
ObCommonEnumObjects: Reserved != 0
ObCommonGetProperty: Reserved != 0
ObCommonGetProperty: Object has no name
ObCommonGetProperty: Object has no description
ObCommonGetProperty:Object has no application data
ObCommonGetProperty: Object has no generate-audits data
ObCommonGetProperty: Object has no apply-store-sacl data
ObCommonGetProperty:Object has no apply-store-sacl data
ObCommonGetProperty: No get property routine.
ObSetProperty: no set property routine: %ld %ld
ObSetProperty: OpCacheSerialNumber set to %ld
ObCommonDeleteObject: Reserved != 0
0x%lx: 0x%lx: %ld: ObFreeDeltaArray
0x%lx: 0x%lx: ObInitObjectList
ObRemoveObjectListLink: OpCacheSerialNumber set to %ld
AzpeAddPropertyItemSid: AzpAllocateHeap failed %ld
AzpeAddPropertyItemSid: duplicate SIDAzpeAddPropertyItemSid: set::insert failed %ld
ObAddPropertyItem (by guid): ObAddPropertyItem: Cannot set creator owner sid
ObAddPropertyItem: Cannot set creator group sid
Reference to self
ObAddPropertyItem: GroupEvalSerialNumber set to %ld
ObAddPropertyItem: OpCacheSerialNumber set to %ld
AzAddPropertyItem: Reserved != 0
AzAddPropertyItem: invalid prop id %ld
ObRemovePropertyItem: GroupEvalSerialNumber set to %ld
AzRemovePropertyItem: Reserved != 0 && Reserved != 1
AzRemovePropertyItem: invalid prop id %ld
0x%lx: 0x%lx: %ld: ObRemoveObjectListLinks
ObClearObjectList PropertyID %d
0x%lx: 0x%lx: ObFreeObjectList
0x%lx: 0x%lx: Free array
Reference from NewNameAzpGetTokenUserGroupsFromAuthzContext: NULL ppTokenUser or NULL ppTokenGroups not allowed %ld
AzpGetTokenUserGroupsFromAuthzContext: AuthzGetInformationFromContext failed %ld
AzpGetTokenUserGroupsFromAuthzContext: SafeAllocaAllocate failed %ld
AzpGetSidsFromUserGroups: null pSidList or pdwListSize
AzpGetSidsFromUserGroups: out of memory.
AzpIsSidInList: pbAnswer must not be NULL.
AzpIsSidInList: sidListFlag can only be SID_MEMBER_LIST(1) or SID_NON_MEMBER_LIST(2) .
AzpIsSidInList: hObject is not Role or Group.
AzpIsSidInList: Role does not have non-member SID list.
AzpAuthzCheckSid: hAuthzHandle must not be NULL.
AzpAuthzCheckSid: pbIsGood must not be NULL.
AzpAuthzCheckSid: pSid must not be NULL.
AzpSidsImplyObjectMembership: both pbAnswer and pbIsNonMember must not be NULL.
AzpIsUserAuthzMember: pbAnswer must not be NULL.
AzpGetClientContextSids: failed.
a@@@@pPAzpGroupInit: memory allocation failed %ld
AzpGroupGetProperty: invalid opcode %ld
AzpGroupGetProperty: cannot set group type to ldap query if group has membership.
AzpGroupGetProperty: cannot set group type to basic if group has bizrule string.
AzpGroupGetProperty: cannot set group type to basic if group has ldap query string.
AzpGroupGetProperty: This version of the store doesn't support creating bizrule group.
AzpGroupGetProperty: cannot set group type to bizrule if group has ldap query string.
AzpGroupGetProperty: invalid grouptype %ld
VBScriptAzpGroupSetProperty: can't set Bizrule before group type
AzpGroupSetProperty: Must set language before bizrule
AzpGroupSetProperty: can't set Bizrule type before group type
JScriptAzpGroupSetProperty: invalid language %ws
AzpGroupSetProperty: can't set Bizrule Path before group type
AzpGroupSetProperty: can't set ldap query before group type
ldap://invalid LDAP query syntaxAzpGroupSetProperty: GroupEvalSerialNumber set to %ld
AzpGroupSetProperty: invalid propid %ld
AzpGroupAddPropertyItem: invalid group type %ld
AzpRoleInit: memory allocation failed %ld
AzpRoleGetProperty: invalid prop id %ld
TrueFalseBasicLdapQueryBizruleMSXMLDomainTimeoutScriptTimeoutMaxScriptsAuditsApplicationDataMajorVersionMinorVersionAzApplicationAzApplicationGroupApplicationCLSIDApplicationVersionAzOperationAzTaskAzScopeAzRoleOperationLinkOperationIDTaskLinkBizRuleImportedPathRoleDefinitionBizRuleLanguageBizRuleAppMemberLinkAppNonMemberLinkGroupTypeMemberNonMemberAzAdminManagerxml file %ws exists.
xml file %ws doesn't exist.
IXMLDOMDocument2::load failed. HRESULT = %d. Intepreted as 'file not found'.IXMLDOMDocument2::load failed. HRESULT = %dCoCreating IXMLDOMDocument2 failed. HRESULT = %dXmlCheckSecurityPrivilege: invalid full path '%ws'
XmlCheckSecurityPrivilege: path is too long '%ws'
::$dataAzpChangeSinglePrivilege failed to reset to original. Error code: %d(myXmlSetNodeAttribute)pNode = 0x%lx
(myXmlSubmitObjectAttribute)pNode = 0x%lx
%dNameGuidDescription <?xml version="1.0" encoding="utf-8" ?>
<AzAdminManager MajorVersion="%d" MinorVersion="%d" Guid="%s">
</AzAdminManager>pDoc->loadXML%s error occured: 0x%lx(%ws)
%s error occured: 0x%lx
fileSelectionLanguagedefault SelectionLanguage=%ws
XPath//%s[.="%s"]XPath query(link delete)=%ws
Not found %s under tag %ws
hr = 0x%lx, pObjectNode(from myXmlGetNamedGuidNode) = 0x%lx
A new element node, 0x%lx, is added for %s
pObjectNode, 0x%lx, is released
//*/%s[@%s="%s"]XPath query(refresh)=%ws
1.2.840.113556.1.4.8051.2.840.113556.1.4.14131.2.840.113556.1.4.529msDS-AzApplicationNamecnmsDS-AzScopeNamenamedescriptionmsDS-AzApplicationDatamsDS-AzGenerateAuditsmsDS-AzDomainTimeoutmsDS-AzScriptEngineCacheMaxmsDS-AzScriptTimeoutmsDS-AzMajorVersionmsDS-AzMinorVersionallowedAttributesEffectiveallowedChildClassesEffectiveobjectVersionuSNChangedobjectGUIDmsDS-AzClassIdmsDS-AzApplicationVersionmsDS-AzOperationIDmsDS-AzBizRulemsDS-AzBizRuleLanguagemsDS-AzLastImportedBizRulePathmsDS-OperationsForAzTaskmsDS-TasksForAzTaskmsDS-AzTaskIsRoleDefinitionmsDS-MembersForAzRolemsDS-OperationsForAzRolemsDS-TasksForAzRolegroupTypemsDS-AzLDAPQuerymembermsDS-NonMembersmsDS-AzAdminManagermsDS-AzApplicationmsDS-AzOperationmsDS-AzTaskmsDS-AzScopegroupmsDS-AzRolecontainerAzOpObjectContainer-AzTaskObjectContainer-AzGroupObjectContainer-AzRoleObjectContainer-(objectClass=msDS-AzAdminManager)(objectClass=msDS-AzApplication)(objectClass=msDS-AzOperation)(objectClass=msDS-AzTask)(objectClass=msDS-AzScope)(objectClass=group)(objectClass=msDS-AzRole)MSLDAPAzpADSetObjectOptions: AzpeSetObjectOptions failed: %ld
AzpADPersistOpenEx: AzpLdapCrackUrl failed on %ws: %ld
AzpADPersistOpenEx: ldap_init failed on %ws: %ld: %s
AzpADPersistOpenEx: AzpADSetDefaultLdapOptions failed on %ws: %ld
AzpADPersistOpenEx: ldap_connect failed on %ws: %ld
AzpADPersistOpenEx: AzpADSetLdapEncryptionOption failed on %ws: %ld
AzpADPersistOpenEx: ldap_bind failed on %ws: %ld
AzpADPersistOpenEx: AzpCheckDomainVersion failed on %ws: %ldCN=AzpADPersistOpenEx: ldap_get_option failed : %ld
AzpADPersistOpenEx: AzpReadADStore failed: %ld
BizRule group not supported, please update the schema
AzpADPersistUpdateChildrenCache: AzpADBuildDN failed: %ld
AzpADPersistUpdateChildrenCache: failed to init paged search handle: %ld
AzpADPersistUpdateChildrenCache: failed to read paged results: %ld
AzpADReadHasChildrenObject: Reading of Child container objectfailed: %ld
AzpADPersistSubmit: AzpADStoreHasUpdate failed: %ld
AzpADPersistSubmit: AzpADBuildDN failed:%ld
AzpADPersistSubmit: AzpADBuildNameSearchFilter failed:%ld
Submitting a new object with name that has been submitted by other instances of azstore objectAzpADPersistSubmit: AzpADBuildDN failed: %ld
AzpADPersistSubmit: Failed to delete object %ws: %ld
AzpADPersistSubmit: Update failed for object %ws: %ld
AzpADPersistRefresh: AzpADBuildDN failed: %ld
AzpADPersistRefresh: Search on object failed:%ld
AzpADPersistRefresh: AzpReadADStoreObject failedfor %s: %ld
AzpADPersistWritable: %ws attribute isn't writable
AzpADPersistWritable: Error calling AzpADPersistChildCreate: %ld
AdCheckSecurityPrivilege: AzpADReadNTSecurityDescriptor failed: %ld
AzpADPersistOpenEx: AzpCheckVersions failed with error: %ld
AzpReadADStoreObject failed: %ld
AzpReadADStore: AzpADReadAzStoreChildren failed: %ld
AzpADReadAzStoreChildren: Failed to read Application Groups: %ld
AzpADReadAzStoreChildren: Failed to create paged result handle: %ld
AzpADReadAzStoreChildren: AzpADReadPagedResult failed: %ld
AzpADReadPagedResult: Reading of child objectfailed: %ld
AzpADReadPagedResult: Updating children failed: %ld
AzpADReadPagedResult: Failed to read paged LDAP result: %ld
,AzpReadADObjectContainer: Reading of child objectfailed: %ld
AzpReadADStoreForCommonData: AzpInitializeObjectName failed: %ld
AzpReadADStoreForCommonData: AzpeCreateObject failed: %ld
AzpReadADStoreForCommonData: AzpADCreateGuidCN failed for %ws: %ld
AzpReadADStoreForCommonData: Read description failed: %ld
AzpUpdateObjectGuid: Failed to allocate memoryAzpReadADStoreObject: Object creation and common data read failed: %ld
AzpReadAttributeAndSetProperty failed: %ld
AzpReadADStoreObject: Failed to apply policy ACLs: %ld
AzpReadADStoreObject: AzpADPersistWritable failed: %ld
AzpADSetObjectOptions failed: %ld
<Unknown>AzpReadAttributeAndSetProperty:AzpADReadLinkedAttribute failed for attribute %ws of %ws: %ld
TRUE%s;range=%d-%d%s;range=%d-*AzpReadLinkedAttribute:AzpADParseLinkedAttributeValue failed for %ws: %ld
AzpReadAttributeAndSetProperty: AzpeAddPropertyItem failed: %ld
AzpADReadAttributeAndSetProperty:AzpeAddPropertyItemGuid failed on: %ld
CN=AZGROUPOBJECTCONTAINER-CN=FOREIGNSECURITYPRINCIPALS,AzpADParseLinkedAttributeValue: ldap_set_option LDAP_OPT_REFERRALS failed: %ld
AzpADParseLinkedAttributeValue: Failed to run search for group type for %ws: %ld
<GUID=<SID=AzpApplyPolicyAcls: AzpADReadNTSecurityDescriptor failed :%ld
AzpADApplyPolicyAcls: AzpeSetSecurityDescriptorIntoCache failed:: %ld
AzpUpdateADObject: AzpADUpdateObjectAcls failed for %ws: %ld
AzpUpdateADObject: Read writable failed: %ld
AzpUpdateADObject: AzpGetAttrsForCreateObject failed for %ws: %ld
AzpUpdateADObject: AzpGetADCommonAttrs failed: %ld
AzpUpdateADObject: Get property failed  for %s: %ld
AzpUpdateADObject: Failed to add/modify %ws : %ld %ld
AzpUpdateADObject: UuidCreate failed  for %s: %ld
AzpUpdateADObject: Failed to search object %s: %ld
AzpUpdateADObject: AzpSetGuidAndOptions failed  for %s: %ld
objectClassAzpCreateADObject: Failed to add object %ws: %ld %ld
AzpUpdateADCommonAttrs: AzpeGetProperty failed for object name: %ld
AzpADUpdateCommonAttrs: Failed to rename %ws: %ld
AzpADUpdateCommonAttrs: Get property failed : %ld
AzpGetSpecificProperty: AzpADHandleSubmitLinkedAttribute failed for %s: %ld
AzpADGetSpecificProperty: Get Property failed: %ld
FALSEAzpHandleSubmitLinkedAttribute: AzpeGetDeltaArray failed for %ws: %ld
AzpADHandleSubmitLinkedAttribute: AzpeGetDeltaArray failed for %ws: %ld
AzpHandleSubmitLinkedAttribute: ConvertSidToStringSid failed: %ld
AzpHandleSubmitLinkedAttribute: UuidToString failed: %ld
AzpADUpdateObjectAcls: AzpADReadNTSecurityDescriptor failed :%ld
AzpADUpdateObjectAcls: AzpeGetSecurityDescriptorFromCache failed: %ld
AzpADUpdateObjectAcls: AzpADStampSD failed with SACL/DACL: %ld
AzpADUpdateObjectAcls: AzpApplyPolicyAcls failed with DACL: %ld
AzpADBuildDN: AzpADBuildDNForBuiltinObject failed:%ld
AzpADBuildDN: AzpADObjectContainerRDN failed:%ld
AzpADBuildDN: AzpADBuildChildObjectDN failed for %s: %ld
AzpADBuildDN: AzpADGetCNForDN failed: %ld
AzpADBuildDN: AzpADObjectContainerRDN failed for %ws: %ld
AzpADBuildDN: AzpGetCNForDN failed: %ld
AzpGetCNForDN: Failed to quote RDN for object %ws: %ld
mayContainsystemMayContainschemaNamingContextdefaultNamingContextsupportedCapabilities1.2.840.113556.1.4.1851msDS-Behavior-VersionNTSecurityDescriptor1.2.840.113556.1.4.801AzpADReadNTSecurityDescriptor: AzpADBuildDN failed: %ld
AzpADReadNTSecurityDescriptor: Failed to perform search on %ws: %ld
AzpADStampSD: Failed to update security descriptor on %ws: %ld ldap Error:%ld Extended Error: %ws
1(&(objectClass=msds-azapplication)(msds-azapplicationname=%s))(&(objectClass=msds-azscope)(msds-azscopename=%s))z
0IAzScopeGetProperty: invalid prop id %ld
AzTaskGetProperty: scope is delegated - bizrule not allowed %ld
AzTaskGetProperty: invalid prop id %ld
AzpTaskSetProperty: Must set language before bizrule
AzpTaskSetProperty: invalid language %ws
AzpTaskSetProperty: invalid prop id %ld
AzpOperationGetProperty: invalid prop id %ld
OperationHash: objects already in hashAzpOperationSetProperty: Operation Id too small %ld
AzpOperationSetProperty: Operation ID %ld is already used.
AzpOperationSetProperty: invalid prop id %ld
Ref by operation idlist<T> too longAzpCheckOperationCache: Operation cache avoided since interfaces passed in
AzpCheckOperationCache: OpCacheSerialNumber changed from %ld to %ld
AzpCheckOperationCache: Parameter count changed from previous call %ld %ld
AzpCheckOperationCache: Parameter changed from previous call
AzpCheckOperationCache: '%ws/%ws' found in operation cache
AzpUpdateOperationCache: No operations to cache
AzpUpdateOperationCache: Added '%ws/%ws' %ld to operation cache
Scope CacheOperation CacheAzpPersistReconcileOne (by guid): AzpPersistReconcileOne: ObAddPropertyItem failed %ld
AzpPersistReconcileOne: %ws %ld 0x%lx 0x%lx
AzpPersistReconcile: Cannot refresh object: %ws %ld
AzpPersistReconcile: Cannot reconcile object: %ws %ld %ld
MSSQLSYSTEM\CurrentControlSet\Control\LSA\AzRoles\ProvidersAzpPersistDetermineProvider: Open Provider reg key at 'HKLM\%ws'
AzpPersistDetermineProvider: Cannot open Provider reg key at 'HKLM\%ws' %ld
ProviderDllAzpPersistDetermineProvider: Cannot open Provider reg value at 'HKLM\%ws\%ws' %ld
AzpPersistDetermineProvider: Cannot load libary '%ws' %ld
AzPersistProviderInitializeAzpPersistDetermineProvider: libary '%ws' does not export '%s': %ld
AzpPersistReconcile: Cannot reconcile object: %ws %ld
AzpeCreateObject: Cannot find Object Head: %ld: %ld
AzpeSetProperty: Property ID for non-scalar: %ld
AzpeSetObjectOptions: bad options mask 0x%lx
AzpeGetProperty: Property ID for non-scalar: %ld
AzpeGetDeltaArray: invalid prop id %ld
AzpeAddPropertyItemSid: called from submit: %ld %ld %ld
AzpeAddPropertyItemSid: invalid prop id %ld
AzpeAddPropertyItemSid: SID not valid
AzpeAddPropertyItemGuid: invalid prop id %ld
AzpeGetObjectByGuid receives NULL parameter pFoundObjectHandle.
AzpGetChildGenericHead cannot find the child list head for type=%d.
%AZ_CLIENT_DN%AzpParseLDAPUrl: NULL Pointer
AzpParseLDAPUrl: URL is %ws
Error allocating memory
AzpParseLDAPUrl: url doesn't begin with ldap://
AzpParseLDAPUrl: Host name missing
Error unescaping host name: %ws
Error unescaping DN:<%ws>
AzpParseLDAPUrl: missing DN
*AzpParseLDAPUrl: missing Attribute
baseonesubAzpUnEscapeString: InternetCanonicalizeUrl NULL Param
AzpUnEscapeString: Out of memory
AzpUnEscapeString: UrlUnescape failed with %x
AzpUnEscapeString: First call to UrlUnescape failed with %x
AzpGetCurrentUserSid failed: Status = %x
AzpCaptureString: NULL not ok
AzpCaptureString: zero length not ok
AzpCaptureString: string too long %ld %ld %ws
AzpCaptureString: SID not valid
0x%lx: 0x%lx: Free old array
0x%lx: 0x%lx: Allocate array
AzpSafeArrayPointerFromVariant: parameter is not an array 0x%lx.
AzpSafeArrayPointerFromVariant: Array %lx isn't single dimension array
AzpSafeArrayPointerFromVariant: Array isn't array of VARIANT 0x%lx %lx
AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_REFERRALS failed: %ld
AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_AREC_EXCLUSIVE failed: %ld
AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_DNSDOMAIN_NAME failed: %ld
AzpADPersistOpenEx: ldap_get_option for LDAP_OPT_SSL failed
AzpADSetLdapEncryptionOption: ldap_set_option LDAP_OPT_ENCRYPT failed: %ld
(null)%s<Invalid Sid>0x%lx %ld (%ld) %ws: %s
[AZROLES] %02u/%02u %02u:%02u:%02u HANDLEOBJLISTINVPARMPERSISTOBJREFDISPATCHACCESSDOMREFXMLADSQLSCRIPTCRITICALFUNCALLUNKNOWN[%s] Error Message:
WideCharToMultiByte failed
Failed to create log entry: StringCchVPrintfA failureAzManSQLProvider::Initialize: NULL pwszConnStr.
AzManSQLProvider::Initialize: Not enough memory for db instance.
AzManSQLProvider::Initialize(): Database::Open() returned 0x%08X.
AzManSQLProvider::Initialize(): Not enough memory for db connection.
AzManSQLProvider::Initialize(): SqlConnection::DriverConnect() returned 0x%08X.
AzManSQLProvider::Initialize SqlConnection::DriverConnect returns 0x%08X.
AzManSQLProvider::Initialize(): FAILED to initialize AES crypto provider Error 0x%08X.
AzManSQLProvider::NeedsReconnect(): SqlConnection::NeedsReconnect returned %d.
masterFAILED to initialize SHA256 hash algorithm Error 0x%08X.
CryptHashData FAILED Error 0x%08X.
CryptGetHashParam FAILED Error 0x%08X.
AzMultiValuePropertyBuffer::NextPage is out of memory.
No object can be found for guid=[%ws] in the visible tree.
No object can be found for the given guid.
=%d%wsAzMultiSidBuffer::NextPage is out of memory.
|UuidCreate failed.
AzpeGetProperty failed.
AzObjectRecord::Initialize failed.
AzObjectRecord::PopulateObject receives NULL objectHandle.
Fails to set property (id is %d) to value %wsFails to set property (id is %d) to value %dAzObjectRecord::PopulateObject failed.
ContainerRecord::Initialize failed.
RoleRecord::Initialize fails to allocate memory for SID.
TaskRecord::Initialize fails to allocate memory for Bizrule language 
TaskRecord::Initialize fails to allocate memory for Bizrule Path 
GroupRecord::Initialize fails to allocate memory for Bizrule language 
GroupRecord::Initialize fails to allocate memory for Bizrule Path 
GroupRecord::Initialize fails to allocate memory for SID.
1!defighSELECT count(*) FROM sysobjects WHERE name = 'AzMan_AzAuthorizationStore' and type = 'U'
QueryChildrenUpdateTimeStamps fails for action=%d and objectType=%d.
ObjectTimeStamp::GetUpdateInformation failed.
QueryObjectUpdateTimeStamp has NULL parameter pRowTimeStamp.AzManSproc::Fetch failed with error: %d.
QueryObjectUpdateTimeStamp failed.
QueryChildrenUpdateTimeStamps has NULL parameter pTSMap.QueryChildrenUpdateTimeStamps failed to allocate memory.
Invalid Stored Procedure Object: no ObjectRecord.
QueryChildrenUpdateTimeStamps failed.
StoreTimeStamp::GetUpdateInformation failed.
SqlStoreHasUpdate has NULL pPersistContext or pbNeedUpdate parameter.
AzpeSetObjectOptions failed.
Enter PopulateObjectSingleValueProperties.
PopulateObjectSingleValueProperties: objectHandle = NULL is invalid.
PopulateObjectSingleValueProperties: pSproc = NULL is invalid.
AzManSproc is invalid: No AzObjectRecord object.
Leave PopulateObjectSingleValueProperties. return value: 0.
Leave PopulateObjectSingleValueProperties. return value: %d.
Enter PopulateObjectOptionalValueProperties.
PopulateObjectOptionalValueProperties: objectHandle = NULL is invalid.
PopulateObjectOptionalValueProperties: pSproc = NULL is invalid.
Leave PopulateObjectOptionalValueProperties. return value: 0.
Leave PopulateObjectOptionalValueProperties. return value: %d.
PACL parameter for SqlLoadPolicyUser is NULL.
Policy user type is not supported %d.
Object of type %d does not support the action %d.
AzManSproc::Execute failed.
AzManSproc::Execute failed with error: %d.
There are too many policy users for an ACL to hold.
AddAccessAllowedAceEx fails.
Error reading users of type %d
SqlGetObjectSecurityDescriptor has NULL PSECURITY_DESCRIPTOR.
InitializeSecurityDescriptor failed.
SetSecurityDescriptorDacl failed.
SqlGetObjectSecurityDescriptor failed.
SqlGetObjectSecurityDescriptor failed %d.
AzpeSetSecurityDescriptorIntoCache failed %d.
SqlLoadAcls failed.
GetAclInformation failed.
CollectSids: duplicate SID.
CollectSids: set::insert failed.
AzManSproc::Execute failed
AzManSproc::Execute failed with sqlStatus: %d.
SqlUpdatePolicyUser failed.
SqlUpdatePolicyUsersByAcl failed to allocate memory.
SqlUpdatePolicyUsersByAcl failed.
AzpeGetSecurityDescriptorFromCache failed.
GetSecurityDescriptorDacl failed.
SqlUpdatePolicyUsers failed.
SqlLoadPolicyStore receives NULL pSqlPersistContext.
Error to create a database %ws that already exists.
Error setting MajorVersion.
Error setting MinorVersion.
Error setting default options.
Error to open database %ws that does not exist.
SqlLoadPolicyStore failed.
SqlLoadPolicyStore succeeded.
SqlProviderInitialize receives NULL parameters: %d.
SqlProviderInitialize receives lower version number in AzrolesInfo: %d.
Both OldSqlContext and sqlUrl being NULL is invalid.
SQL URL does is not valid: it does not contain a database name information.
Out of memory when allocating connection string.
Out of memory when allocating PAZP_SQL_CONTEXT.
Out of memory when allocating AzmanSQLLayer.
AzmanSQLLayer::Initialize failed.
SqlLoadPolicyStore
SQL provider is invoked without mssql prefix "mssql".
://SQL provider URL is missing %ws.
SqlPersistIsUpdateNeeded called with pbIsUpdateNeeded = NULL or pSqlPersistContext = NULL.
SqlPersistIsUpdateNeeded failed.
SqlPersistUpdateCache has updates.
SqlPersistUpdateCache has no updates.
SqlPersistUpdateCache failed.
SqlPersistUpdateChildrenCache called.
SqlPersistUpdateChildrenCache failed.
SqlRemoveSqlRoles receives NULL SqlConnection.
AzDatabaseSproc::Create fails with SqlStatus=%d.
AzDatabaseSproc::Execute (AzMan_SPD_SQLRole_ForObject) fails with SqlStatus=%d.
SqlPersistDelete failed.
BeginTransaction returns: %d.
CommitTransaction returns: %d.
RollbackTransaction returns: %d.
SqlPersistSubmit receives NULL PersistContext.
SqlRemoveSqlRoles failed.
SqlSubmitShallowProperties failed.
SqlSubmitOptionalProperties failed.
SqlSubmitMultiValueProperties failed.
SqlUpdateStoreStateInfo failed.
SqlPersistSubmit failed.
GetStoreProcedure fails.
SqlCreateObject receives NULL sqlPersistContext or NULL ppSproc.
Object of type = %d does not support action %d.
AzManSproc::Execute partially succeeded. Check Sproc %ws
SqlExecuteNonQueryForObject failed with error: %d.
SqlExecuteQueryForObject receives NULL sqlPersistContext or NULL ppSproc.
PopulateObjectSingleValueProperties failed with error: %d.
PopulateObjectOptionalValueProperties failed with error: %d.
AzpeClearPropertyItemList failed: propID=%d, ObjectType=%d, ObjectName=%s.
AzpeClearPropertyItemList fails for property (id is %d).
Fails to set property (id is %d).
SqlLoadMultiValues failed.AzpeAddPropertyItemSid: set::insert failed.
SqlCreateChildListShallow failed.SqlCreateChildListShallow failed with error: %d.
SqlCreateChildFromRecord receives NULL ppObject or NULL pSproc parameter.
AzManSproc does not have AzObjectRecord.
Fetch fails.
AzpeGetObjectByGuid fails.
AzpeCreateObject fails.
SqlCreateChildFromRecord failed.SqlLoadChild failed.SqlLoadChildren (Loading type: %d.)
Failed to allocate memory for object list.
SqlLoadChildren (Type being loaded: %d.)
SqlLoadSpecificChildObjectShallow failed with error: %d.
Child object of type %d starts recursive loading.
SqlLoadMultiValues failed with error: %d.
SqlLoadObjectOptionalData failed with error: %d.
SqlLoadChildren failed with error: %d.
SqlLoadChildren failed.SqlLoadChild failed.
ObjectTimeStamp allocation failed.
AzpeGetObjectByGuid failed.
SqlRefreshObjectsByTimeStamp failed.
AzMan_SPS_Get_ObjectSecurityOptionAzMan_SPS_Get_AzApplicationAzMan_SPS_Get_AzScopeAzMan_SPS_Get_AzTaskAzMan_SPS_Get_AzOperationAzMan_SPS_Get_AzRoleAssignmentAzMan_SPS_Get_AzApplicationGroupAzMan_SPD_AzApplicationGroupAzMan_SPD_AzApplicationAzMan_SPD_AzScopeAzMan_SPD_AzTaskAzMan_SPD_AzRoleAssignmentAzMan_SPD_User_From_RoleAzMan_SPI_AzApplicationAzMan_SPI_AzTaskAzMan_SPI_AzScopeAzMan_SPI_AzRoleAssignmentAzMan_SPI_AzApplicationGroupAzMan_SPI_Add_User_To_RoleAzMan_SPS_Enum_AzApplicationGroupAzMan_SPS_Enum_AzScopeAzMan_SPS_Enum_AzTaskAzMan_SPS_Enum_AzRoleAssignmentAzMan_SPS_Get_Role_For_ObjectAzMan_SPS_Get_DBOwnersAzMan_SPS_Enum_AzApplicationGroupUpdateTimeStampAzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStampAzMan_SPS_Enum_AzTaskUpdateTimeStampAzMan_SPI_Create_SqlRole_For_ObjectAzManSproc::GetStoreProcedure receives NULL pSproc parameter.
AzManSproc::Initialize receives NULL objectHandle.
AzObjectRecord::NextPage fails.
AzManSproc::AdvanceDataBuffer called without AzObjectRecord member.
AdvanceDataBuffer fails.
AzManSproc::BindParameters for action=%d and childType=%d.
Stored Procedure %ws does not support parameter of ID=0x%x.
Stored Procedure %ws does not support result parameter of ID=0x%x.
Negative SQL return code 0x%x is interpreted made positive.
AzMan_SPS_Get_AzAuthorizationStoreByNameAzMan_SPS_Get_StoreIDByNameAzMan_SPS_Enum_AzApplicationsAzMan_SPI_AzAuthorizationStoreAzMan_SPU_AzAuthorizationStoreAzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStampAzMan_SPS_Enum_AzApplicationUpdateTimeStampAzMan_SPD_AzAuthorizationStoreAzMan_SPS_Enum_AzOperationAzMan_SPI_AzOperationAzMan_SPU_AzApplicationAzMan_SPD_AzOperationAzMan_SPS_Enum_AzScopeUpdateTimeStampAzMan_SPS_Enum_AzOperationUpdateTimeStampAzMan_SPU_AzScopeAzMan_SPU_AzRoleAssignmentAzMan_SPI_AzRoleAssignment_Multi_AppMembersAzMan_SPI_AzRoleAssignment_Multi_SidMembersAzMan_SPI_AzRoleAssignment_Multi_OperationsAzMan_SPI_AzRoleAssignment_Multi_TasksAzMan_SPS_Enum_AzRoleAssignment_AppMembersAzMan_SPS_Enum_AzRoleAssignment_SIDMembersAzMan_SPS_Enum_AzRoleAssignment_OperationsAzMan_SPS_Enum_AzRoleAssignment_TasksAzMan_SPS_Get_AzApplicationGroup_LDAPQueryAzMan_SPU_AzApplicationGroupAzMan_SPI_AzApplicationGroup_Multi_AppMembersAzMan_SPI_AzApplicationGroup_Multi_AppNonMembersAzMan_SPI_AzApplicationGroup_Multi_SidMembersAzMan_SPI_AzApplicationGroup_Multi_SidNonMembersAzMan_SPIU_AzApplicationGroup_LDAPQueryAzMan_SPS_Get_AzApplicationGroup_BizruleInfoAzMan_SPIU_AzApplicationGroup_BizruleAzMan_SPS_Enum_AzApplicationGroup_AppMembersAzMan_SPS_Enum_AzApplicationGroup_AppNonMembersAzMan_SPS_Enum_AzApplicationGroup_SIDMembersAzMan_SPS_Enum_AzApplicationGroup_SIDNonMembersAzMan_SPU_AzTaskAzMan_SPS_Enum_AzTask_OperationsAzMan_SPS_Enum_AzTask_TasksAzMan_SPI_AzTask_Multi_OperationsAzMan_SPI_AzTask_Multi_TasksAzMan_SPS_Get_AzTask_BizruleInfoAzMan_SPIU_AzTask_BizruleAzMan_SPU_AzOperationAzMan_SPD_SQLRole_ForObjectAzMan_SP_Grant_PermissionAzDatabaseSproc::PrepareParameters failed.
AzDatabaseSproc::Create failed.
=L9o<{Oyz)$܁u)
dv))l5555556=6X6s6667:7]7778?8o8888(9P9k99999":E:h::::;';Z;u;;;-<P<{<<<<<=/=J=e=====>9>^>>>>?e????9@^@@@@'ARA}AAAA)BLBqBBBBCECjCCCCD>DcDDDD	E-EHEcE~EEEEF+FVFyFFF
G8G[GGGG"HEHpHHHHHIJIpIIIIJJJ6KKKL4LYLtLLLL$MJMzMMMN<NRSDS;3`W=F=azroles.pdbGCTL".rdata$brc2.rdata$T$brc2.CRT$XCA2.CRT$XCL2 .CRT$XCU2.CRT$XCZ2.CRT$XIA2.CRT$XIAA2.CRT$XIZ2.CRT$XLA2.CRT$XLZ2.gfidspM.giatsM2.rdata\.rdata$sxdata܁.rdata$zzzdbgp.text$di D.text$mnd5.text$x`N.text$ydO.tlsO.tls$O.tls$ZZZ O$1.xdata$xDATL$__aHATL$__zL.didat$2L .didat$3l.didat$4P.didat$6.didat$7.edata.data$brc.data$r$brc
.datap.bss.idata$5.00cfg.idata$2.idata$3.idata$4hF.idata$6.didat$5@.rsrc$01@H.rsrc$02$ĵoOx
$h`NnY̡DTd̝ܝ $(̡TPdTX\`̡DtTxd|l̡DTd,<L̡Tԟd؟̡DTd̜ܜ̡DT<L \$l(|,04̹IMhN`Y̹D)My%@hN5Y̹Lx
Ц(hNY13@t;t
t23@;t
t2ËV>t6&f^ËUS3VVSj^^^^^^^`Pu9]t[MQff;u+hMjZY3ɋQ诠FYYuhpOh@YYuӋ^[]VW39~tvY~9~tv谙Y~9~tv蟙Y~9~tv莙Y~~9>t6j\P>9~t	v_Y_^ËUVu3Wt3A$Ћjuu3F_^]VNVY^US3VW9uj_{u
@}f93Qff;u+hMjZq3ɋQ'CYYu
W֋hMjC3YYtFFFFFuMsQHt54t%Q3C	tQ_^[]UQESVW3ΉUt'RjY}tMu	؋utu3F_^[]SVW^;tS0j`P_PtzVYxt
pQn"jpjpjp3XPt.ujjjl3TPt3	._^[UQESVW3ɋمf9_9tS0j`Pqu3ҍNff;u+EhMh詜YYus33QfEPuSVuQwPP
t2jjjlwTPt3ҋ	tSYu_^[]VW39~t0vLPvj\Qjf_^j(l5ݠF3ɋىM]E܉MЉMԉMEMNQω}uWhOh@URehOh@YYMQsM{tcEPN؅u!E`KQvj`Pω}bω}l{ω}Qt_EPNX؅u9XtzjpjmvTPω}
ubWhPh@]3BLWhPhWh\P
cWhPh@3ۃCh(Qh@jYY뱋]Ӌtu`eMeQN؅tFEPMz{Etsj\QJECNEPI؅u}~tvj\PE܉FEE܅tPj\PePj\PEPMu܍MEUQjjEPhqHw3}Ph\Qh@)3@]ËU3ʼnESVxPS|PjvDP#!Q|Wf3f;uftfPf;Qufu܋xPS|PjvDP|Qff;u+
j.Xf9Eu|f9EuvlPpPtP|hQPuGt;w8p;w.lw ȁɁ@@_M^3[F]ËUV3W}9utWu@<G7Gt0PStSQXtQIPCYw[_^]3QQQQQ $,048̋UVJEtVďY^]̋UVBEtV莏Y^]VW5,99_^UQESVW3ΉUut(RjY	ktMuII؋:utu3F_^[]UQQVW3VuGPjwP[uSM(QFuq8Pp,Pp(Pp0Pp4Pp$Pp Pp֋uPVw|P
t EP
؅$[_^]ËUQQVW3VuGPjwP'uSM<QFuq$ft~ftxftrp8Pp,Pp(Pp ֋uPVwxPxu&uLJ<EP,؅>[_^]ËU$eEeSVWM3MP؉]bj_Fup$f;tft
f33hMjEВE}YYt3GG3}}܅Ep MEhjMQhPuEuptȋE@#EEfts3Bf;Jt=vEMɃt;u	HEhMj؉FEYYt
 ``3FD؉F39OtvEtuCSQE3ɋMv6P,MNMvuߋM}utu33fL3	7u?t7WqYu}SVpj_MEP	؉EtAuQM@?t7yW
Yu@3_^[]̋UEVWwGVpj`Ppu&lOWu@G3t׋tŋtp֋#_^]V,NtVjw~tvj\Pf^ËUeESVWP}g,t'q֍EPuދ}wlP8tu9<tSdt7t,ejq֍EPuwpP_^[]UVWjuvhP%u8tvpPt_^]̋UQQSVWj^D$tu
@j
^J@eAEff;Eu+Mt4VF;v
@DsЋt
hQTO
hQG@JtYhQ5thQ u3Qff;u+3hRfDKhR3_^[]ËVWjFPvhP)u8tvpP_^̋VWjFPvhju8t	vp_^ËU$3ʼnESVWj_W3ۉ^CPhPPEPSRQfE8SE8SE8SE8SE8S=	wHu=EX=GM=%BQMQP4uC
PEPhRjuMF_3#^[N]ËUUSVWj3J_ff;u+3hM4U>QYYuj^Vh0RhEQuuhRVWy&W2tVWhhRh3WY_^[]UVqjujmvTP	^uY3]UQQESVWhRPu3Mul؅u
`$SupSuEttPxuuj^EMPW
_^[]UQQS]VW3MU;]ǃt]tMtusF<
ul?<Ot<ouyF;ut<
t<
t< t<	ubj_RS]uJMU0F<
u)3%<	t<
t~4<
~< t<Gt<gu$j_UF;unuS_^[]F3GߋUSVu+ut^WhM3ɍFjZQوYYuj^3VWVujjhu`3fGWWY_^[]UQSVWhMh@聈EYYt3uj[Fvp֋6؅uuo؋j0_^[]x ~tujXj
X3jXWt!VGppwwYYu^gg_ËUVhMj蔇YYt&bFFtPVEFVB^]UyUtuA@t@3]U3tvWx}vWuuQ	t3f]UEV3t=vWx7S]3WxEPuWSx;wu
z3f{_[tM3f^]3ËUSVW3WtvxFt
f98tu+ǁ#xhu+Qy6_^[]WtVGPp@wYu^gg_ËUt)EVu+Wt<ftf9Nu_^uҁ3fz]U3tvWxhuQ	t3f]U3@9Eu*u=}u
*讥]39̋U](̋UVW=@t92wjօx+wj֋} x$?uQQ&_^]̋QQ̋UMUuu;]̋UMUuu]̋UMUuu"]j5TMu
@3j(uEE|Ytc{j3YC 3 Ëu]MtQE{ωC$Ux3uuuS0֋tSo|Yj5苈UMEu
@ eejD}{Yt*cK?ECĵC @3Ë}]MtFK|x3xuuuS0֋tjr֋)j5赇Uuu
@&eej8]{Ytwĵt@3§Ëu]}Mt@O؅x3ۅuVu0W֋؅tjp,֋kj5UMEu
@ eej\}SzYt8cKduECĵC@CPCL@3Ë}]MtFKx3xuuuS0֋tjr֋臅j5Uuu
@&eejP]ryYt&tĵxGG@3rËu]}MtCO؅x3ۅuVu0W֋؅tj֋踄j6DUMuu
@&eej8}xY]Et/cCtEpECĵC(@3TËu}]MtDK&x3xuVu0S֋tjr֋Ճj=6aUuu
@&eej,]wY}EtoĵL@3Ëu]}Mt@O]؅x3ۅuVu0W֋؅tjp$֋̋UuM,u:]̋UVuWN_ut(VwYu	ĵH_^]̋UMIu

ĵA]̋UEVu@uP1^]̋UEV@Pq^]̋UEV@Pq^]̋UEVu@uP1^]̋UEV@Pq^]̋UEV@Pq^]̋UUu@AMW3:StM
VQp^RQM,IC_]̋USW}O_؅u,
ĵAtVjr^ĵH_[]̋UMI]ĵAH;̋UuM,u]̋USW}O؅u,
ĵAtVjr,^ĵH_[]ĵtAH馑̋UUu@AMW3:tM
VQp^RQM@,I_]ĵdAH-őUuM@,uz]̋USW}O؅u/
ĵAtVj^ĵH_[]̋UMI]ĵxAAAHvn̋UUu@AMW3:tM
VQp^RQM,I_]ĵtAHkl̋UuM,uJ]̋USW}Oo؅u,
ĵAtVjr$^ĵH_[]ĵLAHk̋UVEtVqY^]̋UV_EtVqY^]̋UVEtVtqY^]̋UV'EtVDqY^]̋UV{EtVqY^]̋UVEtVpY^]VW
V;t1;u_F^̃l$|̃l$ỹl$ñl$l̃l$&}̃l$p̃l$m̃l$p̃l$&q̃l$Vr̃l$vw̃l$l̃l$ñl$&ñl$m̃l$&l̃l$vl̃l$6p̃l$l̃l$̃l$Ṽl$q̃l$ṽl$k̃l$̃l$fm̃l$l̃l$6p̃l$Ṽl$k̃l$F{̃l$Vx̃l$j̃l$̃l$6w̃l$z̃l$Fx̃l$vṽl$6̃l$̃l$l̃l$k̃l$Fõl$f̃l$Fx̃l$w̃l$Fz̃l$Vw̃l$ĩl$Võl$6ṽl$ỹl$Fw̃l$vũl$x̃l$k̃l$&j̃l$õl$x̃l$Vz̃l$Fw̃l$ṽl$̃l$vñl$x̃l$fs̃l$ñl$6õl$&x̃l$̃l$Fw̃l$ũl$k̃l$6̃l$h̃l$r̃l$fm̃l$x̃l$ũl$t̃l$k̃l$&ĩl$F̃l$vṽl$6t̃l$j̃l$Vg̃l$6ñl$m̃l$ĩl$&x̃l$w̃l$6t̃l$s̃l$k̃l$Fh̃l$ĩl$h̃l$m̃l$vl̃l$g̃l$Vṽl$r̃l$Vh̃l$&m̃l$l̃l$h̃l$ṽl$&ĩl$g̃l$ĩl$j̃l$l̃l$k̃l$f̃l$vh̋U]UuuuuQ]U}tuu]̋UEu@3]̋U]UuuuuQT]U}tuu0]̋U]UuuuuQ]U}tuu]̋U ]FUuuuuQ ]U}tu up]UV3ҋFt9Vu
uЋFt&u(0u$u N,uuuuPV,Ћ^]$̋U@]U3VW~t9Fuu~υtrFEStN}uHEȉEvȃMx,k]C;uPu3Vyt,Myu7uuN(WV([_^]MkLE3̋UuuuuQ@$]UjhX6dPV3PEd	tQp֋Md
Y^]ËUQQESVWuIt:2ۄu4'tWhHWQ0օtSp֋_^[]teEe1PhPXQ3EPhPXSEM;EMEdjs6qى]uWZ3j}!eYȉEË]3ωMu)EsVAEKVHCpj6p}tCOtQpփgGteph 6jPjVdYg:p̃!aIj$6pM]MQSpօE3uP,EUԉPx3ɉ}jZ3PcYEEt Mԍph hPQjVun}MÃM3]uuuSpLָE׉U9xNM܉yE93PRSNVx}}WWWEE3PEN00SV0x3u܋MMЉ}F;t
PEЉFPMFMQSpPփMuUԋEBM܃UԉM;PJMEu؉ASpL3Vnh$7n39Ot9Ot3$5ĵVMG@ƅ!еWtff9Gu[f9G
uUhP5=}PPPuG
PGPR؅.EQ70PNV؅tPq֋E0Qh8WPxP
ĵGAW#EtPqEtPq֋PqEtPq֋G3ۅtu
PVlUVW}u@1N3u
uNNtQp3_^]U}tu@u]̋UU@t3"}MtuEVRQp$u^]̋U}ĵt@H3]ytQAËV1W;tV;t1;uF;u_^39u9Auyu
yFu@ËUQQSVW]u
@#MtzWp։;3azFGEtULt+Et0wSuVUt#}tx?u@
댸W_^[]VqSxF^ËUQQVW=@tD?t?wj֋wjօx~$?uŅxr5̵tօxZ=ئ3
ܦFT$t9rj֋t$Ћ,x vjօx

ܦ;r_^]U3ʼnESV3ۉXW`\t6Mu(\PhWjShM\Ë؅tVq֋M_^3[b]dwdQj`9]t4\P0uNVNVy0\뀃\P0uNVN V XXj9]<j@tP`hX@VPtPVPhWVPXLQhSP`QPHX u_X`SSSSSSSPSSSVTt
VT#u9`uPHRhXWPtPWPhXWPHTPhSTPW uvÅtVTu_SSSSSSS`PSSSVDt
VD#u9`uPHYHtVtW@(\U83ʼnEEVu*"SW38SPQ>u	;u
zfft*f.t
f\uPfu݅uVPy_DX}+Af=v@TEP+PSPxPu_[@M3^)^]U3ʼnES3VWPPW؅Q3SS8SjPO$W$9VPVhP3fEf9t*3S\t
/t:uf90uދ+ssc3f=PSVtPyVM_^3[\]_̋SQQUkl$QQ
ܦ3VW=ئ;sOUt;rjօx\ujv֋ЋE9x:
ܦ;rx)
Ԧx5ȵt5_^][;uA;BuA;BuA;Bu3@3ËV~t6F^ËUE8u_Vuu@O&3Wx@E;St9stnu&E;r}[?_u	u^]{97u7EPE397usWhPXs֋u}tWu0Q֋뉋}녋UQW}u
@'SV5@3ۅt}9^tMu$u_FE9u:h3ۍF9uPhPXvv֋hEtWu0Q֋؃?uuUЦWu_^[_]VW=@t4-OtQp֋w ΃gjփ$?u΋=ئܦ7tv j֡ܦ;r_^VWt&==@tw j֍$?u=ئܦ7tv j֡ܦ;r_3^̋UjujeZ]̋UjujuZ]UQSW_;tcVt7t^Ct$؋3s֋sSSYu_cgO(tQp֍GP#^_[]ù^̋UV`EtVRY^]3@A@̃AH̋A̋US]u@?VW3q(9>uVh`XjWh`OxQr֋_^[]̋UEVhpXhtXPq^]̸@Uh
3ʼnESVuW3DžjY3󫍍rƅtvPPvu獅P353WPVuw
B;u
z)PtS;txj"^fP!u	@Qff;u+fMM3f
PhXPPhXP9]tjShXPPlM_^3[0U]VX̋UuUuM]̋UEt @]3@3̋UVEtVOY^]V>t6&Y~tvfYf^ËVW3G~,x4;}04NY;w} G4NGFY;|ԋ_3^ù̋UVuW~WNW_^]VVFxtP@NIN^jhS\3uQE3Ɂ8ËeuE\ËUSV3St0W}ft#fqj'Xf9uC;sFj'XfqF;r_3fq^[]UVM%EPuhV^]u3ÍQffu+ËV6M&Y^ËUVjF@P6tHFj@Pvt/VFt
EFtEF3@3^]j$:7XMЋE@}63j]Q_ff;u+ʉuuM3ɉEQKYEËE3j_މEM}}3ɉujZEEEQKEYuE]E}܋uEutQtMMQuQP	EPuPV	MЍEPEPhu
x33VLKWFKYY3Vj]7V}tL}tFu~WeueNu]WMW]V1YÍA9ËUVuYt^]t`~
qjjjQËUQSVWGPE3ۋ9_~Gu4t	F;w|tx;w}Gu_^[]̋USVWMA;;w;|6?u;}jYwdrw]PwtOGwxC;}?+;7GuP6PuPQ_73ҋGfH3@3_^[]j\7)UuEE3ۉQff;u+	d}jYE];wrwPEt3fÉ]]u
7fj%Yf;Vj%Zf9ujPE+Q7Ej PHOEPЅ]Eqff;u+QRMM]!7u97t#7;ujVM
77f@	EM]u@%SV3Wfu3(ftf;tQfu_^ËUQQUSVWtI3EύAEff;Eu+MA<O4NuVRj3Pu3$_^[]@̋VRY>u^ËUjh7dPQ(!X3ʼnESVWPEdeEEEP&3ۋ4@-PtFr	4D-Pj_6	+3-?fQff;u+ʉA]E;jr	_=vP] 3ۉ]j_t{ft@Pȋ\uj0Xf9u3Qffǃf9븋3j_;A1PSSPyjPjS0$YQff;u++‹EEv<W44Ë3ۋu@"WSPU~u}Ǚ+‹j0Yf;r(9v@vFv`vfwW70ӋǃjY+ȋG;|WjS0$9tL?Qff;u+MPPjS0$t	/,x3Md
Y_^[M3G]W̋UE]UQQMhPM̅t,t t"tPt@WËU S3ʼnEVW}f?=u/Wqx'g
PXxWLx3M_3^G]UV`-6ut-|3@3^]U$3ĉ$ S]D$VWP3hQS7L$ L$$L$(L$0 9t$tt$D$D$urL$ QVVVL$(QL$<QVP+D$(PL$juHD$ PVVVD$(PD$<PVt$(D$8tÃ|$tt$t$S||$t
t$$,_^[3E]UQ3ɍEQQQQQQQPQQQuMt3	3;E؋]V>t6&^ËUSV3W9^uE9^u@hZthD[PF SShT[thp[PF~tSSu6~tu6`_^[]~	ɁËUQQSVW3f;-uj' UZf;S3ۉ
f;tnj'[f;uRf;uZj'Xf;uS؉SЋʉ+AF;E~+f3fu3ۋf;t뒋3f;;us~3f7i	r
vR
tM tHSЉE+ӉJN;Ms9~+f3fuE3ҋ]f;t;us	3f3	_^[]Ujh8dPX"O3ʼnESVWPEdM}3ɋىMW5hPOWDžh$OFWtW}3j\Z]xWmt W3t'Wh4Wh<OWuW+hOWPWj=Xf9}tR3EWPP3UE}uet\3PhQQ PV,t	tVWcj\Z9EoPh3QWV utS3PhQWV utStN3PPQhQQQWV(tSWj=Xf9u&3WPP?j{Xf9RύQff;u+13PuSWNWlguuQ3PhQW u.t
S	jXt
DžjWhPWW}j{Xf9u\ύQff;u+u?3PSWy
/WMt}}tES t;PPrStS3ɋىuw3Ƀt:u6P3ɉu*j}Xf92,?tP#	tSƋMd
Y_^[M3<]V
	r
v

t uR^ËU H3ʼnEEVWQP3ɉf;SPp34,Pt
Fr3,P%j{Xf;up}jt;uSPIy2jjSP(0jSPx3f;#	[ƋM_3^F;]h$?8AU3E]ujYQVPEu2VSW؅u

SWttSWp؉C;s.9tjYM;r	=vPE!zË3Eu>SPSVjhȅ3ufHW|9t-?W̋Uh
3ʼnESVuW3DžjY3󫍍|ƅtvPP$vu狍P95hP3Vu~"`=uzDP
tW;txj"^fP%u@Qff;u+fMM3f
PhXPPhXP9}t7tjhXSP*WtWȍWUM_^3[7]?:̋UuUuMx]U,3ʼnESV3W]fEhj@f[@f9u[ufjZjYfuh]hWrMf;ush]hWRMf;uCPh]jYf;u1s^0h^hWM=f	u>h^hWLQ󥥥rƅf fuuhD_hWL8tPVf#fѩ@tfjY+t9t-t!tjY+t^!^^d^D^$^PhWKu4fPoYePV;^Sh^hPKPJ3;jZf;u_Dt7Px0h_hP%Kch_h_hPJAjZf;uth_jZf;u
DPh(_h4_hPJ؅xPI؋@ۋ
ttVttVNjM_^3[3]Vt
q;t3^3@^ËU3ʼnESV3҉uEWf9j[MUQMUQRM]QRPR0`zt/t ;t=	tB
5+uj@EjY؅r	3t9;w1
;r"]*tC>tStcku'C;r 5P֋t	Heap]9;tKtGEPEPVEP3uj0u.`tt	t~t>HeapuV5օt;t3#We_^[M3"1]ËU 3ʼnEESV3UM0Wu
Wj[EuPEuPVE]PVQV4`zt/t ;t=	t
EPj@؋EjYȉM;ur	jt@;
w8;r*(tE<tStcku*MA;r 5P֋t	HeapE@EEEPEPVEPSuj4u-`t~	tv~wl9}tY}?Pj@MtJ}SvVhT_WP脩h`_WPsy!E0E E3t>HeapuV5օtSe_^[M3.]US]VWM33u
WEuPW8uH`t3`t(`=	t`
EuPEPjjjVu8ȋEtXuT@HtJ90uFQff;u+<MWj@ȉtEW@pQ:$3ҋSByS3ҋ}t	u0}t	u_^[]V3F-t?+t4bt(-t+t+t3(!Ɖ
^
u	yfttu	yu3ÃufytWËUQSV3΅W<Kftxǃ r
Ef;EvTEf;Er
Ef;Ev:	t5
t0
t+B;s/(f;wDK$f;wjX3@;r
_^[]jo8o2ڋE3uuuPhh_jqEu
@|}0u
ijh Uu
9}tM!E$$Mo]EPhPXS3W4MEMQhPXP0MWSpMvEMQhPXP0SMWSU,M`2EMQhPXP0MWS\MEMQhPXP0MWSjMjEMQhPXP0MWS܋`MKf]EPhPXS3CWuRM!EMQhPXP0MWuSωMEMQhPXP0MWuSWMLEMQhPXP0pMWuS=fFMLEMQhPXP0)MWuS蓾M.EMQhPXP0MWuSMEMQhPXP0MWuS{tMku~EMQhPXP0u_MWuS8MuBEMQhPXP0u#QMWS胷uME!uWhVuh_VjImMMIg-I d0tG`j8K-U}t,WMpe0Sh_jOlMueMjh 9uu
WUMu
tWЋufMEPVWuUt(sCtt~5*#u,UEPuuuu!E}t
juXhVSh_Vjk+(j8,ڋt.uM'e0Wh4`jkMuMUu}jh 9uuWYUcuDMjuuUt(s"tt~	3hVWhd`Vjj* j8+ڋt.uM9e0Wh`jjMueMcjh 9uuW{UmufMEPjuuUt(s@tt~2' u,Ӌjuuuu!E}t
juVhVWh`Vji)(j8)rt.uMe0ShajhMuutXtSjWuuVpWt(s)tt~	3WVSh4aVjh(UQQeSVWًShlaju3;h9}}Uu
Mthujh MEPujuUhuhajgYYrt,sttTIBu ֋juuuu%!EVShaVjg_^[]W}t"jh juNThuShajf뮋VW3jX;H;P&t<~;&t+W_^Ãd|f~`ijujXܿ0;%;t~./t멁1tÿ;t~~3@묁YQX};"~l럁e+]tv.#;DA~#~jUTSVW}WPhbjډD$@4e3|$<D$D$D$(D$PPD$@P9u$u@Hu$3@PhD$ 9uu
WU_u
M؅T$ ؅T$,MD$$D$PSt$4%؅t:tt|$ہyD$ ?&t*)jXfD$@D$90t3fD$HD$!t$<|$D$ D$8D$8PWju
d$T$$j[t)D$(Pjj4t;th4bjvcYYT$$D$ 398c3ɅL$4L$,t(@L$QL$,yD$D$,L$,D$ t@L$Q48txt$D$,D$PPD$,D$XD$PPD$f\$TPV؅t$D$D$ !\$G;8L$4T$$j[?`$\$!t$<|$\$4D$8D$8PWjd$39;vQC4؅D$PPjXfD$PD$PPD$\$\PV؅uZ\$4D$G;;r t$HfD$@.jXfD$@D$t$jYfL$@D$H}$t$@3ۥ3|$|$t	t$P|$t
t$tVD$PP|$(tD$(P<thtM}$t2u$VSt$8hhbSjaVSt$4hbSjla_^[] UQSVuEWt0VuSuhbj`VuSPh cj`_^[]j,hV5$ى]tu$uӹHcn3}EPjh 9}u
WYUu
A9}$u
@2Mp U؋M}E+t[t8t
Wu`jWu$EPuuGf}E}ajWu$EPuu}CjWu$EPutEuЋ}̋uu։}EWjUM$+t(s=tt~/$33@ËeuE]ԍEPhVShXcVj$_" j0h8VR"ى]tuuӹceEEEPjh }u
WUu
}u
@}u9}tM zbU܋M
M!EjPuEPu؅tE%EEHVUMu\EPuPu``t6`t+`=	t`UMEM#tuЋMucEȋMPjQut'׋t%s:ttnMU33@ËeuE]ԍEP}t	uhVShcVj\_ (UVWuuuujhGu_^] UVWuuuuhpJju]_^] USVWD$L$PL$ujXfD$ E$D$(ӍD$ PuuuK_^[] USVWD$L$PL$ujXfD$ E$D$(ӍD$ Puuu _^[] UVWu$u}(uuutpu_^]$USVWuًShcjZe}u
W'jh UZuPMEPjut(s1tt~#ut3}tuHht?uVSh dVjZ'7M+0VShpdVjuZu_^[]UQSVt)uM0uShdjYujh U>uXuM$u?uUMPg%t(s"tt~	3hVShdVjY^[]UQQeeSVWuًSh,ejX}uWr'3@PhE U^uHMEPjut(s)tt~	E3}tuF}thuVShXeVjX7VSheVjX_^[]USVWuuWhejWjS U{uAUEMPj#t(s"tt~	3SVWhfVjW_^[]UQQeeSVWuًShXfjIW}uWr'3@PhE UuHMEPjuwt(s)tt~	E3}tu E}thuVShfVjV7VShfVjV_^[]USVWuuWhgjQVjS UuAUEMPj"t(s"tt~	3SVWhLgVj=V_^[]U03ʼnES3Uf}	VWME؉EEuM𥥥M(uNEPVFjY3ɉE;r	MtR;wJUЋE;r6E@(̉MtjXStckȉMu9EP;r+5R֋ȉMtoujXHeapȉMtZ3ЉE9FA3uWEPMI؅sttM^34uMj1^f;ΉMMuuJMEDME܋Et:u܍FEff;EuƉu+EuEtuB4uf}uhE@E;Frtc}ujRU}uj}ujR3QM#؅t%jX;3WEtPEt8Heapu5P֋Ǎe_^[M3
]h0(9ىc{jY33ɈK {$MK(hgjRYY3ɋEPhQhgh 3fQQQQDžPPQPPVuhhjRYYPVPhNjjPxiWh[P9ׅyhXhjQYYS(Rh[P9ׅyhhbh(iPjQttPyVù̋UjhP9dPVW3PEdhhijPYYO(tQp֋O$tQp֍O3Md
Y_^]̋UVhijP}YYu@*EH(tuh|0Q֋@VhiVjP^]̋UVhjjP}YYu@*EH$tuhl0Q֋@Vh@jVj8P^]S3VWjc{YK,C(hjjOYYK,>cL_^[ËUjhk9dPVW3PEdhjjQOLYYtjV jwLi<Vw,,e@&MO苤Md
Y_^]̋UuE3jjpLj]̋UuE3jkpLj]̋UuE3j4kpLj]]̋UuE3j`kpLjE]̋UuE3jdkpLj]̋UuE3jdkpLj]̋UuE3jekpLj]̋UuE3jelpLjc]̋UuE3jfDlpLj4]̋UuE3jfplpLj]̋UuE3hlpLjx]̋UuE3hlpLjG]̋UuE3jlpLj]̋UE3VWu umupLj_^]̋UVWE3PEu <mupLjy_^](̋UEMVWu 3Qu`mpLjhGj_^](̋UEMVWu 3QumpLhpJjj_^](̋U$VWPuEt$3ҋmhpLjD$P_^]̋U$VWPuEt$3ҋmhpLj}D$P_^]̋U$VWPuEt$3ҋnhpLjD$P_^]̋U$VWPuEt$3ҋDnhpLjD$P_^]̋UVEuWju3ҹtnhpLjz_^]̋UVEuWju3ҹnhpLj:_^]̋UVEuWju3ҹnhpLj_^]̋UVEuWju3ҹohpLj_^]̋UVEuWju3ҹDohpLjz_^]̋UVEuWju3ҹlohpLj:_^]̋UVEuWju3ҹohpLj_^]̋UVEuWju3ҹohpLj_^]̋UuE3jiopLj]̋UQt(uM輝0uh pjGuVW}L?tbMuTSjS WVuu.S[t(s"tt~	3VhppVjvG_^]̋UQeVWhpjF}YYuWVhpVj-Gu3f9FDu`SjS NDU/u
EfS[t(s"tt~	3QVhPqVjF_^]̋UQS]VuW{W}33f9wDucjh GDjhEM3VVuEG_hhf;_^[]̋UQeVW}uWn3} fuSjS MEPj ZID/SE[ft(s"tt~	3_^]̋U} VtWUWjW Mj ZID	0W_t(s"tt~	3^]̋U}t2}t,VjV MuUIDv.V3^W]̋UVWhqjD}YYLu]MbuOSjS wL/S[t(s"tt~	3VhqVjD_^]̋UVWh(rjuCYYjh }LuXMuJPwL/t(s3tt~%jwL?0u!GLhVhPrVjNC_^]j9EPueEPE3ҹrpLjjEP+̋UE3VWu urupLjhtj_^]̋UuEupL]̋UE3VWu usupLjhptjl_^]̋UE3VWu8supLhvj|_^]j9kEPueEPE3ҹdspLjjEP̋UE3VWu usupLjhpj_^]̋UE3VWu usupLjh0qj_^]̋UE3VWusupLhqjl_^]̋UVWuh tj@jW EPLuWHMu:PuR
t(s"tt~	3WVhPtVjl@_^]U$VWPuEt$3ҋthpLj]D$P_^]̋U$VWPuEt$3ҋthpLjD$P_^]̋UVEuWju3ҹthpLj_^]̋UVEuWju3ҹ(uhpLjz_^]̋UVEuWju3ҹ\uhpLj:_^]̋UVEuWju3ҹuhpLj_^]̋UuE3hupLj]̋UuE3hupLjx]̋UE3VWu u vupHjhtjU_^]̋UE3VWu uHvupHjhptj_^]Ujhk9dPVW3PEdhvj*=LYYtjV jwLB*Vw,e@&MOdMd
Y_^]ËUQSVW}Whvj<C,ȉENjGpDhtRuI֋:t<#t(tt	t~7,%j{LV KL5VCP3M蔋VhvVjc<_^[]̋UE$wujPLRpP]̋UEDwujPLRpP]̋UEdwujPLRpP]]̋UEwujPLRpPE]̋UEwujPLRpP]̋UEwujPLRpP]̋UEwuh PLRpP]̋UExuh PLRpP]̋UE4xuh!PLRpP:]̋UEPxuh!PLRpP"]̋UElxuhPLRpPx]̋UExuhPLRpPG]̋UQeVuuW03MfEQh#xPDRpHx
Mf^]UVWjW uVHNDu8f}NDAstt~W_^]̋UExuhPLRpPH]̋UExuhPLRpPp]̋UE yujPLRpP]̋UE@yVWu PLuuRpP_^]̋UEMVWQPLu \yuRpPI_^](̋U$VWPuEt$xyPLhRpP-D$P_^]̋U$VWPuEt$yPLhRpPD$P_^]̋U$VWPuEt$yPLhRpPmD$P_^]̋U$VWPuEt$yPLhRpP
D$P_^]̋UE zVWjuPLuhRpP_^]̋UEHzVWjuPLuhRpP_^]̋UEtzVWjuPLuhRpPJ_^]̋UEzVWjuPLuhRpP
_^]̋UEzVWjuPLuhRpP_^]̋UEzVWjuPLuhRpP_^]̋UE{VWjuPLuhRpPJ_^]̋UE8{VWjuPLuhRpP
_^]j9EPuEMeQ`{PLRjpPeEP̋UE|{VWu PLuuRjhpPu_^]̋UE{VWu PLuuRjhpP_^]̋UE{VWuPLuRhpP_^]j9EPuEMeQ{PLRj	pPUEP̋UE{VWu PLuuRjhP$pPe_^]̋UE|VWu PLuuRjh $pP_^]̋UE0|VWuPLuRh$pP_^]j9EPuEMeQP|PLRj
pPEEP{̋UEl|VWu PLuuRjhpPU_^]̋UE|VWu PLuuRjh@pP_^]̋UE|VWuPLuRh pP_^]j9EPuEMeQ|PLRjpP5EPk̋UE|VWu PLuuRjh0qpPE_^]̋UE}VWu PLuuRjhppP_^]̋UE8}VWuPLuRhqpP_^]j9EPuEMeQ`}PLRjpP%EP[̋UE|}VWu PLuuRjhupP5_^]̋UE}VWu PLuuRjhupP_^]̋UE}VWuPLuRhPvpP_^]̋UQe}uvuh}j.h(~j.VM W}$u
W'Sjh ]SPKLupEPjusLʞt(sAtt~3(!SLt~WjujsPpu!E}t
ju;h[_Vh~VjQ.^] j93tKuMăuM]贃E60hj-]uMuM]Һ]$u
W#jh }WPOLдusEPjuuwLۡt(sAtt~3(!WLTSjujwP!u!E}t
juhVhVj-. j8K3]t,uMq]0hjR,MuM衹}$u
Wjh ]SPKL蠳uqUEKLPut(sAtt~3(!SL,WjujsPu!E}t
juhVhhVj+ ̋UEMVWu PLQuĀRjhGpPu_^](̋UEMVWu PLQuRhpJjpP5_^](̋USVWuhj*jS }OLuW]WP5uJMu<PuwLt(s"tt~	3SVh4Vj*_^[]̋U$VWPuEt$pPLhRpP}D$P_^]̋U$VWPuEt$PLhRpPD$P_^]̋UEVWjuPLuhRpP_^]̋UEԁVWjuPLuhRpP_^]̋UEVWjuPLuhRpPZ_^]̋UQVut#VM~0h,jn(ueW}trVtg33fBEHDEPjVjDPt4t(sKtt~=2+3f3VPWhdj'W}_t
juVhVj(^]j9[t%uM}0hjj'u3ɉMEMu@Ru܍M3QfE܋EuPK|S|xEuhp\P1֋WhWjQ'MEtPq֋`j9{t%uM|0h4j&u3E]Eu@TURu܋3fE܋EuP֋xEShp\P1֋WhpWjo&MEtPq֋~̋UVWt%uM{0hj%uu3fEEuP֋VhVj%_^]̋USV3h4jfE,%YYjS uu@8&W}WHOD蚬uWDEVPRj
wH`-_SVhVj*%^[]j9kt%uMz0hЄjz$u3E]Eu@oURu܋3fE܋EuP֋x5EjPqP֋uESh0\P1֋WhWjD$MEtPq֋Sj9kt%uMy0hhjz#u3E]Eu
@URu܋3fE܋EuP֋xGEUeRPqL֋u&9EtESh0\P1֋WhWj/#MEtPq֋>j9[t%uMx0hjj"u3!EfE!EM]uQuS֋xlEUeRPqL֋uKMt!EQpփ}t&u܃uS֋Wh@Wj"MEtPq֋̋USVhjb!YYj3SfE uu@8&W}WHODʨuWDEVPRjwH]_SVhVjZ!^[]j":t%uMv0h(j u3E]Eu@TURu܋3fE܋EuP֋xESh \P1֋WhpWj MEtPq֋j":t%uMu0hju3E]Eu@TURu܋3fE܋EuP֋xESh \P1֋WhWjMEtPq֋̋UVWt%uMu0hPjuu3fEEuP֋VhVj_^]̋UEVWjuPLuhRpP
_^]j83t,uM4t]0hjMuM]a} u
Wjh ]SLKH`unUEKHPt(sAtt~3(!SH`WjujsL趫u!E}t
ju
hVhVj̋UQSVWuuhje]$uWmME#uP3EuVPQ֋xEShHP1֋MtQpWhPWj_^[] USVWhjC3YY\$\$QQT$Ou3D$3PD$ȊPuSuhpvS蟳tō#VhVjI_^[]Ujhk9dPVW3PEdh@jHYYt.jV WPOLt
jwHVw(jje@&YjMOpMd
Y_^]ËUQS]VWuShdjG(ȉE)jx>E3GH_Lt$jh >hGPwPMJjVhVj_^[]̋UuUԋjrHrPRLk]̋UuUjrHrPRLS]̋UuUjrHrPRL]̋UuU,jrHrPRL]̋UuUDjrHrPRL諾]̋UuUhjrHrPRL蓿]̋UuUjrHrPRL]̋UuUhrHrPRL]̋UuUȌhrHrPRL]̋UUVWu uurHrPRL^_^]̋UUEVWPu urHrPRL_^](̋USVWuh jQjS }HuW`WPOLßuJMyu<PuwHht(s"tt~	3SVhHVj$_^[]jE:kfut*uMmPQhjqu3E]EuW[MhuKf;MPEupDpH1@u'EMQh(P0uE!}WhЍWjOEEtPq֋\USVuWuVhj3ɉw0L$L$t'jS SG4G4W0O4эL$QL$Qujuh$P3jjT$O
u7W0D$PD$Pujuh$w4L衭t#VhdVjK_^[]UVuWVhjw0t#SjS SG4[g4jhdjj3_^]jh:2ًuVh̎jQeE܃@PetkCS0EPEܹPVjs4e}t4KU0jхy$MtQp
[u3Wh Wj#EPCjH:fM]ShdjEPeuWvj
Y}39}vEȋM4uMG;}rj
Y}39}v0Eȋt *MSgˋuEG;}r3VhVjMEPmUjhk9dPVW3PEdhjLYYt.jV WTOPt
jwLVw,ebe@&TbMOhMd
Y_^]ËUQS]VWuSh,j
G,ȉE$bx>E3GL_Pt$jh 9hGTwTMEbVh\Vj_^[]̋UuUjrLrTRPk]̋UuUjrLrTRPS]̋UuUȐjrLrTRP]̋UuUܐjrLrTRP]̋UuUjrLrTRP諶]̋UuUjrLrTRP蓷]̋UuU0h-rLrTRPH]̋UuUHh-rLrTRP0]̋UuU`h.rLrTRP]̋UuUh.rLrTRPж]̋UuUh0rLrTRP舵]̋UuUđh0rLrTRPp]̋UuUh1rLrTRPƸ]̋UuUh1rLrTRP蕹]̋U$VWPuUt$(h,rLrTRP[D$P_^]̋U$VWPuUt$@h/rLrTRPD$P_^]̋UUTVWuuh,rLrTRP_^]̋UUlVWuuh,rLrTRP_^]̋UUVWuuh/rLrTRP育_^]̋UUVWuuh/rLrTRP螲_^]̋UuUjrLrTRP詶]̋UUVWu uurLrTRP~_^]̋UUEVWPu ؒurLrTRP_^](̋UEMVWu PPQupLjhGpT裮_^](̋UEMVWu PPQupLhpJjpTc_^](̋USVWuh(jjS }LuW`WTOPcuJMu<PuwLt(s"tt~	3SVhLVj_^[]jE:t%uM6b0hju3E]EuW\M{uLf9MMPEupHpL4u'EMQh(P0uE!}WhWjEEtPq֋̋USVWt%uMGa0hj+u}MeQ_S]pL֋x\}tQGDQu0@wLwHPDrZEt*u3fEKduuSd2VhLVj
_^[]̋USVWt%uMg`0hjK
u}MeQ_S]pL֋xZ}tOGDQuȔ@wLwHPDYEt(u3fEKhuuSh2VhVj
_^[]j(:[h,j	YYjh }u
@EU3RP]qL֋9]EPE܉]PEEPűTh/}wDWHwL莣t]EPMEP~MEwuՋ]uhS0֋tEwHZuGDu܋ˋ@@DX#RwH\뵾2hVhxVjUSVW3ۋhj\$\$uw0YYt'jS @SG4G4W0_4ËӍL$QL$QujuhP3jjT$Ozu7W0D$PD$Pujuhw4ԕt#VhVj_^[]UVWhj*}~0YYt#SjS mSF4[f4jhjjP3_^]jh:hjeEYYPe}uWT谹S0EPEܹ4PWjs4Ҕ}tKU0jiyx߹u3VhHVjEPU8SVWhj}YYuW>Wx0j
Y}39}vE4xG;}r3VhVj_^[]Ujhk9dPVW3PEdhjpHYYt.jV WPOLt
jwHyVw(<Te@&+TMOZMd
Y_^]ËUQVWh(jYG(YȉETxCE3S]GH_Lt$jh hGPwPM!T[Vh@Vj_^]̋UuUtjrHrPRLK]̋UuUjrHrPRL3]̋UuUjrHrPRL]̋UuUjrHrPRLө]̋UuUԗjrHrPRL苨]̋UuUjrHrPRLs]̋UuUjrHrPRLɫ]̋UU,VWu uurHrPRL螝_^]̋UEMVWu PLQuDpHjhGpP_^](̋UEMVWu PLQu`pHhpJjpPã_^](̋U$VWPuUt$hrHrPRL˜D$P_^]̋U$VWPuUt$hrHrPRLkD$P_^]̋U$VWPuUt$̘hrHrPRLD$P_^]̋U$VWPuUt$hrHrPRL諛D$P_^]̋UUVWjuuhrHrPRLh_^]̋UU,VWjuuhrHrPRL(_^]̋UUTVWjuuhrHrPRL_^]̋UUxVWjuuhrHrPRL訤_^]̋UUVWjuuhrHrPRLh_^]̋UUVWjuuhrHrPRL(_^]̋UUܙVWjuuhrHrPRL_^]̋UUVWjuuhrHrPRL訣_^]̋UUEVWPu  urHrPRL'_^](j9kEPuUEe8PrHjrPRLÌEP̋UUXVWu uurHjh0qrPRLӓ_^]̋UUxVWu uurHjhprPRLZ_^]̋UUVWuurHhqrPRLj_^]j:[EPehjrYYjS uu@8}&WPOLuWLEVPwHܚjwPrSVhVjpMEP茽j8諽t-uMRe0h jMujh u u@H]&SPKLu,VSLuLusHjhusPhVh`Vj轼j8ۼt-uMRe0hjMujh u u@H]&SPKLHu,VSLuțusHjhusPhVhVj̋UUVWuurHhPvrPRLڏ_^]j9˻EPuUEe4PrHj
rPRL#EPY̋UUHVWu uurHjhrPRL3_^]̋UU\VWu uurHjh@rPRL躍_^]̋UUtVWuurHh rPRLʎ_^]̋USVWuhjjS }HuW`WPOLSuJM	u<PuwHt(s"tt~	3SVhVj_^[]̋UuUhYrHrPRL覡]̋UuUhXrHrPRLv]̋USV3h(jfEYYjS uu@:&W}WLOH*uWHEVPwDPj
wL軆_SVhpVj^[]j9t%uM&N0hj
u]uhhYY@33fE܉MEURMu܃uP֋x5EjPqP֋xESh0\P1֋WhHWjMEtPq֋Ϸj9t%uMM0hju]uhОhYY@33fE܉MEURMu܃uP֋xGEUeRPqL֋u&9EtESh0\P1֋WhWjMEtPq֋譶j9˶t%uMK0hXju3!EfE!EM]uQuS֋xlEUeRPqL֋uKMt!EQpփ}t&u܃uS֋WhWjMEtPq֋莵̋USV3hjfEYYjS uu@:&W}WLOH:|uWHEVPwDjwL˂_SVh0Vj^[]j":t%uM6J0hxju3ɉMEMu@Ru܍M3QfE܋EuPKxSxxEuh \P1֋WhWjMEtPq֋j":+t%uMVI0hj:u3ɉMEMu@Ru܍M3QfE܋EuPKtStxEuh \P1֋WhHWj!MEtPq֋0̋USVWt%uMwH0hj[uu3fEEuPK|S|VhءVj~_^[]USVWhju3D$D$w0YYt'jS %SG4G4W0G4ЍL$QL$QujuhPP1QQT$Ofu7W0D$PD$PujuhPw48t#VhLVj_^[]Ujhk9dPVW3PEdhjHYYt.jV WPOLqxt
jwHVw(?e@&?MOFMd
Y_^]ËUQVWhܢjpYG(YȉE?xCE3S]GH_Lt$jh hGPwPM?[VhVjs_^]̋UuU@hrHrPRL迖]̋UuU`hrHrPRL莗]̋UuUhrHrPRLh]̋UuUhrHrPRLP]̋U$VWPuUt$ȣhrHrPRL蛉D$P_^]̋U$VWPuUt$hrHrPRL;D$P_^]̋U$VWPuUt$hrHrPRLۈD$P_^]̋U$VWPuUt$8hrHrPRL{D$P_^]̋U$VWPuUt$`hrHrPRLD$P_^]̋U$VWPuUt$hrHrPRL軇D$P_^]̋UuUjrHrPRLˑ]̋UuUԤjrHrPRL賒]̋UuUjrHrPRLk]̋UuUjrHrPRLS]̋UuU<hrDrLRH]̋UuU`hrDrLRH]̋UuUhrDrLRH訐]̋UuUhrDrLRH萑]̋UuUܥhrDrLRHH]̋UuUhrDrLRH0]̋UU<VWuuhrHrPRL_^]̋UU`VWuuhrHrPRL_^]̋UUVWuuhrHrPRLb_^]j9EPueuUhrHrPRLkEP螪̋UUئVWuuhrHrPRL_^]̋UUVWuuhrHrPRLލ_^]̋UUVWuuhrHrPRLB_^]̋UU@VWuuhrHrPRL^_^]̋UUhVWuuhrHrPRLŒ_^]̋UUVWuuhrHrPRLތ_^]̋UUVWuuhrHrPRLB_^]̋UUܧVWuuhrHrPRL^_^]̋UuUjrHrPRLi]̋UU,VWu uurHrPRL>_^]̋UUEVWPu PurHrPRLdž_^](̋UEMVWu PLQutpHjhGpPc_^](̋UEMVWu PLQupHhpJjpP#_^](̋USVWuhĨjjS }HuW`WPOL#nuJMsu<PuwHȳt(s"tt~	3SVhVj_^[]jE:˦fut*uM;PQh8juee]uWYMTuKf;MPEupDpHu'EMQh(P0uE!}WhWjEEtPq֋辥USVWhԩju3D$D$w0YYt'jS <SG4G4W0G4ЍL$QL$QujuhpqP1QQT$OZu7W0D$PD$Pujuhpqw4|t#VhVj_^[]Ujhk9dPVW3PEdhxjHYYt.jV WPOLkt
jwHVw(2e@&2MO69Md
Y_^]ËUQVWhjYG(YȉE2xCE3S]GH_Lt$jh hGPwPM2[VhVj_^]̋UuUjrHrPRLۇ]̋UuUjrHrPRLÈ]̋UuUjrHrPRL{]̋UuU,jrHrPRLc]̋UuU@jrHrPRL]̋UuU`jrHrPRL]̋U$VWPuUt$hrHrPRLK|D$P_^]̋U$VWPuUt$hrHrPRL{D$P_^]̋U$VWPuUt$hrHrPRL{D$P_^]̋U$VWPuUt$̫hrHrPRL+{D$P_^]̋U$VWPuUt$hrHrPRLzD$P_^]̋UUVWuuhrHrPRL҃_^]̋UUVWuuhrHrPRL_^]̋UU,VWuuhrHrPRLR_^]j9EPueuU@hrHrPRL[EP莟j9諟EPueuUThrHrPRL蟂EP.j9KEPueuUlhrHrPRL蛂EPΞ̋UUVWuuhrHrPRL_^]̋UUVWuuhrHrPRL_^]̋UUVWuuhrHrPRLr_^]̋UU̬VWuuhrHrPRL莁_^]̋UuUjrHrPRL虅]̋UUVWu uurHrPRLnw_^]̋UUEVWPu urHrPRL{_^](̋UEMVWu PLQu0pHjhGpP}_^](̋UEMVWu PLQuLpHhpJjpPS}_^](j9軜]QuhCDsLsH@PDi+tCEPueuSHhhsDsLEPj9+]QuCDsLsH@PD*tCEPueuSHhsDsLZEP膛j$;蛛hjYYjh EPeEP]Eu
@#EPEuЃ̭PHhpDpLtxxMHuhMShQ0֋uJuMvH,u6FDM@@DX#RvHu-ytQpփ#hWhWjEEPMEP̋UQQSVWh4jb]YYu
@E3#@D@@DEXMLBuWMShXQ0֋u9EuMVpHu!jhhytQpփ#WhPWj	_^[]̋USVWuhjqjS }HuW`WPOL_uJMeu<PuwH舥t(s"tt~	3SVhVjD_^[]USVWhju3D$D$w0YYt'jS SG4G4W0G4ЍL$QL$QujuhvP1QQT$ONu7W0D$PD$Pujuhvw4nt#VhVjg_^[]j ';賗M]3t-SM,uu0hhjMuuu3ҋu΋F@DE䋀XEEPt4=rtt~E33A9P8u@MH0t-jh M}MhA4E3P43AH8E;t	f99}ME	D0E;u@ujh EHH3W3҅t6tu-EUPR0QByPuE؋M6;u{t4f9t/EUPERSPyaPuDEFM>5tf9u9}u'tE䋀98t0SYYt3E,U荆tuQMSPU3ɉM9J BjV<} XVuQMSPVx0M܋A@DXt}u}tuSQuMjV MlVuMUAM;J g3hWhWj93Uuuƒ}uQMSPuEt3ɉM9v|jh4 BhuMSVu jh 臆h(M܋uAM;rj$Z;蓓M]3}t+WM(Su0hjMuEPEEu9p suE@E@@DXtLt0WYYu@33ɋu0t
t'f9t"uÃjh uE`PEPEVjp4P0`uxR3Et>EPh \VEx2t.MU싁M0jIu3Mhx8MEtVp֋MEAE3M;H s&}EtVpEWhWjIMEЃPeUjhu;dPSVW3PEdhj3YY9_Lt0jV W\OXXt	SwL虽V_L9_TtwT貽_TO`tOdtw,1]@&!MO%Md
Y_^[]j;ސ3tOMQM%uM]%uE60h(j]uMueE]jh uN$y9GLtwL衼gLWTOPVu
ruu!E!Ez=Er3
r%؁tjXątStckEu/5j։EHeapEME=r0
r"etjXm܅tStcku#5j֋؅thHeapt]E3PPPPPEPuSjuuuw\wXwDwTwPLt+sCttu~5* u3EFLhjWYYuN$.Et8Heapu5Pօt;Heapu5ShEuWhбWj0Wh(WjǍe΍h;]3MEMԋu PEԃu3EEإPuSME"jYM}WV0hxjXPEu3VEMW3ɍEMPM؉MM܉MЉM̉MȉMEPpP`PPPPjh uF,ȉEE9FTt
vT43FTV\NXZSu
xj	Xf9EuUuM̥'؅Q}j^uEPW؅+GuTWE̲PMS؅tttہjY3ۋ;r	ˉMtE;5w=
;r,}t#F̉MtjXStckȉMu?ˍF;r,5P֋ȉMgjXHeapȉMQËӉE9_vfMf;Eu2\t;ˍAEff;Eu+M؋EMt @EfMEME3B;Wrj#u^3Ej	Xf9E u MȥO؅yuȍEPV؅a^]ԅ/jY3;;r	0}tA;5w9
;r*:|t!Fr}tjXStck}u;F;r,5P֋}jXHeap}3ɋtuu1ft\f;Uu:T1CE2PM ɽ؅l;jf;U.T1@;rEԅ3j	Xf9E0u5Mu0M쥥߿؅x fEEEj	Xf9E@u7u@M3E쥥袿؅x fEEEj	Xf9EPu=uPM3E쥥e؅x fpE쉅xxj	Xf9E`u=u`M3E쥥"؅x f`E쉅h5j	Xf9Epu:upM3E쥥߾؅x fPE쉅Xu3؉]܅tB;5w:
~;r+yt"(܉]j_tStck߉]u=j_F;r)5P֋؉]܅Heap߉]܅fP}ptPf`u`t`fpUPtpf}M@tMf}E0tEW}VuRQPEPESPWuuuvdv`vLv\vXD؅tjX;EЉFT3EЉEEPjj}؉]ą3EtF@PjXf@E܋H@PEPS؅uHEF];r0P08 f03ɉMċ٥M}̅tWuȅtV}tulEątPEHeapt98u5P֋Et98u5P֋E܅t98u5P֍EPEPpP`PPPhtKtA3ɉMGujXVShزSjEXPsMVSh0SjXPSÍ 苄|̋UtSVuWVuhj3߉|$$\$|$u|$|$ D$0Pj0D$TWPjh }WXOTJu
E3f9tHG\D$PG`D$T~)D$PQEPuD$`PwH>PuD$	jW[s"tt|$~ہ	|$t$t*>tQff;D$$u+u6VtWD$0PL$Ph[}@uEVShгSjV \$D$@P3t$(D$,D$(Pjj|$u
 3D$~e<tW4؅D$0PjXfD$0D$0PD$\$<Pt$؅D$G\$;|D$}t$@ fD$@D$D$H3D$9D$t.]S|$t3fD$0PS؅T3ދMSh0Sj`_^[]̋U4SVuWt%VL$0hjt$3j0P؍D$Pjh 9]uWw}WTOPHu^3Ʌtf9tuGXT$QODD$G\SD$ Wt(s$tt~3L$hVhдVjL_^[]̋U4SVuWt%VL$0hj薿t$3ۍD$j0SPjh 9]uWttf9tuVTNPFuPuFXT$NDjD$F\WD$ nVt(s"tt~	L$ghVhHVj/_^[]U<SVW}t>uL$WL$0V0hjwt$t$3j0PD$D$D$ P迅jh u]uVTNPEu{t3f9t|$FXT$NDD$F\D$D$Put$ZRt(s8tt~*39D$Hf3WL$huVhصVj̽QVh8Vj赽_^[]UtSVWu3t$ މt$t$$D$0Pj0D$TVPsjh G,ȉD$$D$?W\OXaDu
&Et3f9tD$ G`UOLD$PGdD$TD$PD$Pt$(EPD$`P5Zt6ttD$@Pt$3D$,D$(Pjjt$4؅t3ɉL$tND$4tD$0PjXfD$0D$0PD$t$<PSu*D$G;|$r3ɋ}t$@\$H fD$@٥h|$t	L$$|$t	t$̩tSD$0PL$P_^[]̋UQt%uM,0hjuMVujjuVhĶVjJ^]̋UQVWhj贺}YYu WVh8Vj_^]jh uV\NXBuFT3u7Puht?t7M10VhVj|um̋UuUhrLr\RX^]̋UuU0hrLr\RX^]̋UuUThrLr\RXh^]̋UD$VPuUxhrLr\RX&^D$P^]̋UuUhrLr\RX]]̋UuUhrLr\RX]]̋UuUܸhrLr\RX]]̋UUVWu uurLr\RXR_^]̋UuU$hrLr\RX]]̋UuUPhrLr\RX^]̋USVWh|jԷYYjh ]SXKTU?u0K(x"KHu3ҋjaK(hVhVj̷_^[]j8xt-uM6
e0hjMujh ]SXKT>u1K(x#UuKHj`K(;hVh0Vj)w̋USVWhpjtYYjh ]SXKT=u0K(kx"KHu3ҋj^`K(hVhVjl_^[]̋UuUܺhrHrXRTZ]̋UuUhrHrXRT[]j-<Tvh$jwYYO,ugPEGLwXt$jh 蠮hG\g\hMjTpYYEet	3MG`u`xxShMjPpYYEEt	3MGdt9xG`LGdL3O,VhDVju̋UQWhjUe}YYu
WExXu@|SVM]xPuh0S֋yjp43E@@Xt	C$@L3ytjp4^[WhWj_]̋UQWhj腳e}YYu
WEx\u@zSVM
.]xNuh80S֋yjp4E@@\t	C$@L3ytjp4^[Wh Wj@_]̋UQt%uM0hlj蠲uEMVuPjuI;tVhVjɲ^]̋Ujh thj!YY}Vu@GSu]STKP9u#K$
xUKD螜K$W[htVhVj3^]3WjYz@&!B_̋UV@&qEtV^fY^]jhYt3ۉ]NAF*EE3@Ëe3ہ}K	@EtËV~tFPf^jhZ}t3ۉ]9YtAP4@*EE3@Ëe3ہ}K	@]EjtÃyt
APjP<&q‰EM33fU؉]]URUu؃uPjhuEȅy6E9Et*MURu؋uPjhuEȅx-uM]QVxLׅx}tE먋uMtVq֊%pUSVWhLjiud$$d$s0YYt'jW 裨WC4C4S0c433҃d$L$QL$ QujuhPD$T$RPqL֋D$9|$tR!|$L$0Qh0\PxjjKT$ 
*D$Pqփd$ujPqփd$S0D$PD$ Pujuhs4pE=#L$tQpWhWjv_^[]UVWhLj}~0YYt#SjS -SF4[f4jhjj3_^]j({<_nuh̽jeYYjh ]q`39|EEEPEEV0PEPSjv4o;t2EEPEEtPqփM}uEePh0\>Vx+UM0j(3ɅxM#EEPEVpփM}u_@hWh8Wj訬lUSVWhjL$YYjh ]D$d$PSC!t$D$\$3d$}tD$PD$jtuD]tD$PD$jtu)]ut$L$_u/D$thľj]D$@D$;D$v]|$tShVhVj胫_^[]USVWhLjuYY3ɉw0L$L$L$t'jS &SG4G4W0O4эL$QL$QujuhvPfD$L$Qh \P0D$Pq3T$PPOD$"u7W0D$PD$Pujuhvw4pAt#VhVji_^[]USVW3PPPPjuPh؅~&Sj@t3PPSVjuPh7_^[]1̋UuM0uZ]̋USW}O؅u,
ĵAtVjr4^ĵH_[]ĵ&AH6̋UuM0u]̋USW}O؅u,
ĵAtVjr(^ĵH_[]̋UMI]ĵVq%H^̋UuM0u]ĵVq%H^̋UuMP0u]ĵVq%H;^;̋UuM 0uz]ĵVqX%H^̋UuM/u*]ĵVq,%H^̋UuM/u]ĵVq%HK^K̋UuM/u]ĵVq$H^̋UuM`/u:]ĵVq$H^̋UuM /u]̋USW}O؅u,
ĵAtVjrP^ĵH_[]ĵT$A#Ad#AH̋UuM.uJ]̋USW}Oo؅u/
ĵAtVj^ĵH_[]̋UMI]ĵ"A@"AH̋UuM.u]̋USW}O؅u/
ĵAtVj^ĵH_[]ĵ!A AH铞̋UuM.u]̋USW}O؅u,
ĵAtVjrL^ĵH_[]ĵd A AHȇ̋UuM`.uj]̋USW}O؅u/
ĵAtVj^ĵH_[]ĵtAAH߱̋UuM .u]̋USW}O؅u/
ĵAtVj^ĵH_[]ĵAA@AHe̋UuM-u*]ĵAHV̋UuM-u]̋USW}O؅u/
ĵAtVj^ĵH_[]ĵAAdAH鳍UjhP9dPQV3PEdFP0EPTvFVffYMd
Y^]ËUVEtVVY^]̋UVwEtVUY^]̋UVEtVUY^]̋UVEtVUY^]̋UVEtVTUY^]̋UVEtV$UY^]̋UVEtVTY^]̋UV/EtVTY^]̋UVOEtVTY^]̋UVEtVdTY^]̋UVGEtV4TY^]̋UVEtVTY^]̋UVEtVSY^]̋UVEtVSY^]̋UVEtVtSY^]̋UVEtVDSY^]̋UVrEtVSY^]UuRY]UQQVuWG;0uF9EuApG@GgG@GE"MgVD$P.u;uuE0_^]jCRY3ɉHHf@j\<b^M]EE{lMag{xutMy;suwUB9Xux9u>~B9u)tǀyuMȀxtEJB9Xu"tOHytJAcZH;Kuquw>CACHUB9XuHC9uHCACaAc"B;xu;uvNyuAVFNUyxu	AxtnAxuQ@ANFAFAVu@<MyuAVFUyuAxu)xu!ABMv;H-uG=xuAQ@AFAFVu@fuKdsSOYNtINEM[hMfeEjPMkhEPH[̋UUV2FFxuPBFA;PupB;Pup0Vr^]UUVrBxuPBFA;PupB;u0pr^]USVuW~u,w?NcvVNYt_^[]j<[Eu@r eejX}gNYtQ3aË}]t,K x3tj3ۋEYj<pZMu
@3j(}EEMYt*c{3jYC !C$ĵ@3Ë}]t)Klx3tjp43ۋE1Yj<YEu@r eejT}"MYtQs3Ë}]t,Kx3tj3ۋEXj=+YEu@r eejT}LYtQy3:Ë}]t,KGx3tj3ۋE	Xj/=XEu@o eejT}KYtQ3Ë}]t)Kx3tjpL3ۋExWjJ=XEu@r eejT}iKYtQ3_Ë}]t,K"x3tj3ۋEVje=rWEu@r eejT}JYtQ3Ë}]t,Kx3tj3ۋEPVj=VEu@o eejh}AJYtQ3Ë}]t)Kx3tjpP3ۋEUj=MVى]u@z#eej0}IYEEtQ3Ë]}uut*N\x3tjp(M33#Uj=Uى]u@z#eej8}IYEEtQz3Ë]}uut*Nx3tjp(M33Tj=Uى]u@z#eej8}xHYEEtQs3WË]}uut*N$x3tjp(M33Sj>yTى]u@z#eej8}GYEEtQl3Ë]}uut*Nx3tjp(M33OSj9>Sى]u@z#eej8}@GYEEtQe3Ë]}uut*Nx3tjp(M33Rj^>ASى]u@z#eej8}FYEEtQ^3+Ë]}uut*NPx3tjp(M33Rj>Rى]u@z#eej8}FYEEtQW3Ë]}uut*Nx3tjp(M33{Qj>	Rى]u@z#eej<}lEYEEtQ>3cË]}uut*Nx3tjp(M33Pj4>Q}?F@Ph̿EjP0EP؉]ąuPq!eM̃eSYE΋EЍEPȋE9tXuEjËEЋ]ċ}EȃMQrփ'SE"ttQpփ'WOjT?PډM}]}̅;ut3EuIA@Ph̿EjP0EPEuPqփ#euEu!E	PMkXMEE3PG90t	֋{Wu3M3uątVx׋}Eu!}	WMXEEPMWEPM\WEEPMxWEPM@WMEPEEPPM@EWuM}WuuEtVpր}$hؿjeY3YGEÃM}ċ]Qru#"ttQpփ#WMjTe?ZNډM}]}̅;ut3EuIA@Ph̿EjP0EPEuPqփ#euEu!E	PM@VMEE3Py90t	֋PUu3M3uątVx׋}Eu!}	WMUEEPMiUEPM1UEEPMMUEPMUMEPEEP%M@EcUuMRUuuEtVpր}$hؿj:Y3YGEÃM}ċ]Qru#"ttQpփ#WKj4?/L}?F@Ph̿EjP0EP؉]ąuPq!eM̃eS<TE΋EЍEPȋE9tGSuEËEЋ]ċ}EȃMQrփ'SE"ttQpփ'WrJj4?K}?F@Ph̿EjP0EP؉]ąuPq!eM̃eSSE΋EЍEPȋE9t)RuEËEЋ]ċ}EȃMQrփ'SE"ttQpփ'WTIj4?I}?F@Ph̿EjP0EP؉]ąuPq!eM̃eSRE΋EЍEPȋE9tQuEËEЋ]ċ}EȃMQrփ'SE"ttQpփ'W6HjT9@HډM}]}̅;ut3EuIA@Ph̿EjP0EPEuPqփ#euEu!E	PMPMEE3P90t	֋Ou3M3uątVx׋}Eu!}	WMVPEEPMOEPMOEEPMOEPMOMEPEEP	M@EOuMOuuEtVpր}$hؿj赅Y3YGEJÃM}ċ]Qru#"ttQpփ#WFj^@tFMu
@3j(}EE9Yt*c{3jYC !C$ĵ&@3Ë}]t)Kpx3tjp43ۋE5EjT@EډM}]}̅;ut3EuIA@Ph̿EjP0EPEuPqփ#euEu!E	PMMMEE3Pu
90t	֋Lu3M3uątVx׋}Eu!}	WMzMEEPMMEPMLEEPMLEPMLMEPEEPM@EMuMLuuEtVpր}$hؿjقY3YGE&ÃM}ċ]Qru#"ttQpփ#W/CVN7L6^j@Cى]c{j3YC,!EsD&uFh<j@F@FF@fc8ĵYY%@xBj@Bى]c{j3YC,!EsuF@F@FF@fĵ%@
Bj@0Bى]c{j3YC,!EsuF@F@FF@fĵ%@Aj@Aى]c{j3YC,!EsuGF@F@FF@fĵX%@7Aj@ZAى]c{j3YC,!EsuF@F@FF@fĵ,%@@j@@ى]c{j3YC,!EsxuqF@F@FF@fĵ%@a@j@@ى]c{j3YC,!EsPuF@F@FF@fĵ$@?j@@ى]c{j3YC,!Es(uF@F@FF@fĵ$@?UQS3VWjc{YK,]C(&h԰j~YYK,]3T$CLCTC`CdCXĵC#Cd#@_^[]UQS3VWjc{YK(]C$cLhXj>~YYK(cHĵ"C@"@_^[]UQS3VWjc{YK(]C$JcLhܖj}YYK(}cHĵ!C @_^[]UQS3VWjc{YK(]C$cLhjr}YYK(cHĵd C @_^[]UQS3VWjc{YK(]C$~cLhj}YYK(cHĵtC@_^[]UQS3VWjc{YK,]C(htvj|YYK,OcLĵCC@@_^[]USYVWMsE~u%FPuEt6v~tދMut.A;uuESjPGE@CMuu}FPtuMESuP	G7G_^[]UQS3VWjc{YK,]C(cPhj{YYK,&cLĵCCd@_^[]j@<ًsƋ~u"uGPt?tC;tFPutFeueMzDEPMBDEEPVEPUM0DuFH;j'Ak;ًsƋ~u"uGP-t?tC;tFPutFeueMCEPMCEEPVEPM0CuF:jRA:ًsƋ~u"uGPt?tC;tFPudtFeueM4CEPMBEEPVEPM0NCuF:j}A%:ًsƋ~u"uGPt?tC;tFPutFeueMBEPMYBEEPVEPlM0BuF_9jA9ًsƋ~u"uGPDt?tC;tFPutFeueMAEPMAEEPVEPM0BuF8jA8ًsƋ~u"uGPt?tC;tFPu{tFeueMKAEPMAEEPVEP&M0eAuF8jA<8ًsƋ~u"uGPt?tC;tFPutFeueM@EPMp@EEPVEPM0@uFv7j)B7ًsƋ~u"uGP[t?tC;tFPu5tFeueM@EPM?EEPVEPM0@uF6UQыxt@?yt?Hyu&VWSىM;1u
IÀyt[_^xu
‹]ËȋAxtjLLB6~E}EEQPvWvhF؋F;u
XFF}t
F;8u_F;xuXKP;u;PRzt5;xu
WG@G@@Gp_Jzu@B@@x,;8u
W1G@G@@Gp\OxcNEIAQ5hM?eEPM=h(EP	5̋USV3WKu9suuQju}EE};uPWWu;uAWPCWpV멍pVWt3EMEWPtEHytWPjhWV_t?EMsE=E;tPW9tEMWQztQPWEPE_^[]UEjh0E0]jqBY4j'eEYMu~MNωuF}<EOPH<fFp3QujjU3̃l$ṽl$t̃l$vãl$b̃l$ãl$V`̃l$X̃l$Ãl$9̃l$6̃l$6̃l$鶺̃l$p̃l$v_̃l$=̃l$5̃l$<̃l$&̃l$̃l$̃l$閎̃l$&̃l$m̃l$&̃l$_̃l$_̃l$c̃l$ãl$VṼl$6:̃l$f>̃l$fẼl$v=̃l$̃l$̃l$Ṽl$̃l$門̃l$;̃l$Q̃l$8̃l$9̃l$66̃l$̃l$&̃l$ṽl$l̃l$l̃l$_̃l$^̃l$]̃l$ãl$]̃l$?̃l$6̃l$3̃l$3̃l$v<̃l$7̃l$4̃l$Ṽl$鶍̃l$醇̃l$9̃l$?̃l$:̃l$醇̃l$鶆̃l$q̃l$ãl$_̃l$6ãl$T̃l$B̃l$:̃l$D̃l$fÃl$=̃l$̃l$fõl$^̃l$Õl$&6̃l$v6̃l$3̃l$V7̃l$6C̃l$>̃l$6̃l$Ṽl$Ṽl$ƃ̃l$6̃l$}̃l$Vr̃l$^̃l$Z̃l$9̃l$4̃l$1̃l$;̃l$3̃l$醨̃l$馲̃l$Ʋ̃l$&̃l$̃l$̃l$v}̃l$k̃l$p̃l$]̃l$V[̃l$R̃l$<̃l$7̃l$F0̃l$6̃l$̃l$Ṽl$馉̃l$V~̃l$k̃l$Fg̃l$]̃l$FX̃l$P̃l$Ãl$&>̃l$:̃l$69̃l$.̃l$Ṽl$ֱ̃l$6̃l$閌̃l$f̃l$|̃l$閁̃l$̃l$VZ̃l$&[̃l$3̃l$?̃l$v:̃l$̃l$6̃l$f{̃l$~̃l$h̃l$f̃l$VP̃l$Ñl$L̃l$F8̃l$V0̃l$f3̃l$&5̃l$̃l$Ṽl$}̃l$h̃l$j̃l$FZ̃l$X̃l$6-̃l$f̃l$~̃l$}̃l$Fỹl$&h̃l$ĩl$d̃l$FŨl$VỸl$Ũl$FÕl$M̃l$66̃l$+̃l$醯̃l$F̃l$Ʈ̃l$&̃l$f̃l$|̃l$̃l$FX̃l$X̃l$&Ṽl$,̃l$̃l$F̃l$l̃l$Fb̃l$fM̃l$0̃l$2̃l$<̃l$v.̃l$+̃l$̃l$F̃l$&̃l$馭̃l$Ṽl$6ṽl$k̃l$6ãl$vŨl$5̃l$6-̃l$̃l$f{̃l$Ṽl$S̃l$T̃l$F̃l$*̃l$6*̃l$&̃l$閅̃l$醂̃l$j̃l$c̃l$Ṽl$S̃l$F*̃l$;̃l$F9̃l$v2̃l$2̃l$F1̃l$V.̃l$*̃l$ãl$d̃l$T̃l$fĨl$:̃l$+̃l$)̃l$.̃l$6-̃l$̃l$̃l$Ɗ̃l$̃l$F̃l$ṽl$Vỹl$R̃l$f2̃l$*̃l$v9̃l$̃l$鶨̃l$f̃l$̃l$ỹl$^̃l$Ṽl$Q̃l$P̃l$'̃l$V'̃l$-̃l$&4̃l$7̃l$0̃l$̃l$̃l$`̃l$8̃l$v6̃l$/̃l$F/̃l$v.̃l$+̃l$6'̃l$v1̃l$-̃l$6(̃l$̃l$p̃l$Q̃l$,̃l$v*̃l$61̃l$̃l$̃l$_̃l$fg̃l$R̃l$6̃l$醧̃l$6̃l$̃l$vb̃l$VÑl$f+̃l$2̃l$4̃l$.̃l$.̃l$֤̃l$Ṽl$ṽl$r̃l$F[̃l$6Ñl$/̃l$+̃l$F&̃l$閂̃l$̃l$v|̃l$Vw̃l$&`̃l$VL̃l$6Ẽl$&/̃l$F*̃l$"̃l$vq̃l$&ẽl$[̃l$&̃l$P̃l$L̃l$L̃l$V'̃l$+̃l$Ɛ̃l$F~̃l$vb̃l$ãl$,̃l$F(̋U`]馪UuuuuQ`]U}tu`uб]̋U칀]FUuuuuQ蔪]U}tuup]̋U칠]UuuuuQ4]U}tuu]̋U]醩UuuuuQԩ]U}tuu谰]̋U]&UuuuuQt]U}tuuP]̋U]ƨUuuuuQ]U}tuu]̋U ]fUuuuuQ 质]U}tu u萯]̋U@]UuuuuQ@T]U}tu@u0]̋U`]馧UuuuuQ`]U}tu`uЮ]̋U칀]FUuuuuQ蔧]U}tuup]̋U칠]UuuuuQ4]U}tuu]̋U]醦UuuuuQԦ]U}tuu谭]̋U]&UuuuuQt]U}tuuP]̋U]ƥUuuuuQ]U}tuu]̋U ]fUuuuuQ 败]U}tu u萬]̋U@]UuuuuQ@T]U}tu@u0]̋U`]馤UuuuuQ`]U}tu`uЫ]̋U칀]FUuuuuQ蔤]U}tuup]̋U칠]UuuuuQ4]U}tuu]̋U]醣UuuuuQԣ]U}tuu谪]̋U]&UuuuuQt]U}tuuP]̋U]ƢUuuuuQ]U}tuu]̋U ]fUuuuuQ 财]U}tu u萩]̋U@]UuuuuQ@T]U}tu@u0]̋U`]馡UuuuuQ`]U}tu`uШ]̋U칀]FUuuuuQ蔡]U}tuup]̋U칠]UuuuuQ4]U}tuu]̋UuM-u:]̋USW}O_؅u,
ĵAtVjr^ĵH_[]USVuW}}tt'Exu@yP33ɉT$@;Pt2;]s-D$x>L$CEL$Pyċ}xt;]s3AV;r3Ǹ@_^[]̋UW}Ht(Vw0VuuuWV^uuuW_]UVuW3t&ESXHN;AtEu3G[_^]̋UW}Ht"Vw0VuWV^	uW_]UMAu@
@A3]̋UW}HtVw0VWV^W_]jBى]3CCE{jCYC,K0E3ɍEPhQh{HMhMMM u%uWQMuttVjBEu
@ eejL]Y}Etĵ@3Ë]}t)O藦؅x3ۅtjp3E8\ËUQQVuW@tm&M7x\}S]WGKE9tEC-@VhNCGC@yjp[_^]̋UW}Ht"Vw0VuWGV^	uW0_]̋UVEtVY^]7ĵVWGHG0POO_^̋UQVuu@o&MeSW}؅x8]O9tmCG@VhPXWG0֋؅ttjp_[^]̋UMu@
E@3]USVWBPM&uuj	XfEtVx׍EPSEPtVq֋_^[]̋UQ}u@QVu}W@S]W@KE~MDKEN;u;t
MP4_[^]jB
ى]3CCE{jCYC,K0E3ɍEPhQh{HMhMMM u%uWQMuttV
jC
Eu
@ eejL]Y}Etĵ<@3!Ë]}t)O薢؅x3ۅtjp3E8[ËUQQVuW@tm&M7x\}S]WGKE9tEC-@VhNCGC?yjp[_^]̋UW}Ht"Vw0VuWHV^	uW1_]̋UVEtVY^]ĵVW<GHG0PO#O_^	̋UQVuu@o&MeSW}؅x8]O9tmCG@VhPXWG0֋؅ttjp_[^]jEC
ى]3CCE{jCYC,K0E3ɍEPhQh{HMhMMM u%uWQMuttV
jjC
Eu
@ eejL]Y}Etĵ\@3$Ë]}t)O蕟؅x3ۅtjp3E8Z	ËUQQVuW@tm&M7x\}S]WGKE9tEC-@VhNCGC>yjp[_^]̋UW}Ht"Vw0VuWIV^	uW2_]̋UVEtVY^]ĵVW\GHG0PO#O_^	̋UQVuu@o&MeSW}؅x8]O9tmCG@VhPXWG0֋؅ttjp_[^]jCى]3CCE{jCYC,K0E3ɍEPhQh{HMhMMM u%uWQMuttVjCEu
@ eejL]Y}Etĵ|@3'Ë]}t)O蕜؅x3ۅtjp3E8ZËUQQVuW@tm&M7x\}S]WGKE9tEC-@VhNCGC>yjp[_^]̋UW}Ht"Vw0VuWIV^	uW2_]̋UVEtVY^]ĵVW|GHG0PO#O_^	̋UQVuu@o&MeSW}؅x8]O9tm
CG@VhPXWG0֋؅ttjp_[^]jCى]3CCE{jCYC,K0E3ɍEPhQh{HMhMMM u%uWQMuttVjDEu
@ eejL]Y}Etĵ@3*Ë]}t)O蕙؅x3ۅtjp3E8ZËUQQVuW@tm&M7x\}S]WGKE9tEC-@VhNCGC>yjp[_^]̋UW}Ht"Vw0VuWIV^	uW2_]̋UVEtVY^]ĵVWGHG0PO#O_^	̋UQVuu@o&MeSW}؅x8]O9tm
CG@VhPXWG0֋؅ttjp_[^]j>Dى]3CCE{jCYC,K0E3ɍEPhQh{HMhMMM u%uWQMuttVjcDEu
@ eejL]Y}Etĵ@3-Ë]}t)O蕖؅x3ۅtjp3E8ZËUQQVuW@tm&M7x\}S]WGKE9tEC-@VhNCGC>yjp[_^]̋UW}Ht"Vw0VuWIV^	uW2_]̋UVEtVY^]ĵVWGHG0PO#O_^	̋UQVuu@o&MeSW}؅x8]O9tmCG@VhPXWG0֋؅ttjp_[^]jDى]3CCE{jCYC,K0E3ɍEPhQh{HMhMMM u%uWQMuttVjDEu
@ eejL]Y}Etĵ@30Ë]}t)O蕓؅x3ۅtjp3E8ZËUQQVuW@tm&M7x\}S]WGKE9tEC-@VhNCGC>yjp[_^]̋UW}Ht"Vw0VuWIV^	uW2_]̋UVEtVY^]ĵVWGHG0PO#O_^	̋UQVuu@o&MeSW}؅x8]O9tmCG@VhPXWG0֋؅ttjp_[^]VW3jYx_^Ë˭̋UQQEEPuEPjh<1Tu
E
]jDZى]3CCE{jCYC,K0Ed3ɍEPhQh{HMhMMM u%uWQMuFttVj	E+Eu
@ eejL]Y}Etĵ@3R4Ë]}t)O/؅x3ۅtjp3E8ËUQQVuW@tm&M7x\}S]WGKE9t9EC-@VhNCGC؎yjp[_^]̋UW}Ht"Vw0VuWOV^	uW8_]̋UVEtVtY^]ĵVWGHG0POÍO_^驆̋UQVuu@o&MeSW}؅x8]O9t
CG@VhPXWG0֋؅ttjp_[^]̋UVEtV~Y^]̋UQVuu^]̋U,3ʼnEQMh(EP̋UQVuuR^]SWu30VtWp֋tQp։;^_[ËUEWtVRp^_]UVuW>u36P6>tt_^]̋	tVQp^UVut^]֨̋Vzt3PPPPP:JyuzuʋЀxtB;Pu
Ћ@xt^ËUyQr9EryrA;Ev2]UVW}Wt~Fru+WV{8jut&~FruWvPu_^]UUVrBu+Rus^]UVufFF^]j-E[ueNu@X̋UVXEtV>Y^]XűUQVuuX^]̋UV3EtVY^]̃y$Ar̋VjjN@^%U,3ʼnEQMhTEP̋UQS]VWF;sF}+;stGVNr
]]Mr	++PEPRPF+NjP_^[]UVEPL^]L%̋UVLEtVY^]̋UQMhEP̋UQVuuL^]UMu
QY]3sjM"hEPjHE}ujY;vu#3EƋ_u;sG+;w4eFPjȉE,EME@ePELEq<ËuM}M]tGrSPFPQjjqESGwBMjjLjj̋UVuWvG;s
wV4}tsG;sPju!wr?_^]UES]VWs;ssE+9usu;ujPEPj>jVDt2{Kr	WrEVPwRV2_^[]UV3jPuFFFL^]UyAUQr]U}Vt*~r$}FSvuSjPSY[uF^]jjj-E+}uVeFPO@#̋U,3ʼnEQMhEP̋UQVuuRX^]QËUSVW3Wtvx-t8t@u֋+#3҅xE
+t(+Nj}+tt	AHuuIz_^[]UEV3t=vWx5S]3WxEPuWSx;wuz_[
tM^]ËSVW3jY3^~hXh^ -YY_^4Ɖ^(^$^,^0^[ËUjhP9dPVW3PEdO4tQpփg4hlh9-YYO跂Md
Y_^]̋UVuVhh,EH,tx(tx0t13^]̋UVuu@}SWVhh,M3K}39_,tC9_(t>9_0t9jh]t%G(u}襥p$}ux$M_[^]̋UVuu@WW}3ɉ9O,tDG(t=9O0t8p$hh+G(x$tp$u	3_^]USVuW]SVhh+},tYG(tR0tLHtSjVYȅy2G(tSjVYȅyVh8j/+WG0@_^[]U$SVWjY3}E3P3GWS]]]MQ;w=3}EPWEPSx<EPjux)9]uj^(EphppPy	P9]t	u9]t	u_^[]ËUQSVWE3PS]SWu8`zu-uStEPVSWuVF3_^[]ËUVWj_E}Ph3Vhhu u3EuPEPEPVhuTu9}u9}u}uF}t	u_^]ËUVE3PhVh(hu 5uGEuPEEPEuPVhluTu}uEtu^]ËUl3ʼnESWWPhx3;h׍]SPu`I#uZPhjP
]x9Pa]x!ShjSjjP\ddSQjfDžQPƅhWPx.QAuS+PQP5dWPSt|SSWPjPSh~>j\PYYt'BVqAuS+PQR5d^SPjh5dhWPx.QAuS+PQP5dPPjDtlSSWPjPSh~.QAuS+PQP5dSPjh5dPhWPx.QAuS+PQP5dPPPPPPh WPY$x.QAuS+PQP5dM_3[]jhl3l3uhWE3CSWVV3ҹWQQhtDWj@PWj@Lhj@H*95tSVXWXWjYdtqjY\t`3A`tOPX:jYlt(hhhDP3@Ëe3EuádV3tP5d\tP5\`tP5`ltP5lht
P5h95thh595Dthh5D5P5L5Hd^tPd
d3@ËVW3t
Pt
Pt
Pt
Pt
Pt
Pt
P_^ËUD3ʼnES33VW}܋3ɉM؉MȉMīMMԉMЫM̉M3=\}쫉ÉMثfU؍EPEPjYt ud#MQj9Pjju`MQj;PjjtڍEPj	:WjjtEPj<PjjtEPj9PjjtEPj;PjjjEPjWjjQẺEEԉEЉEEȉEĉ3ti}t	u}t	u}t	u}t	u}t	u}t	u}t	uU؍EjP3}t	udƋM_^3[_]̋US]3VWBW|SKd sVSjZ3WSjZxPtyPzƃ@Ptxҍƃ@PPtxpƃl@u`ǃht
S_^[]jcEk}0PtCVSljV,0pփ0Sx8D~txPhƇtPhƇtjPltShƇlt,#tezMVY4tP|4̋UEV3dtlt\tLt<t'tuhTjjWyE:MD;/MMM	MIE0M(ȋEuj^^]̋UQQESVWd%_t
uhTuX]u`uEEPWYYMU`ЅM}
u`duX$]u`uEPWLYYMUЅ}E}ku`XdIuX]%Eu`uPWYYMUЅEuyPh}u`duX]%Eu`uAPWYYMU\
ЅEu=}ttPhh}u`duXuQhk]%Eu`u
txPW!YYMU	ЅuVEu!=}tPh(jjWZ*u }u`d3_^[]jhlQ3EEE3@ËeuEg̋U(SVWj3h]3ҍM3ҍMMu9]th$jYYjW^ZUtRhDj5UMShEPSSE3PS]u3ҍ}إ8D}𥥥uإ3EtEtEhMjYYt#F@!NIFF@f3uj^Wu&tVhhj(U˃˅tsE3tZMh_^[]SVWjhڋjj3ҋuӋth_^[ËUSVWjhڋjj3ҋku1 tj
^'}ujW^ujjZth_^[]UQQSVWj3!]hu9]SS3ҋ!EߋX4&tEPjgjW֋u{uwMt~UQX!u4&t6EPjhjW֋u6u2Mt9UQd!u'jhjgPhjjW^}tu8toh_^[]USVWj3ۋh] tj
^{SS3Eω]u`,EPuuv 0֋u09]t(E3PjguE3Pjhj2^h_^[]̋USVWjSu3jjutRS_^[]̋UuMuu]̋UuUuML]̋USVjS}thj!YYjW^<W}3jjXu$Pu	2ҋct_S^[]̋UQSVWjh }thjYYjW_uE3ҋPB]uh|S3ҋjBFlELй`t2Pu)th|`tPuAu\u\u^rMtfh_^[]̋U}t]];w;Tw3@3j$~EM؍u}ܥ3ۉ]jh E؅tp9th]EPEP>~u;t'jFPEPYxuЋM؋;t^]ԃM
#]ÃM]hlj,EjhtySltrti<M3ɋ;uAuL3EEЈEԍ}إ]EPEPJMЋ@EԄuhhYYMhø]jE&ujht_Nlt.t%e<PL	>^ËuMjX9XuEFHD|PMhøk^ËUSVW}WS4D;t$9N}6;u;t;N|6;u;u{3ɋljM;t
A;uMC;8u
;u	Q;tPNjˋ?EP}KЋE;u	t	{J;t}PEPK{;uM_^[]VFpvF@FfF^@ËUQQSVW]{wjFPuy6v~!tuEPM3ۋ0u;tMCY9}uMEWVPd_^[]USVWyM߈Ew~!u/jFPuEt6v~!tԋMut+;uuESjPE@HMujuFP}yuMESuPG7G_^[]UjhP9dPQV3PEdFP0EPXvffYMd
Y^]ËUQыx!t@?y!t?Hy!u&VWSىM;1u
IÀy!t[_^x!u
‹]ËȋAx!tjLLBV~E}EEQPvWvfF؋F;u
XFF}t
F;8u_F;xuXKP;u;PRz t5;xu
W~G@ G@@ GpJz u@ B @@ x,;8u
WG@ G@@ GpOx cNEIA hMheEPMh(EP̋USVW}ً!uv6W~!Yt_^[]UVWywjuFPyv6~!t܋E8_^]UQQVuWG;0u.9Eu)GE"MVD$PQu;uuE0_^]UVWu~ =#9F$w	+_^]UQQVWOwGOwEEPEPj	wO3@G G$_^]ËUVWj$|uYMxMHMjHY_f@ ^]UUV2FFx!uPBFA;PupB;Pup0Vr^]UUVrBx!uPBFA;PupB;u0pr^]j\<M]EE{![M${x!u!tMy;!suwUB9Xux9u>~B9u)!tǀy!uMȀx!tEJB9Xu"!tOHy!tJAc ZH;Ku!quw>CACHUB9XuHC9uHCAC a A c "B;x u;uvNy uA VF KNUy!x u	Ax tnAx uQ@ A NF A F AVu@ My uA VF Uy!uAx u)x u!A BMv;H-uG =x uAQ@ A F A F Vu@ uS袻YNtINEM5hMeEjPMdhEP̋WGG@g;OtV1Q4Y;wu^_ËUEVU;FtPP
HJNUYE^]UEh5ᆳPYYiҧAi+y]Vz!t3PPPPP{:Jy!uz!uʋЀx!tB;Pu
Ћ@x!t^j$Y3ɉHHf@ ËUQESVuى];t4K+΃W39s#tvG;uEM_QM^[]jE
ًuK6uu3}
C+3EUu}C+E?E+E;uC+9Eu)E9u#uuC+;suC+4uV}uUuEQKPuuuQMMQuSuQuMCt{+tP踸YMEKCCMuuEC+;‹SQs`EPMUEKu+Eu+ЍEQPKEUC+ƒ;#tHG2R;u<{+}sMC;tU:;uME1;usQud3WWSjLFhHMeEPMh(EP̋UMuP.Y]3sjMlhEP̋UtVuIu^]UVM+ƃW3;#t+G;u_^]UQQSVW3ىuu9u3jEPt{8jhj0jujj0t4EPpXPPPPjVuVVtVuVu`}t	u}t	u _^[]ËUe3VWM{u8EPVVEPjMu
Ɓdt\M_^]̋U43ĉD$0S3d$VWu|$,d$]\$3|$L$T$D$PD$0PjY*u
D$
zV03PPPju:`t.,V03PPPju`VSjZKd/DWSjZVSjZWSjZLSt$jZD$ˍpVPj_ϭ\$jSjZ辭hMj(ϺYYt/L$	fFD$D$PQN	3@F F$3*ut)hMjiYYt
 ``3teHA;r;rJ?Pjt5P1h\WVI	x
QVgVuPy	Pc3AhXt;utptuƃƃ|$tT$D$jP3|$tt$dd$ttPNjL$<_^[3]tLBBjcE۽u3ۋt 9и~ȰPY|tPt*tω]MW莱Y̋UEVW}37- tRt/Htuhhj6jWGE5MS7M|5uj^_^]̋U(3ʼnES]MVW}3lE- tuhjjW^X4uVE%Eu`uEPh/E%YY%MjPEEu؍}𥍋}إu𥥥9Eu`d3XuQhE%Eu`uEtPhRuׁYY%MjPȉMu-uIEPuȉMt3QuhjuM6M_^3[肴]u؍}𥍃|}؋𥥥uuEuu9Mu`룁d̋UuM3uu|jPB]̋UM3VuWVu|ujP苷ucS38tuFjh9uu	htS6u[_^]̋UeMSVW32F}8uj2^UMjhUtVhjU3CShEPj|U薭}tVuhDh]EtO2t$t t:Phh%3ωtr3tKMth_^[]̋UuM3uu|P謷]̋UuM3uj|P]USVW3ɉMMGltgQEPQhQQQhh(uFEP<Pu)jÉEEPjVuu$uj^3F}t	u}t
EP_^[]ËUSVE3PhS]hh] uNWj_E}P<}Pu.EPEPEPSuuTu9}u9]_}^[t	u}t
EP3]ËVW~t	v貪Y3N~~~Fv薪Y~_^ËV~t	v|Y3FFF^j+F蕶}3j	wwwuuGuX$GQuȉ_j	Z_踵M3VV螵jĩY@ËUEVWt5S]3WxEPuWSx;wu
z3f{_[^]ËU;r;M%]SWO$_tVj0փg^j0jW跻3_[jVFU܋ى]Ch3!}!}@lPElC40E;~uh0h36EYY;uEuh\hxYY
ux؅yShjpܷhhR]YY	uxhs<VlK\xGDuSd9W<;uVx3hMjH貮YY}ux&GGw@G @gDh`h(w,w0w4www8w<w@YYlUyp,֋G,URPq<֋C<Pxy
3u@|hh/YY!MuShuuS؅ySuhu}uh4hYYup,֋]s<VlC\PYVxE3ۉ83tYMtQp֋
ËUQQAhSVWXly<WM]l0WxyPhPj'ðSlWlMF<;AduvFDupA4P
3E9~4QhhEp
WxSxSxWxhxhmYYt+_^[]ËSVWFhXlðSl~49p
طhhYY9?uSx_^[ËUQQS]VUM3҉UAh@l9uF@D8u	oUlЅyVRhj4MSuVЅyUVRhjY#3}tUM^[]UQSVW3VVuЅt)t$tVRh(jE3GUЅyVRhjUtAt_^[]̋UhLhYYML	]jTh`o}ehhRYYGDt%MQpxEGEt.w,e1E0Ph@NQ}]l3ɋ;u.AuSEpyWhju,Vh0NjjSsWhȋEE3@Ëe}Љ}Whh$jUj[]yWh<늋Ex0u
@4Ph\jjh[yWhpNE}O,G8PQr,֋}/EE3@Ëe}̉}Whh$jj[]yWh}w8WhhODEG,WPq֋}/EE3@Ëe}ȉ}Wh h$j3j[]yWh@jE!XD^}5EE@0Pq֋}/EE3@Ëe}ĉ}Whdh$jj[]yWhEE@,jBhPq ֋}/EE3@Ëe}}Whh$jHj[]yWhz}G<EPleWtB;w:
;r+tG"ee܋E܅t
StckE}uEGH;r"Q5։E܅t
HeapE}uuxw7uGd}G<uxEG00MQjhjjjjjuPNV}؉]3EE3@Ëe}}Whh$jEy1Wh0juWhTMEH<}p,3E܅t8HeapuP5֋Ǎetjdho!}؋G@h@lE3ۈ]]M]hlhBYYp,։_@EGEGEPEP]؋s[4hxhYYs${(EC,ẺC0u؋FЅw39Xl]MQp}܅tj[]EEPFp}܅uE]ԋVBM;HMEf9jSPEP}܅ujSEEPEP}܅sEN,1E࿃PuQN V }.EE3@Ëe}}Whh$j3ۉ]yWhjj[]uEPEPEԋuj[]"EE3@Ëe}}Whj[tJtv,M}܅1fDjjEVhPEPue`=r
``t6`t+`=	t`EF,jPq֋}܉]u4EE3@Ëe}}WhjVu؃NDj[]yWhj5.}̅t}Wh~@t}Wh(h3}܃}t.juЋEu`PhPjFtkxteE}t	p}tFp]$3@Ëe}Whj}Eu؍EPEPv4hxhJYYf$f(f,f0&j0hoҨhthYYp,jY3}󫸴fEKDeC,0jMQj_WPN8V8u}3EE3@ËeuuVhh$jExjhp&uehh^YYN0tLeQp(EE3@Ëeuhh$jEE`0EH,tiEjQp։E,EE3@ËeE؉EPhh$jE}}uh$juffExj,h@p&ى]ehTh^YYeC,URPq֋},EE3@Ëe}ԉ}Whph$jj[]yWhj}eEE@,URPq,֋}/EE3@Ëe}Љ}Whh$jj[]yWhzMA8;EEA,jPq֋}/EE3@Ëe}̉}Whh$jj[]yWheE؋MA8PQhh}ufEUB,RPq֋}/EE3@Ëe}ȉ}Wh h$jj[]yWh@zEEH,10Ph@NQ}]3EE3@Ëe}ĉ}Whh$j"EyWh<Ex0u@3؋p,֋Ҥjhp耤u؃ehhYYeF,URPq,֋u,EE3@ËeuuVhh$jkEyVhjP33M؋I8;M+j hp٣}h(hYYO4tQpփg4NjH0tMeQp(EE3@Ëeuhh$jj_}E`0j_EH,(EjQp֋u/EE3@Ëeu؉uVhh$jHj_}yVhj.EE@,Pq֋u/EE3@ËeuԉuVhHh$jj_}yVh`jEE@,Pq։}/EE3@Ëeuh|h$jzEE`,}WpFËUVhh9EYY9AtjY)Fq0^]VhhYY9quF90uAv6^jY)VWhhF@hxlY Y9AtjY)Fq0_^ËVWhhF@hxlx YY9quF90uAv6_^jY)̋UVWh W1uNYY3ɋ;u
Au@ N3ɋ;u0AuLPWEYYMQp3.h`WYY֋hxWEYY @_^]̋UMV3FqFVh|hv^]̋USVW}wNVhSCuthpSx&'W&_^[]hhYY@jThp茟3ۉ]]؈]}WhhEPEPMut9]u
W}EMt
9]tE]WhYYuEH4M؉M0uF9Xu	9X
]ЋHtGEPEPWE3҅‰Ut*j	Xf9EtW}ESMM؉MӋ˅F9XjYfM}MQp}uE}uċG@;psnEf9t_jhPEPuAOAƉEȍEPEPq}Kj	Xf9E6MM؉M
F눋M؋u܅u
+}tuhNQ0֋M9}1uSSQNVEE3@Ëe}}WhjE3ۋE@t>9Xt9E}t%p3@Ëe}WhjXEEPEP(hhYY@h<hYY3̋UVh`VEYYt<t0t$ttu0h!hhhhhVYY3^]U VWhh_}YYp,GDtG@@MG@USR3ۋpQΉ]]]օyG@.fEfuEuG@uuPPh j9]tu]9]tu]}[t	u_3^]hhyYY3hhYYY3UQVW}wt&u9F3jY@F@FF@VwWHljWLWP_^]ËUjhX6dPV3PEd~Ht&tOFPfHNMd
Y^]ËSW_LKutVj1^_[jhq}3uGPGH3@ËeE`H@EjyFك{H@t5CjPEeuˋuKQoj4FuhM3j ]fYYEt3u}wl&VEEPCu_]}u]uMDEEPMҞ}܍EEPM连}EEPEPNuXMuEuu.j0֋Eu}ХHEP3E>ËE8j0F[E3ɿ@ىM]MM9HHpjVu!]EP2ҍMZE2PMDtVW]}]EPjuyWhjmEPjSyWh֍EPjuyWhX빍EPjSyWh랋MЋE9M9EEPuyWh@hEPSyWhLE+Ej_Eĉ}tj3uԋMftVuzttlu	t?
t:EMȋutx6}Guԉ};}ru3FEth(jWu%WhPuQuhjwWV}t	u}tS j
Gك{HsjVu }eWtm}tgu!}	WMEPEPKu8;{t.GEt$Pu}tE@CPWV!j8G譒ExHpjVu}eWu
WEu!}	WMEMQMQȉEu8E;xtm}}u	eEuM˚MPEuE}u.tj8M3EZË]uVj[G裑ى]{HthsjVueEK;t0xKPE}PHtj8M׃{u3!}KcPV艐E
Ãe]}uɋUQWHt@VjwV OE;t@t`M賙E;GugPV^_]j(G>uE3ۉ9^H~jW} Ẻ]PEF0u;tyFEtQEP}tMEPSvy}t<MEPSvx(EM̃P[uMEu;pu	EEPW@3jGVك{H@t_CjPEeKE;t4pt~tMpMNE;Cu̍K3Q豎USW@{Ht*VjsV MVuWC3^_[]VN$tN^9#̋UVWu@t0f}	t)f}
t"EH$tuu<W_^]̋UE@VWx$t"H$uu{_^]$̋UVut!}tEH$tujuW^]̋UVuuWEH$t
u^]̋UEH$tЋ]̋U}@uWEx$t
uH$ȋ]UQVW}wp&ur.F3jY@F@FF@VwWHljWL_^]ËUjhX6dPV3PEd~Hp&tXFPfHNMd
Y^]j4G蒌}H@IGjPEehMj Y؉EY]t4ul&}sVEECEP}3ۉ]E}ueuM賔EEPMA]ԍEEPM.]܍EEPEPO	u؋XMuEuu7}j0֋Eu}HEAEP3EأËuu蓊j"H越ك}@tq{HtksjVu eKE;tCHMt)HEU@:࿃PQO RW x#M虓E;Cu3VWhjRjEH}H@wjVu ue}}}ueuMԒMQGMEQu	E};xtwuYYyExuE;xt%OtUAAPuWVjpH苉ExH@pjVu}eWu
WEu!}	WMEMQMQȉEE};xtwuYYyExuE;xtm}}ueuM苑MEPEuE}u.tj8M3EË]uVԇjH`ى]{H@tdsjVueEK;t0xKPE}P	tj8M׃{u3!}KVJEIÃe]}űUVWu@uW#EH$tuuu_^]̋Uut&}t }tEH$tuuuW]̋U\3SVD$D$؉D$D$ D$(D$$D$DWPD$XPD$2PM診D$2PM葺D$2PM,zD$ Pjt$yPh|j?jD$83PFVt$yPhҍD$<PVt$ yPh붍D$PVt$yPh8뚍D$@PVt$yPht{D$DPVt$ yPh\t$8D$<L$@T$D9t$ 9D$ 9L$9T$D$$Pt$yVh@jHxD$(Pt$yVhjD$,D$Pt$yVhj|$\$+\$ D$jYL$0L$4D$$f9jQPD$TPjPD$0PD$dPugt$,D$p࿃47PEt$dH$D$HPD$XPx!L$0|$4AL$0j;ˉ|$8YX\$t$t
t$t,t$ RQt$$PVt$4hj WD$HPD$XP_^[]4̋UVu@uWEH$t
u^]̋UE@H$tЋ]UQS]EVWSPu;wtv3YYywE_0^[]UQQSVW]{w~u&]v3YYy6v~t]uEPR3ۋ0u;tMC豋9}uMEWVPS_^[]USYVW}sMU~u+v7YˆUYy6v~t؋Mut,A;uWSjEP]E@GMJuE}0vYYyuMESuPG7G_^[]jLLB裁~E}EEQPvWvgF؋F;u
XFF}t
F;8u_F;xuXKP;u;PRzt5;xu
W%G@G@@GpB%Jzu@B@@x,;8u
W%G@G@@Gp?%OxcNEIA4hM赊eEPMeh(EP̋UVWyw~u%S]3vYYyv6~t[E8_^]jH=jseEYMu~MNωuF}gE@GfFZQu jj?̋UVFl&PEtVysY^]̋UVEtVTsY^]USVuW~u$wv?VsYt_^[]VFpF@FfF^@j\<~M]EE{dMՇ{xutMy;suwUB9Xux9u>~B9u)tǀyuMȀxtEJB9Xu"tOHytJAcZH;Kuquw>CACHUB9XuHC9uHCACaAc"B;xu;uvNyuAVF"NUyxu	AxtnAxuQ@A!NFAFAVu@!MyuAVFO!UyuAxu)xu!ABMv;H-uG=xuAQ@A@!FAFVu@ usS{pYNtINEM|hM菆eEjPM=hEP{̋UQQVuWG;0u.9Eu)GE"MVD$P	u;uuE0_^]UjhP9dPQV3PEdFP0EPqvoffYMd
Y^]ËUES3Cf;u	f9u2f;ujhPQ;Ê[]1ËUV;utuVx^]j
YfȉF,̋UVEtVnY^]USVW3t$t$GD$@@DD$9u9u3
jD$P9wG3ɋ94L$ D$O,D$$u<G|j0jXPh$Ph0PjQL$LPwPj0jt$dj	t$|`tt	D$D$$upXO,u<G|j0jh$jh0jjRjZRRQL$\RwRj0Rt$tj$ptTD$PpXPPPPjVt$0t$DVVt/Vt$Vtt$Ct$;_FjW^`|$t
t$|$t
t$ _^[]ËUSVW3uىuG@DE9u9u3DjEPuMEVjEjj0jujj8{jY;tt
tjW^EEupXVjjPQQj0QujjHt1EPpXPPPPjVuuVVtVuVu`}t	u}t	u _^[]ËUSVW3uىuG@DE9u9u3>jEP
uJEjEj0jujj0xjY;tt
tjW^EEupXjPQQj0Qujj@t1EPpXPPPPjVuuVVtVuVu`}t	u}t	u _^[]ËV89pu9AuPqɡ;u^jY)̋UVuPtyPW3ƆWWWWW|3jNh躅3҉蚡3荡8@FlhMjT@aoYYt	IljujX&Wh[hp[h'HPX3_^]̋USVW}3ۋGPD9ht-B@Du(tPh@h,tPh0t\tPtPdtPtP	ݤҤt>󋏜踤4şF;r豟tO󋏨p_4lF;rXt>󋏴4$F;rcktj0փtPhƇ_^[]U\3ʼnEESVWE3E!}j8EEWPux!}uhjYYj2XXMQj8MQj
Pu`Vhj軰EPjjPu`tVh!}u3Vu`Vh뗍EuPVSDtO]`tVhLj";EPjuj^"EPWSDu
`뻋E3uju`Sh|j辯u
uE83tW}t	udƋM_^3[*j]̋Ud3ĉD$`SVuD$,W}3j8SP|$,\$ \$\$$vE\$D	&$03Gjjj
jjj_D$Pj8D$8Pj
u`Vhj誮D$PD$PH\$ӍL$$/趢D$ 0ruԋQff;u+ʋBD$ff;u+T$
EPSD$D$uj^)h(t$ P09(u|t$D$PSWjV@`=%u}uj2^D$PS؅ujD$PSWjV@`Vh8j[n}T$L$$|D$ 0Ej2V5PhjjW^tSFD$tP8ƋL$l_^[3hg]ξӾ׾۾߾̋UESVW-tKtuhtj_jW[pUMjh2؅uXM}荱*UMjj@؅u,E}荰uM}u襥4_^[]UQS]VuWEVSQu8uUV萕_^[]UST$3ɉT$}dVWL$v
6 }39O GtD$$Ph_舝uc}t'|uD$D$ȉL$F;w sJT$멋T$ D$L$PD$PuuS
u/D$u8D$uL$뾋EE EE3_^[]U(3ʼnESVWUjMEQjjPtOWhjQ`zuދu3j_td;5w\N
;rO
]tCuF?q܅t5Stckt(uSEPVjuuV`Wh7uF;r"5P֋؅tHeapߋuujhj葩3EQjЉU܅u	jhľPE0123E4567J
E89ABECDEFf}3Et.fDffDfAF;r׋U܋E3>t;Heapu5S֋Ǎe_^[M3_c]ËU3ʼnESVW3ۋ]9uLtHV$ȉ]UfE;u-Bf;Au#EPVhpu`	9]t3M_^3[b]ËUQQSىUV3ClE90uI9tAWjY3󫍋_u
`UtMVO0j2^^[]ËUDS3VWL$Cl|$4D$3L$L$L$jY󫍃D$ 90ua904?tSh`h| MYY|$|$tt$d$YtTD$tP_^[]ËuhhYY| 렃uaD$PD$PjZt4u3kt$j\VYYt3ft$֋t$oN09#8t$u
P뼋t$d$|$tSd$t
uL$8T$R0PQD$(PnQ9D$tt$Y3ɉL$3ɍ,9u0p3ɍD$D$,PQD$4L$8PQQQD$<D$<Ph4Q7|$4L$Pw,t%OKt$t$wYYuNt$wt$,Pw؃tL$ jhےSYULAlSVWjډD$L$(|$@Y33CT$T$(T$T$T$T$ 0h\h胤K3҃9uSS|$$904D$$8t(SSR0hh,39D$PD$PjZtV4u6D$$3PCCC0hh轣3 CV0hjt$j\VYYt3ft$84uCC39trT$<3D$ 9,uzt$DujW^΍Qff;D$(u+AD$(P3P,ujËT$(V#RL$J0390tT$(D$t
PP3D$t
uL$@T$R0PQL$ D$4PM9D$t:t$Y3ɉL$)90uh h| KYY{3ɍ,9u^X3ɋt$D$PQD$4D$4PQQjD$LL$HPCD$PL$TQ,v,D$ tIPYPCt$ v0hh`L$4KK|$t$wYYu:VYKPVw1hjJb3CPCsw0hPh/3CCCV0hdh蔠|$|$tt$3YD$t*ND$tPč|$ t	L$<K;uC3_^[]ËUDSVW3UjEY}E؉u]B0hh39u#thjɟYYcuMEPI蘅thuċ]S|}YYu2VPVShPh^I3ҋ讕tVShh -3PWxYYtPVShh t	VSh@h3PPW`tVPVShPu3EMtpPQȉMuj^#E3҉Et?ڍ~ЉBEff;Eu+UEPE;sEC;r̋}]3E3tf90uURVURVVjQPuuW,t/VPEVS@0hh֝suWYYu)VPEVSH1hj빋M3APAqS0hPhe]M}tu3YEtWYtS蔊_^[]ËUES]VWU3ɉ}EMM0hh8;t9Xt3;uuYjjuj_N8^F9AtjY)Fq00hhl~uIOl@;u8F|t,E3!8FPW0h@h"|0hhEӋPEPt W1hh›}t.E3ɈNN0hh莛eEMU@QMEQMPu,PtW0hP|Mu8MtENN0h눊EuyUEMPEPu썃uPytW0hMt/ENFQ0h8h3贚Et$MtENFQ0hF3ɋENFPQ0h.}t 3~uE0h8u-t	uhphYY| 0hhޙSF֋πetjS MFuuBehUEPP{jh uIE!~F.P0hh7E3fF!8uE8uMF_^[]U}dUMv
6 E S]Wt3z VuMQЉE	Ut
CEz 3ɉMtlE39xvYB|EE@Eu;|ut]GEE;{]rE t
C<MEAM;J r} 6MQЉE	\$tCEEx E3ɉMjZ@<EP}3ۅtNU3JDtZH;;t
@;ru-kABD3jYZH}L׹(Ó;΍EPٍC#ȋEQu@uVP}PuK8Et&E t$+_HË]jYSKCtCMEAjMZ;H 3^_[]jHW‰EM3ۅf9uf9hMjT8RYYE]t}]Mt:߿xHu}yjW
ExTj[tj1֋Vj4huY‹3ۉ]MQEEPMъEEPM踊En}ąu'9}u9}uÉE^\^`^dJh8]܅}EPjWyPh|j;EPjSyPh؍EPjuyPh뽍EPjWyPh8뤍EPjSyPht닍EPjuyPhmE;Eu(;Eu#M;Mu;Mu~\^`UVdFhNl3NuuuuuPhjc hjRYYjWXEE3@ËeuEEXUE SVu3ۉT$WO9O$FG L$<t
B}UtB}u<G<tqGR0D$0whXh胓L$0>G0D$0wh hTGL$$G G$G<uNE C;#G,upXQPwhhF3҉T$.Nk_H{t	HF}39T9M8M8M}8KueL$@@DXu9hD$PWLPPMjhD$$ D$uyD$CC{t1D$PuCuuuuPu=8D$uCT${tNFNE BT$F;3_^[]pU0SVU3EWMuQމuЉuuuuuu}IUEMPEPv})M􋁸EjYE;r	PV؅uj_}uVSYXΉuԃ9MvhÉEPE􋀴0PtΉu9Mv!E0E4`uUMAM;MrߋEE@EMAM;MrEPEVVuSu`OE0E0븋Et΋MEЉM9utug}9utuZ}9ut	uDYt9uv}4F;r}S)}_^[]̋U\3ĉD$XEL$S]VWD$3Ej8D$(D$,VPt$ VC@DD$tj2^Vhj0D$3PuLBVjPKtVhj|$ |$3ɋD$AVQjP`ubD$PjPu`Vh<jx3Vjjjjt$$uf`VhxVh뼍L$ Qj8L$0Qj
Pu`Vhh3|$DVj@PD$$jjP됍D$ Pj8D$0Pj
6tD$0D$4P3PPPP6Pu`Vh8
ht<D$u/Ӌt VhhWD$(u
D$$383tjWiz|$t
t$dL$d_^[3G]U3ʼnEMMSMV3UWEyuuuuuff;u+	EXtʍQff;u+	ESVuj^MQufGfG
GPwGS9ut)UOfGfGGRuPGS3wGhEP\EP<xhEP\EPEPu8x[EEEPy	P;EPEPuEPEPEPEPVSWuEjPuHy	PW}t	uP}t	uLM_^3[E]̋U3ĉ$EMS]VuD$,3D$D$WD$$FD$8DD$4D$PD3L$t$@L$(|$ T$DD$,tj2^Vhj觊3su3"ӍBD$ff;D$$u+T$#ӍD$P]u1D$03PSt$$VVhLj:D$ 3Pu3BPjLPFtVhj|$,Q|$ LJPyPVht$(3f9j@VYYj\VYYusˍQff;D$$u+ʋBD$ff;D$$u+T$
EPD$3PD$,uj^VSh(t$ P0t$@D$PD$8PD$PPD$DPSV3V0u`Phj݈|$tjW^t$hHj~D$PD$PVD$PVSV4Z`zLD$3D$QL$VD$t$VL$QL$QL$QPSV4u
`D$<(P$D$@Pt$$PYYu
LJ(PVVVVt$TS3Su`Vh8j萇S9ht:\$Du+֋tVhhWu3ۋD$08j^3ۋD$,tPt|$t
t$dtSWFt$_^[3A]U,3D$D$$D$D$D$$T$ SVt$ WF|$(@DD$4ujWXtj2^Vhj艆D$PRPu`VhED$3PD$PQD$PQt$$Q4u:`z?D$3D$QL$VD$؉\$uj^t$VtD$PD$PSD$PWt$$V4u`VhH3C9\$tjW^t$hS蔅\$ u\$Vt$,WSV<D$ 3P3CPPjLP:BtVhS=|$,39|$ PyPVh,SLJt$PjDu`VhhNjt$,΍Qff;D$0u+L$MP3Puj^[T$V諺D$3ҋt$$fAP3PPPPPju`Vh-39ht/֋t VhhD$@u	E8tSW#q|$(߃|$t
t$tS2qtW(q_^[]USVW3C|$t$|$@DD$tj2^Vhjr9htuVhhӅuL$D$PQPu`Vh뫍D$3PWWjLBP?t=Vhj|$ 3ۅtSWp|$t
t$_^[]|$PyPVhDj蜂LJt$PjDu`VhtËt$3ҍNff;u+uPRuj^=t$VE3fpP3PPPPPju`Vh739ht3ӋFt$Vhh豁D$(E3ۋ8U}u}t"E;Et2tuuYYu]̋U3ʼnESVW3ۍHj|SP]]܉]HMpz9EtjLjh 9] u	9]$u3jS$7~j0ESP5HMHFPDLMt̰LEEBV@DDHPljVE HQl@;tCHAl@PhVHAl@UPShmt9] E$ShmeLEPhtD4tr
>h
E8tuPh|M8tu^Ihpt$EWh,V*
3lu(uSPh`jjWDk`tG;=w?
;r01tGE``tStck`uBG;r/5P։`u(Heap`9`WS`E`U0\dhÉEtXu,+։Uԃ2LPjG3uE@E;\s!`UƁE4tu<U8Ha	uHU@HuDC	H7ttLE,HM9] vE,E0@E9]u/tupXPPhh}kU]tB;w:
;r+/tkEDeEtStckEu:kEH;r&5Q։EHeapE9]Ӊ]UȋÉ]]̉]ċ,Mԋ1;k}LֹxEEL4f\H9tN9]unt3H0hh{EEDpEPSEPEPSSPHR8]u00Phh}{}EED}EUȃ6BUȉ};uE@E;EE;Eu0tupXuPPhXh{uˋ}M;5
;-FẢM܅StckMM@]]]9]vlEE8\uOMQHPEPEP@P°SP78]uEEDE؃@E;ErhhzYYӉ]<EăuH@l9>tHE@l9u]̋E;Es]9]
]}l}>M;\8\>0PhThXy9lUEPučGűHhOSSP8]ubEDE0PhˍF;r&5P֋ȉM܅tHeapM܅j_`}|>9]u-H0UPh_jt	\>V8\>}0PhhCxHEPEPOEEPQPh$hw8]tjX	38EH}D>D>|>}0PhXhwH8UPEPS<|P&8}tPD>E0Ph,M3HD>PE0Phhw|>(Hˈ]ȉ]9v|4E:t(4tuM؋HAM;rE}uEPučGuƍHt>ujPE.E8]uDE0PhL*|u3Uu.DE0PhEhuUEԃ@uE;E.1tupX\PPhhuUBUyEW0Ph|hhuUWQPhEW0PhɋtupXuPPhhu\;lt7˅t1U0tj^;t=Kt
u4A;\rօutL9ht[H@luIH迺tWPhhztDt$#uH09`tK9\v`t+F;\r勅`t8Heapu5P9]t@9]vM+Cv;]r3ۋEt8Heapu5P֋Mt}v1H+Cv;]sME܅t8Heapu5P֋Mt+PeteHt*uM4tE3҉M`M~h}tHPxǍ _^[M3-]D̋U4S3VWjE؊؉}hEE]EE E3ɉE9}jW^}3jQ(u(h}QljhE GpX@DEEE9ut>3ҋt6uQpYYuGpX;r׋u]uz}3ɋ]9t!EPEPuub8EuE39UEPEPE$QPPuu!8Eu3S}u~j^Et;:t(ύYff;Eu+uWo_M3ҋR^_E3ɉ}܅t(h}t
Px_^[]jSEb3fE8t]M̋7^3҉UtnpXff;uftfCf;Aufuދt:EMQDRỦE%uMt9'E
EDE83Ҋڈ];[LMtCU0pYYuMF;rҋu]3Ҁtu2S|tu{9uSp&3ҋ9t&MEPEP[u8Eu@39tfMEPEPE$RUPPuu8Et.]uuPUE	3ҍLEM;t?ڈ];}EMU<SV3ۉUĉ]]W}u]Jff;u+UEȋuË]MEE9xe_YM؉MЋM]܃e{E;su3ɉM9v~EԋE$t9Eԍp>xuĥM}AM;ru{0hS=mE֋PEPM}t]QPhhltE3M#C]܋}C;0hhlUEPEPjuЍ|P
}uu8Mt	E3jXPE0hHhElt	3Vu0hhl;uEr&EC0hhkEM}G]܉};}]uM@Ey}_^[]WPhXSkߋW0hh݋U@3ʼnESVW3U؍}Mjh3}̫3؉E]EEEE E9]M!3jVG!EE@@DE9]u
UMjhXuMEPhDU ]tF><tu0h|tu	e4hp,UMjj@EXMEPhUxV}PljVE =r0
$r"tj(X0tStcku#5j$֋tBHeapt7EϋUNEPEfFPjVuuMFjjW_Et Et t t>HeapuV5֍M=[}tM/[h}tEPxǍe_^[M3X#]U3ʼnESVW3Uč}Mثjh3؉EԋEẺ]uEȉEЉEE܉E M3jVE؉E̋@@DE9]u
UMjhUMEPhDUTt>E8tu5h|E8tu	1hpE,E9]t]M*\\uE܍MQhPXP02\ttEjp(M֋1M1[EMQhPXP0[tEjp(M롋}wuuEM!]3VEPljVE wutk3ۉ]tC;5w;
;r,Gt#F-܉]tStck]F;r&5P֋؉]tHeap]j_uMEԅtt7t]qvu];Heapu5Sփ}tMWh}tEPxMǍD_^[M3]7;t2{]LֹaOwfG6;u׋]uEȋUMPEPVSuy9E9EtE܅tu]jW_EtuNY3҉UÉ]x}uN0Pưj
Y39pv1lM4N<YRF;prՋEU0}j
YMtA3t;}E4t
M]MYOXF;urˋEUuBUE;5EUe̋UuMuujujZO]UEMMSV1uW;} k};u(Lӹ_}uO_fG2ɈM8duvE3ɉM9v@4SuJMEAM;rƋu}}EUMPEPjPSM3ut(uE$}E!h(PhbE$˃$Fu};]M_1^[]$UX3ʼnESVW3MԋM}MMjhU3؋MEĈEۉEEẺEE]ЉEEȉEE M3jV3UԋMUB@DE܅f;9VэMhqO}:M܍EPhDU}t>}E8tu6h|M8tu
!+EhpEċMu},EǨvumEtE܋@lE̋E}ԁǜFMuE.u%Et@lE̋E䍺Ƌ]Љ]܅t	X]Љ]܋E̅t"PMQk]܉]Ѕy
tGEuSEPljSE Eމ]Љ]܅t	X]Љ]܋E̅tPMQ k]܉]ЅztOMMtj_EPj}BEjY;0r	%ΉMtH;=w@
;r/)t&Ga&̉MtStckMt	΍G;r(5P֋ȉMtHeapM3j_E;~r	s։UtC;=w;
;r,wt!G%ԉUtStckUu?֍G;r,5P֋ЉUeHeapU3OUẺutSRQMQMQMPuuumE}tSuMWQMQMPuuuDUu(UEMPEPSWu'}[UMMGMtsEEu-8u@UR-8tA8t<uk|0Ut EPRhQEMUGE;rQVU(EMȉ<ΉMUEuUu-9ruqEM<p0W$UM6E94t>EU<Ep0W#MEUxEEAMU;s}uMEątt=tj]_u}]ЋuF8Heapu5P֋Et6t3tuEF;r8Heapu5Pփ}tMMh}tEPxǍe_^[M3]U<SVW3U}ċ٫3jh]諈MMԉMثM܉}MM j33Pa}K]ԋyDE3f9QhЍMHUEPhDUt,>"}䀿tu0h|tu	y$hp}uI,}WPljWE 3}}uJE@\뵃}u맍E럋tt\}u뮃}uEE}9}jW؅fU3jYPEuYGE{3ɉtf9tQhЋ-GMEPh`_KteK^KSsFE>}t!MEPhYu^MuЋM
LuC@E؋}G;}j}_]tClCl3}u$߅tJKJSEMMt}tMJh}tEPx_^[]j^뮋USVMWExPEl3]VMIt6;u}GPPrWVF0vVhPhW9pN91H9X^p33Pr|QVutkjPjVN0Qty
VD3FWu^PSFu襥uEFEF9AtjY)Fq0ux_^[]VWG0N0wWhphVuOtaG0PhWC_^ËVWxWlƜ9pu#9Auq;uWx_^jY)3r4vQuKQYËUQQSVWu7|؉]YYu3VPV7hhU3֋2LtV7hh UjSxYYt#PV7hh ~U}Lt
V7h8hjjS`t(VPV7hxh,UtGrrZQjutHw^7SQFuEF3@PSVhhTE 03j^tSY_^[]UeSVW3ى}3҉}M'BF0PElE!8~ t)N(HNt!~F ]uF]}}38^K?u}t
uet}3EEMEEPS3SSvSMEEMSh_AuBVMPE]uz}@F(F PK]}t	uM]Etux_^[]VMjh@u]~tVEڍMPu#Vt8Ku(}}PQ'RKYA]O^EFF0pPhhRRMF3VW7N7wWhhRu9wt
wYWi?_^ËUQSV3WBXPjE.؅u>~lL׹,,N}u`	<؋P	tE	_^[]̋UUMrC3t@]UVWjh[hp[h`G?gPXU3ɋEAOLwPWDGHtX;tt2ɈOT_^]USVWt~d|$;GD$XL$tt3uPt'L$tt9PuL$utGuGL;D$uӉT$T$D$;eHEXu6	u-Pu샦ƆƆuR3_^[]ËU3ʼnE‰MSEV@W3rEu߅t9;5w1
;r"ltF܅tStcku+F;r 5P֋؅tiHeapt\MC{q1P}EPuESPTtO;Heapu5S֋Ǎe_^[M3j	]ËUQQSVW33GPE
T	E9t؅EPjtiujVEXts3ۉv։6XdžLJGLTGLG98tjY)>F0wG~tSGPP_^[]ËUQQSVWu~ptvp2<fp9pN91HFHXuNIDMP~dt6;t&LÉMru;uڋHu͋u-X<H'tV׍(s?h?^Vt:tWCPPug_^[]jY)VF@DtLVhRD,ILֹ|IP0XVhhLFlLVl^HUVWP7XVhhFLVlHNlֹHFPDtpHNID?uVXuMtDh|2t$t tPh0hK	Ɔt3_^]jhu;‹uuQhxjsKjXXjY;udtE33ɉM
r	RVh\9PRVhhH~u	RVh6u\t	RVh0 9WPt	RVhPT;GLrRVhjJ E3@ËeuhjJjYMEUS]VWE#EtPhWcJYY֋nFhxWMJQQMIDIl8u-_^[]}MQPeLt֋pEu	\uEt\th|auLֹ F33jhuU
‰E؋ى]ԅuQhjIjX!3}MQЋuM;MtXSh$hBI<M;u
GuÉEKl7Euu9Et\tÉE;u?}t \th|XuuULӹTE@j^uXShdhH3@ËeuhjpHj^uENUVWLN׹Duh|"8._^]ËVt<,	u	9uA3^ËAv5	j ^f91t+f9tAt"tPQYY{^j{X^ËUVEMPuuSW}3ۍOff;uF+M,	p;v+N>EPSEuj[<MV1PMj-Xf}PuAPtUM4EP_[^]U SV3ۉU!]W3҉uM]]x4Et uNl&5u
sE}t5u.t`t
 GMV3utbE0h$h@F֋EBhxS$FYYMEPh{tu3]]UEMPhAu6ut]EtWt3ɋ<;<uAu9VA4 't<uu֋ut(}t:;tUEPuuEt<;NtEEUPj	UuUM0؅uj^M3`3B48pUu[lAlCl4p'tujW^=SQ֋'t
tu3ҍsRRVhjKtRKht!t3PPVhjP393PPVhjP׍33PPVhjP}}tDu˥(}uPM}EttU3&uj
E%Eu	ˁ\u)%}u	`dE33t}tMtMm5_^[]j$hu3ۋÉEE؉]jh3ҍM0]EE9]tHh<jBYYjW^MtZ]tLM4h}Vj3ҋu}98u
}tj뚋GlutuIu]P4,	UM/LEPVVEPSU-]E}DEE3@ËeuEMj,hv=U܋u3ۉ]!]jW 3ҍM/!]E!E9]thdjEAYYjW^uj3ҋ|E؀tu&W|Àtu	
WpunjE4,	UM.uQEPhUȋM*u7}E8&EE3@ËeuE]ԅt }tM2hCUS]W;;yLrDV5Xudt
yt+9Tv
\tu;uǸ^_[]3t}t\th|Uu΋TE03j h0vQU܋u3}!}jS !}E!8E9}thjc?YYjW^uj3ҋExTEt:tu1S|E䀸tu	 	SpucEƀtEPuj3ҋMu>uE03+EE3@ËeuE}ԅtAS~jhPv*3ujh uE0E9uthjF>YYjW_bEP3ҋuOuj3ҋmu;uu3ҋJ&EE3@ËeuEut|hUQS]‹UVWjE3^;ƒtgt@t+GXuh,N]3ɄX@uh(+X9|hj	=YYjW^91j398*+;v5uyXtu΃2t}BXtt	^΃2tG3ɁI4t=X4&t#SRuW֋u3_^[]RPhj;uGlt̋Xu
h`39h+0uGl8tX u
hc9puhj_;YYj2Q39l띋U0SVUW3ҍM(EuXtn
EMXbj_+t=4&tuuPS֋UuRhDW:jW`4uVhWȁMu`u
PW@:YYMh*}9Eu`d uQ_ȁMu ` u
[PW9YYu09puhj9YYj2MCluj:Ml)}9Eu` d .ȁMu `u
Ph8UYYMjV&Wu܍}Х}ܥuХ3E)9uu`d@<uWȁMu`u
Ph8UYYMjV%u܍}Х(}ܥuХ3E_9uu`@Kd@<<|hhj{7}u`|
Ph77eYYuX,	UMjP$XMKEPhUCuXu00YYuEP}u
<pu0X4 'tE܋PCpD֋KUguuj^^ChEtyxtd3u9p vZHXPEP6	UO)EPU	uӍO)uEFu;p rEuu}CPPu
`3Euu`d3M'u$ClClhxh-5_^[]UQSVW3ۉ]X#4	}@t(2't'3A t5Xt
;tuuGll!ltXt;uhtQX^##ދ1t.;tHu3tp0tE#u]_^[]ËUSVWjhU3ۍE}PË<u0uӋjuu3ҋu^tGh_^[]U3ĉD$SوT$VW\D$jM<VPtjKd$|$D$Pu8D$PD$Px$t$3ҋjBt$`f\D$ˉ\"sd>$?;uvHuc|$u3L$$_^[3#]ËUSVW3!u3҉uM jh9uthj82YYjW_Wj3ҋq|8tuQEMUj4,	0MEPWU:uXF@DXu3ɉUM98v:40jhR
MUAM;8r3ɉM9v50jhu
ulMAM;r`uju@}u
tE2ҋLu}ttHl33QtFM"h_^[]̋UMVuQWt6:VPVWЋW!%jX3+S:;uAr[_^]Uu2/MtE
VW}𥥥_^uMUhp=?"]U(SVW}3ۉUEt8]tEt]uMQV~t.}Eu8]tQ׋t#38]uƃEtE@EÉ]PS؉]uj[^}3t"MCuC1PqtCu}إu؍{uM"؋#MtQ-_^[]SVڅtdWP6Vhh.Fxx)tutP׋p"yڋF_u9t6&f^[ËUVWj4jWEGEGEGE7GEGEGG0Phh-_^]USVڋыMW3X;u4;u,A;tA;XuXr_^[]UQSVWًUO4o!XWl3t9wuEP=uUOO9qv;tF;qr!ClClhh,_^[]̋UUM]U3ʼnEEVWpup򍕀PhAM_3%'^]UESVWP}t*EXudt
u3_^[]uGӋȉE'u݋uWX֋H MQȉEt
UM룃}tEuGtxPuUjY	3ɍ<AujW^jjG(PTUM^UMjH{UًX3t	9uuPVE}uj^VhPj*uuWHXu!E=uh=uflLtTEuPEPxȀyuhh*YY&%j^Vhhub*CËu}tWU$SV3T$Wt$$t$3ۋu΁\$L$ u:XtSuj^T$Ol_u
rL$ fEBj^uj^t9pPtAjW봅txPthh)UYY%hxhq)T$YY9]tD$PB(UjPD$H	dEL$j[uZBtS9XPuNu5d6Vt$,`tjW^hj(YY5\V`t
jW^h0׋uD$d$D$(D$tYUD$PVtGD$(t$9YPuD$ыIDPVjuSuTuT$D$BT$D$r\$`;u!hdj.(YY6 \$X4&tD$SPW֋L$juuWbXu*GlGlhxh'XXT$(tj^;GHDXu3L$T$,RT$ HRЉD$ St$ t$)L$Puut$ |$(tEt$֋L$0ut$|$ u
D$@	`GlGlhh&D$$L$$3ttQЋ't_^[]̋UM3SVWjh}thj&YYjW^]}tet]u)Xtuˋ΃2EPEP8t5Shj%Xtt	mu3ҋjumu}u
uGE@txPu
UMUMjhuUEPVStM;h_^[]USVW3EuXOl0u
UEP=FtxPuUjYMFUM<ujWXjjF(Pxu֋u$GlGlh0h$}tlt
ubL }uh}u@lt6EˋEEPEPwu;stvVEPuF	`3_^[]̋UL$3SVWjh}t}thhj:#YYjW^x]D$}PD$PtShj#Dt$3ҋj<+D$@txPuUL$UL$jhXu]8dtUL$D$PT$D$u;Ev3~T$D$SPXugXu^;tuMG@DXuu3;jHPQ_tujSW}tbL$h_^[]USV3WˉEjP MU_t0xEPR,UFM;rj_;j^r;UR,xqMA;rgVStWEH OOP Mt8@4Gp0Q3MHCEM;X rȋ3_^[]ËUQQSW3}kC PWЅtBC BBK t+VC4B<}G};{ r^_[]ËVWwh&v F0Phh ֋6u_^ËUSVWt}]tvWhhCtOxPuIXtu9t
u/LuhultӋ3jWX_^[]SVWٍw6VhhGFHP~u>t#6Vh<h6u&fO(_^[?USVW‰D$7;tH]\u6L$QMj*t0tT$jjuuD$6;u3_^[]L$+jhveXEE;wUtL,t=t1bt%tNtuV0zs,le^W|PtCt7Nt*tttjWXRjtXȋE3!EE3@ËeuElUQQSVWuGlEFrreQj؅tV{L׹XKCEp0QpEp9AtjY)CY2_^[]ËVNu9quF90u
VA
^jY)UQVVE;tp	M
E;Fu	^]ËV;
rw+9rwy2^ð^ËUQSVW3uمteE7PVVjSu`zu/3uVtMQuPjSu`t?t7'_^[]UQQSVڋ3҉EUW}RMQRjPtO|uju	j(aPEPujut3ɍEQPQjuMuuPtPEPujuu4jWp^VPj;t
3D#?t
75'_^[]USVW}3MډuE3҅‰tM‹ЉhM3ɋjZQYYȉMu
jYMEEt@u3FtA;3=}SjYщF;3~&jEWpYPQYYt
7Y7E_^[]UQVXW}uhjYYjWXS3C;u2usÈt8thXf;th[LEPEP,E;Fu02,EPEP;uhlE;F؈3hj!YYjWX[_^]UL3ʼnESUEVWuhjYYjWXpEuhuh(}E3Rj^j_t7;w/
;r!utCt
Stcku2C;r#5P֋HeapjSVu
`}WjjVtjEPt3ۍESVjPtSWEPtSEEEEEEPSSEPSEPuSwEtEt>HeapuV5֋Ǎe_^[M3]UVW}3UM uXMSuS3ۅtMEMVPjZE"u8tUMVt>MC;rU3ۅEEXt2thXjYYjWXPLEPEP:EhEPEP E;F38tUMW2tu?uUC;]ht[hXj
YYjWX_^]US]3ɉUEMMMVW}uhjYYjW^~UMQu=UEMPEP}u!UEMSPWu'u8Et}tu}tutWOYt_^[]U<SVW‹3ɉD$,PL$L$ ىL$(L$L$D$PT$.uET$D$$L$PD$Pzt$$D$0!\$4Pjjt$<؅uft$|$t	t$|$t	t$tVzYtSyt$,hWj_^[]!|$ D$8P3t$D$(tzL$Q48tyt$t$d$D$8PjXfD$8D$8PD$$|$DPSD$(D$ @D$(;D$$rD$, fXO`t6`t+`=	t`t$33USVWyߋwUNtvދ6~t;tMStߋE_^[]VFp)F@FfF^@j\<M]EE{[M{xutMy;suwUB9Xux9u>~B9u)tǀyuMȀxtEJB9Xu"tOHytJAcZH;Kuquw>CACHUB9XuHC9uHCACaAc"B;xu;uvNyuAVFNUyxu	AxtnAxuQ@ANFAFAVu@MyuAVFHUyuAxu)xu!ABMv;H-uG=xuAQ@A9FAFVu@uSnYNtINEMhMeEjPM0hEP̋USVWyM߈Ew~u$MVEt6v~tߋMut+;uuESjPE@BMCuUN}&tuMESuPpG7G_^[]UQыxt@?yt?Hyu&VWSىM;1u
IÀyt[_^xu
‹]ËȋAxtVzt3PPPPP:JyuzuʋЀxtB;Pu
Ћ@xt^ËUUV2FFxuPBFA;PupB;Pup0Vr^]UUVrBxuPBFA;PupB;u0pr^]jLLB~?E}EEQPvWv[F؋F;u
XFF}t
F;8u_F;xuXKP;u;PRzt5;xu
WG@G@@GpJzu@B@@x,;8u
WG@G@@GpOxcNEIAhMeEPMh(EPP̋USVW}ًuv6W~Yt_^[]Uj:YMMHMHM	Hf@]̋UQQM3S]VW33!h!lXuu
uAPDqlߍKh#ډ}uҍ,#ЁRVjjUjsu`uVjjjY3`PPPPjj<3PPPPjj׍3PPPPPj֋3ɍ0]QQSjjQ3VVSjjV3ҋMWjYYt	xƋ]WjhYYt	VƉl9huzj^Vh|	j
ht$htW蚿Yhlt$ltWlYl_^[]t"űUVuWp;ht$^htWYhlt$0lt
WɾYl_^]̋UQSVW}XuhhDh|=uDOlEU3PVʾuM`VVhDU=Eu;G3U_lHDEPV{tUEPVdu똾O_^[]̋UMp
$eM|0ȋEɃMEtыM,M붋M0M뛋MMMQh	jjWY].eRekeeveeeeeee̋UXSVWj[jY3]}3MlE-
=1tuh
SRMXE%Eu`uEPhuUYY%MjP؅Mu|t9ut
hEu܍}Х}ܥuХ}u`dr3kuXu
hE%Eu`uEtPh}Ulj}YY࿍Mj@P؅ug|t9Et
hD}tIMqMdUЍMtUčMtuhjWЉEMc3ɃMPElu3}ĥu}ܥ}uĥuM쫫Px}u_?tZtQ؅tDulu܋E}ĥuu}ܥ}uĥ3}쫫xMEy}u
kBdWuXuQ}}u`uEPSEU%EYY%MjP؅M܅u6t2}EtAP|YM܅tE@E;rj
}u0|t}t
htu
hЉEMJ3ɃMPElu܍}ĥu}ܥ}uĥuPx}uP?tKtB؅t5ulu܋E}ĥu𥥋u}ܥ}uĥME}ur`cdTuX]%]Eu`uPhUM܋%P؅M܉U3ɃMu`|EttPh
tBu܅t;jh@
Vxu&E3PY؅thP
jSYYAEu܍}ĥ}ܥuĥuvjh@
0xu@2eFlFlhl
hME}u`duXuRhE%jEYu`uE<PW8YYMU؅E%EMuS39u39Lu+9u#9Pu9u9h0
h	jYYjW[jZ;u)39th
R9u9tvh0
uTFl9sh
RjYYj239th89u9Lu9u9Pth	QhR [3ɋE|E#ljEu}u`
dXuRhE}u'hW}YYu8Nl#u,%`uhEtyhW{}YY}u0E~)~Auujj@/؅u1u-9}`tڍ\ٍ͋MMH_^[]UQWM;u6 ,S]V39t vDSuMF;t r3^[_]̋UVu3|tQh
jujWXUXu
E+Pd^]UVWV3襱u,tt
tjX8E3_^]̋UQQMEPUuuUuMuju谹]̋UQQMEPUSuuUuMuju]̋UEUVuPu+E8uXtuUuPu肼^]̋UQQMEPUuuUuMjuq]UjhP9dPQV3PEdFP0EPUv訰ffYMd
Y^]ËUQVu{F@F@FF@ƃf^]ËUQQVuWG;0u.9Eu)CGE"M#VD$PIu;uuE0_^]j輯Y3ɉHHf@̋UMSW}3ۋÉ]]ELXuQlUMuAlEAM@DEЍ|OhVҍ#ЋERPEPjSSESSPjSSMS|ٍ#ȋEQPjSSESS3PjSShMj葵YY^t	@ËωLuj[Shj_[]̋UVuLt&WLtWmYL_^]̋UEV3-tktEt'Htuh0j'jWpM	MEt]MUE0,M|Et#$ȋEuj^^]UVWV3u'ttjX,8E3_^]̋UQQMEPUuuUuMuju]̋UQQMEPUZuuUuMujuL]̋UQQMEPUuuUuMuu]̋UQQMEPUuuUuMju]h,hv3fSWˍQff;u+APj@S-uPjVVWEuyΉ9pPj\Xt:3Ffft,PuAA;Hj\Xr!=f
uW uW@tP1,tPW3@ËeE3¼jhwoEeuRQEE芹EËU3ʼnESW*"3DžfffEfCVfE3SfEPMKuQff;u+ӍBff;u+BP3Puj^CuQMQ*S)t?t73^jWXM_3[ڮ]ËU3ʼnEVWQ*3fEPP(3G`t`P uOP,Pt1P(WWPWWWWPtP,Pk)_M3^]|'~~ ~?/wjXËËUQQeeVWMQRօuyEURPqօu^9Et!MtEuPq$օu8MWs&tt	t~EtPq֋_^]U(3ʼnESV3W3y9qu97u31EPVqtWEP؉`ƋM_^3[x]jI菲3uEuPhNjVhNxnEVP֋EURuP֋yB;uPhV<Wh VWhLhxM3EEMtPq֋胱Ud3ʼnES3VW٫3Q3PHtnj\SYYuShjhjW^!+FvShVS$
\3f5PPjYFujjPSDuj\jjjVjjjPDžPhDž@P@="u?yP3t(tjQ3Pdtd0Wjp<t8M_^3[x]蠬̋U<3ʼnESVWU3EE؉MPQW]tF3`;stt~
=uWPh?3}tZt
E@E3Qff;u+MQVЉU̅ujXuƅj[ύqff;Eu+	PWRO3ff;uE+RRuԍ<xRjuХV\u`؃{uj2[Pd}tVVËM_^3[˧]ËU@3ʼnES3]VW}؉U3ҋỦuĉUȫUЫ3}諫uq8VtlMEt6ttU̍EPEPjYuEj3UjXMQRRRRPjv"u5vppքuučEP3PPPPjjvEE%ԪPWӁܪShuuvpD֋E̅t}tjMQ3EPd}t	uM_^3[*]U`3ʼnES3MVW}܉U̫3ɉMċىMȉMMMЉMMR3}쫫p֩tEE@Ebűp֋
jXűqE֋Ё jXEԅuM؉M؉EԅtdM[t6ttrhUЍEPEPjYSuEűp֋uԩu4E؋؍EP3PPPPESjpWM؍EPu%ԪP3PPPP%PP%XPuűp֋u3F3u9}t,EPEPEPuu
`}tEPEPEPut΁uujjS]jsztUju3EЅt6}t)jMQ3tPhhEPduȋpLփ}t	uM_^3[/]UQUVRQp(^u
EH%W]ËU(ESVU3ɉWE܉MPMu.MQVpD֋uu؅uVMUtRp֋MtQpօtSEP_^[]EMQSP0NVMuct_URQp ֋oMQff;u+q6PWM:u֋E.'U,SVWU3uVh@hE؉EEEPKMQVpD֋u؉]u
EP}u
WutjYfM؉EEMQSP0NVu#Eu؃PK$S$]O}uHEMQhPNP0u)Eu؃SP֋uMtQp֋MtQp֋MtQpօtSEP_^[]UQUeVRpQ֋Uu<ʸxf0f;1uftfpf;qufu3WtR^]ËUeESVWڋUP|}tj`E
jY+t
W3jMǹ^ff;uftfPf;Qu
fu3ff;uftfPf;Qu
fu3u	Egtff;uftfPf;Qu
fu3u3E*eh\WYYuEWYEEPuSup(֋t(s"tt~	3tW_^[]U43ʼnEEeS]VWShhhE̋EPuVWp֋t6ttEthtFt-HtWdEйt8u@8u;4Eйh8t'\ E0EhjPMMuUQ}t
uЋqL֋M_^3[袜]UQSVWpuΉU3փ{t{u
jA_u%upօu
{tWup,u_^[t&=s!tt~
	3]U<3ʼnES‰MЋM3VW}ډE؉Mȉ}ԉỦU]U܉Ut9UMຜQM؍EP|]jEPSUEPuEPuuuȋp֋ttM躨MQ]x)t%EPSxMuBUEPxJMuEPEPEкM0uue}ԋUMjjuhEt	t	uu(uUM{u9EttE!uũ}tutS}t
EPM_^3[ƙ]U}VuuRQu7p0օt+=s&tt~
p83^]U$SV3UWQEEEE؉]܅u
uupl֋EMQSP0֋EURPq ֋h3ɉM9MX]EURQP0NV6EURPqh֋EuMQPPtEuPEEY}UMPSutuO9Etu!}EPqueMeAM;M*}`sott~aVO-tu?9Ut3f;t39Uu3f;uPuuup(֋u3u}t	u}t
ueMtQp֋MtQp֋_^[]U$SVU3WىL$$L$L$L$ L$$QVuȉD$8u\$L$$EL$D$ttS߉\$CEuΉL$kT$$htLFtEvU6QMP|$ttu߉\$F$L$uT$$ltOFtHt$Uuvv6|$ttu߉\$F$uT$$}tpt$$CD$MUP؅.EL$QSP0֋D$T$ RPq ֋3ɉL$(9L$ D$T$RQP0NVL$u?t$D$(uT$ uL$8up|$tt|$u
|$uqD$Pq֋L$(d$AL$(;L$ eSD$Pq֋t$$d$t$$33ۅtSL$tQp֋L$tQp֋T$t)}u}tjBPRp֋_^[]VWWQօu	_^_^ËUQeSVًMUWu1uSPjuP}uuUVu3MtQpjPsp֋_^[]VW3VVjVjh@ww\u
`PGd_^ËU3ʼnES3ۉVWэrff;u+j\_f99uf9yt-fy:t3)q3Qf`V9r-
;r!at蚞܅tStcku*V5֋؅Heap3Qft3ҍOff;u+BWPYYt+3ҍOff;u+}PpH֋t-uWQW
3fxj_t ;Heapu5SjWX_^[M3蹐]̋UE8sE3]j(JI裖eeURQ֋EPh0EuEM܋EQVP8׋x6f}u/EPjjEPEPxE;w3
tVEPMEtPq֋臕ùGhppIѕE3ۉEP3PEPhVu%`v
{Upu4uF PW؅TjXȋ3EVCC QPCCUShNjjhNWP֋9EQE tT5
3FPPPTWPgVhWPFQQ0Pօt!Qt Whhh Whhh|CsPu
WvVbjYfKRP֋juPWstCC`EtF$UKzu@
"ui2UˈA3u#uq9tCFCF
3ۋtЍu3(s tjX;t~t
PttQpStPPLU$3ʼnEES]VWj3EShp
f;:tˍQff;u+j_M
ˍQff;u+M
;ˍQff;u+ʋBff;u+HU
;rbˍQff;u+H&t63Qff;u+MDtStckˍQff;u+ʋBff;u+MU
;r@3Qff;u5+MP֋Heapˉ3FQff;u+MPFSP藕WPPVtF9vj{_t>HeapuV5֋Ǎ_^[M3d]t3ҍuuuj{_̋UUM/]̋UQSVuUW}3ۋΉu*9]u8^t NSSSuv<u	^_^[]̋UVW}PqW>_^]UEd$ST$3ۋU!VL$L$WQRp Ή\$֋D$u
3ɉL$ET$RQP0NVuzT$ D$L$P\$u^St$(YD$Yt1Pq!|$SgL$3A\$L$;L$|
Md$E8R3L$tQpօtS_^[]UHeESVWP}EPEPVEu
hE7MQPWD֋؅uh@h
EPh`jYfM܉Eu܃u@΋}W֋؅uV7EPu싶W֋؅uEM!]ũuu𥥥@uEtPMtQp֍EPEPEP_^[]U S3UV؉EWEEEPuM]OMQff;u+ʋUrff;u+֍y	?Pjuu
uuhlWV=VhhaME P]MQSp ֋9EE3MQPSNVuzEURPq,֋u]EWuPqP֋u@EPq֋E}Pq֋E@}E;Ep3u}t
EPtVеMtQp֋MtQpօtSp֋_^[]USVW3R}EEE؅u
7EPSW֋EURPq ֋3ɉM9M~~EURQP0NVuxEURPqh֋u[uuYYEPqu!}M!}AM;M|uhh3MtQp֋MtQpօtS}t	u_^[]MjuQpP֋u닋UeSVWuU3Eu`7MQPW֋uBu؅t̋ESPql֋uMWuQpT֋MtQp֋EtPtS_^[]USVWu3ME}؉EEu

7MQPW֋EURPq ֋}~
WEMQ3Q0PNVhuUYYu5tʍqff;u+uU3QuRpP>R؅ESPqluUuMu3MtQp֋MtQp֋EtPtS_^[]UT3ʼnEES]V3EċEMM]uЉuuủuW+xHtHt
WEEEPEPuQp֋39uM}ECtMQ08EMQPEPtuċUMUċM9Etu!}}tEPeF;ua`!EPuRQp֋t)sx~bWE0EhjPSEP$EPuRQp֋uuuċMu3}tuЋpLփ}t	u}t
EPM_^3[|]몋USVW3ۋ!]!]R]Euc7MQPW֋u<EPuu)UEPuuE3ۋM]uMtQpօtSpփ}t
EP_^[]UESV3U!0W3u}9utKtFEhPu؅uu9utd}t^uEPu ؅u=ME3ۅtVpօtWp_^[]}ȋM3E뺋u뷋U,3US]VWE܋MEEEE؉EEE}uuMURuuE܅tEkEE`Eu
6MQPu싶֋dEPSp P<UEPu乨EPjupS֋t4I@UEPu乜"u
uWhhϾ}tqMt UjQRpP֋U]ԋdB-up ֋MPa;u	}Sp֩u
EMQu0P֋EMQu؋0PNTVTuuhhȽ9}t
EP!}EPSp PAuMuh$Spօy#uUhujj}Sp֩@t!UWhujjkEEԋhtK{tEupօCtuUsMus3tu\{uEԋltD<upօCt3UuMssu"u{u3M܅tQp֋EtP}t1Mt*;Mt%Qpuh0hMtQp֋M؅tQpփ}t
EP}tu
_^[]jpI~|E3ۋ}EP}]p֋]EuPO3ҋBEtEut;uUu!8]twU`Hu]]ޅtoSpօtRuSp ։EuSp ։E
Sq$֋؅uuEU:؅Vp ־l3ҋ;u5BuEP؅|uuT}uEUMPuEVuuu؅4_EPu
WSu
jYfMEU3db9]+EEuM؅eEMuQV׋؅xuUuuuuuEEtPyׅx)uϋuV׋uMtVp֋}uEP9]uu֋؅}EPjwtsEЉGEԉG9]tMuQ֋qt%t =	t[؁MC`t/`t$`=	t`؅~ہu
UV؍EPMtQp֋8x̋U$3S؉D$D$D$VW}pW\$ ֋uD$ L$,Fu}T$|$$uUP|$tD$PtVMtSp֋L$tQp֋_^[]Wp ֋оl3ȋ;uAu,Wp$։D$$D$PWp P:kD$ D$(`Qff;u+ʋT$rff;u+֍y?P3Pt$uj_t$D$,h`hTWVVhxh賵L$PD$@$P\$3D$P3PNSVu(ut$T$(3jPut$0u3t$C̋UM3ujWX}u
9Eu]̋UM3ujWX]̋UVu3ujWXW}uFuO_^]̋UE8sEȐ3]UE8ut utt
t	u33@]USVWpڋS39Mt
tu
tuu
8G$t 
tu	}t@Qup,S֋tVhth 豳_^[]U0ESVW3Ƀ}ىMEύQff;u+ME8PV؅uj_j8VSzu3@CC8WPC zE{3ɉMjQt0U13ɋBU@HHrljLj_B9KjY3}K U赬u&`Wuhh 脲3FuԋuVE|CYYu1VPVuhh 9V3ҋ茨t	WVh  3WsxYYt"PWVhd h ^KtWVh 7h3PPs`tPWVh 멋UKHtWuh!KS0cFuU؋KE3Fcu9Etc΍Qff;u+vJjh\!Vpu5Nft(f,tBfu)v
 3F39Ku>3Qff;u+y?P3PCuj_V׋3ɋEttEPj0sMtPWhd!M3Qff;u+y?PpH֋Mtu׋JEtbuHEC$3҃}uuEtEuUWh!h ЯG ;E3҈S$뫋M t.{0ETEu"h!h 聯YYj2EUEPjgup(Q3Fu]EPjhup(u3Fu6UVVuu!3F}tE33 jW_tt{ts3YCtS}tMYt$]t;t3pL3jWup֋_^[]̋UuM3uuuu]̋UuU3eK]̋UVW}3t4Mt-}u#9uuSY0uIB[7jW^_^]̋UQSVuEW}33ۋPAJu!9]tN SSSu6u_^[]̋U SVWp3uΉ]]]֋}UESSSPωu8tPh"h  .SSSSGPS415Vuw,uu(PUYȍEP?uFQh@"Su֋5u
UȍEPu"{VwYY]j[J`1C}UQuuuPQuUȍEPt%}t`1}॥Eu'u"QPh tVwYY}_^[tuAE]̋UVunuA~t
vYSWj~[?t7u9^_[tvV^]̋U,SVWp3uΉ\$3ɋA|$08]tL$(t\$(\$4\$\$,]t
Eud$$L$$uUD$PID$,
uq֩>t	0d$D$P3GtWh$#h 自)|$ud$p`3L$ VVVQЉt$0ˉt$(5tWh\#렋UD$MPJtWh#낍D$PVVt$$t$0jVstPYt$sYYt|$tt$d$YtV|$tt$pLօtWh#U3PPPD$P4tWh($h V}tNjCPt$s t&PYWt$hX$h 3@\upօu3wkD$0t$$Su؛ԛt$ utWt$h$둋D$439|$(u0t,9|$,tUL$SG9|$tD$43PAE|$t	t$辕_^[]̋USVWp3u!}3ۋΉ]uEp֩UEMSSSPI3tWh$h ӧ]}EPSSSGPES41hS]Sw,tPWh$h |`uwEYYtI
uq$֋Mkju؛WPQEPut	WSh,%3jWupօtS]}t
uY_^[]UESVW hRqt6Vt3Yt9h4YYuG;rEPYWu3t
VY3_^[]USVWpډM3!}S֋E!8E!8t>t9t4SpX֋M3tWY_^[]EhupWt$ jPWElEj3YE3ۉMs2tu@u	1)u	@t@Dk؛<t_Dh juEEWPht!EM@EMxuhl%h E uUMVh%h 輤UQEeVjjPjj=tVh%h 耤3}tuӑ^]ËU SVYEWP3UWWWAMPWhhWq}Su}], uj^tPYuSEYYhuS؃j
EP3T;wE#SYux}3ۋEu΋USWhȝSEESPuȋ׍EPuQhp&h Ju]FUWVȋ׍EPuQh&Wh0&h 3ۉ] }}t
uY_^[]UQQS]VWQSPjEhQ3WhluȋӍEP uQh&h 茢VVVVGPV51hjww,u4PYȋӍEPujQh'h /UjSju֋PȋӍEPuQh`'h VwYY3tVwYYE_^[]USVWD$3ɋPQht$0L$$L$L$ Q0t$sYYt$sD$$YYMkT$ uu؛SuQL$(QPUD$PL}uEt@t$pTքt&ut$SsUD$PZ|$tjWt$pփd$t$sXT$(D$$YYM5t$$|$tt$d$YD$PjhjVs^t0PUYD$PuWh(h |$tt$Y|$tjWt$p֋D$_^[]Wh'Wh'뤋USVWU3]uOff;u+aBȉE3JMQff;u+ʋUBEff;u+}+UGEPVEUh\!?uUMFUWu}@UhP(&uUVhVVCPEV41ujWs,uPdVu׋uuU؍EPuShT(h iuEWpYYtEWpYYu蛋_^[]USV3!]3!]BWu}]U9]uUutWh(h ӝ]3huV\]EujW_uupSupu֋tWh(h j3BUti9Ut}u^hTuuEtM`.uE0p<օtWSh)h _3Bu}PtJjYu}t%uUjDPE0VuXU}BʉU@u3SpL֋EtPYEtPY_^[]Wh\)UQQESWU41uQ؃ujW_Y3Qff;u+VMEPpH֋M^uj_u3P<cSY_[]U$SVW3UM3҉uM}QMQff;u+YPW}uj[Sh)h YuӋkEPWupdu֋؅uLMuM}u7}EU3VVVPR&؅tWVuVuuu}}t
jutWtV_^[]U0eƒeeSVu3WE}]9] u]SuVu/UȍEP;utUG%MP8G(W,eM:uUqqP3uUȍEPjtOEM@EȋuEttt
} 39] t7huP\EWQh*Qh)h >huPEUEPjY
Eth9] }}Ћ0\vtPuuUuQE0u}V-UMQ\}9] tt	E0p@օuh}9E-Ej;0YYu]UjuSBUȍEPrQh<*j,SYYu9EE{+FPjERVSVeE3PfpE0p<֋uEPEPuTUȍEPuQht**uuu6UȍEPuQh*h ZEtPYEtPYE_^[]USV3ۉM!]!]3W}E,h/\v(;Lv8,uPu؃EHtjW^V3EYuE h<uuEtIh0YYtEh0YYtjW^EuY1E(hH+3Y@EEY3YEEPWup(u֋ut3pEuEt0tt;uWupl֋EMuUuWuP8t'Vh*uh*h 'tSY_^[]U3ĉ$ESVuD$@EWD$43jDP؉T$ L$8D$pt$4P4\3΃D$(D$3D$$D$ Qff;u+A#D$@PVD$Dt$uj[E3ɉD$8t$<Qt$[L$4PQt$@hT+t$\t$003Ƀ$L$t$,t$Ht$ F?t$u!t$t$Ht$ t|$L$8L$8T$hL$LQt$4MQL$dQ؅j9D$LD$hPuut$@p0֋؅Sh+h Pt$t$PL$T9L$tt$Y3ɉL$D$ u#T$4D$ QQQL$<Ph؅mD$ L$0d$L$HT$R3RRRQRL$hQhRPt$@,t^t|$fD$$tVPt$ 3t9|$tt$<PVYt$4t$<ht+t$XV0 |$tt$d$YD$ L$HD$:t$t$YYD$$gD$XPuut$@p4֋؅t$D$L$8t$MtWYD$3ɺ;rT$(6ًt$tWY|$tt$YtV~D$ tP~$_^[3K]PYSh(,S6h+h |US3Vu؉EEEEPRU]W}?t?t?udYtaht,S`YYt9?u?u?uE Th,S`YY>uEPjEvdt!PVh,h EP3PPhPSvt"PVSh8-h ҏuvYYtahPv؃tL3Yt u9E ?u#?u?u]eEPjvdtPVh,h !3tSY_}t
uY^[]̋U$3ʼnEEEEUMESVuuW3ۋMh-Q3fE`YYUh\W`EYY9P\fEDP\fEuXuXYjESPTM1FrMEh-u`YY
h\V`YYujW[9]t}G;sm]P\fEFP\fEuXtVuXYtHjESPTMAE@MEDwG;rEE98sOjWXM_^3[G]USVWEPpփeuEu
$t2ۋUjPEPju%tWh-h 裌d}t<%,P%Pց4VpDQuuu֋tWh-3upL֋_^[]USVWp3uM3ۋΉU}]֋t	tuw3thtct^utttuFU`MPjuEP]EM:
EuwSx3ۉ]G|}t
tubtUM欛VhPjuuut Vuh0.h tS^x}_^[]USVWpu3ۉUΉ}]9]ujW^t3huu\؃tڋ3Mvn}UEPEPutVhp.h LuUuutSY_^[]U3ʼnEEhE83SV(\@W}PMp`QΉDl֋
`$q3҉<3Bd#‰Xtu9Mt00tt	;tu,,j\Y+%APXtE\8rtVhh.h ؈XDžd<tA`PdP\uQDtVh.h {3T?`#lu9X?t?uq\`dXWuP
d\t!NjlBGdAlT@lT+\39zldKHHPQQT4PlP3QjjjPH8Slx39AA9t	81TQRp4l 03l)89Ljh@pp@3ɉ<9qً4jh-Vp
f>S΍Qff;(u+If<N>QVhdl3PdFPVVjjT8l3҅t9vA8xA9t?Q03llPdPVVjjH84l3҅E9A88us4QRp4l03ȉllPdPjjj3P484P<l3҅9q9vNff;u+uPRtSlVIqNQWtWq,Vhh/}L@4q@<ltQ03ȉlL<3@؉<@9\l8@8<L0$ ltQ03lu
TP<u
HP<XtVhDVh 3PVhDVlt)WYWVhhP/h 70uXXpPtVhh/p`fhh@P3DžpQpDžtPhQWVDžx|tPYVWh/k@VYYujW^XuPP`6tVWh/*h`,tYuDPWV3\t\v@t
@YM_^3[L<]t
tutPۋہ㬛ShPjuW	oVWh0.bUQQSVWj3MV}uj^j7ZwDuqjV@00I@uj^Hhj
ZWSu ht WWVShH0h 蚀3M8_^[]ËUQQSVWjZω}uY@00Qff;u+AEPVI@u
j^M
US20_^[]ËU(SV‰MW3ɉEPMىMMpΉ}uEp֋uE܋Eme\SEPup PMQff;u+q6PS؅uj^h-֋Au֋Jh\֋<EPjupu֋tVh0h ~hM3Qff;u+q6PW}uj^2h\!֋觴u֋谳33PPFVPWSupt#PYVSh0h ?~uuU@3ME9u	9}܅y9u}u|Muu}WMt
U94t;ًuɃM9uu41qpBUMuEEM0A3}tSj}t
EPtWj}tuj_^[]Vh0h }뫋UX3ʼnEESVW}3҉EUQHEPuuQp֋tVh1h |3+thtFt,OtjW^Eujtuj XPE90tH+11*E0hEj P}}f97u9uuoE91ujZDuUf97tPύQff;u+3q6PRU
I@uj8Wױ3}tu	iM_^3[:6]uP tVh*h01h ]{멋U83U}SVW}ىE܉EԉEEEEEuy-t t`tjW^EPEPuSp֋tVh*h1h zT}vEEPEPWSp֋t
Vh*h2뵋U3ۋu33ɉ]}Eȅt"}܋tCFA;ruu}]3ɅtEԋtCGA;r}]M	MЅty38]E܉M؋4uu}؍EPv8E؋Mu>UuUBDU؋uMHM̋	уMj@u!uCU;s(MW`VhX2h =y;]Eԋ+ʋEtMЉM}؍MQPuzE؋Mu=M̋UuUBukU؋uMHE̋уMjgu7EP!uC;]sUUVh2/E<tGE38}t
EP}t	u_^[]UQQSډMV3WG@90uQff;u+38EjYE;w_rwXPVuj^B}-u-UPܭuUUh\Ϭ_^[]U0SV‹WEP]p֋
uq3Eωu܁uuuuЉuMtS$3AM1j%Y jZ‰MuMuE9uttuEE9uu
9uu3AMΉu؋#څtt	tytttoutttuWU`MPjuEPeUMhPPPuuBu|c!}EFy3}u7uMESPVuutWh2h uuMt
}t83ҍEPu%,PuuR#EP#EP#EPuVp֋u3F3uЅtWh 3dۃ}tuUS]tWhh32t)}u#UjuutWh33EtP5bupL֋EtPb_^[]USVWpډMSփ}}t-UM Wh3h Mtu}tuGSp@։Eu-3ҍMGuSp<օ}Ej/p }YYpt$uUjVutWh$4Zt.UVumtXWh*hX4h sB3ۍQff;u+y?PSMuj_V׋i3ۋ_^[]USVUWEPp֋MU3E؉EEEtVh4h r}twtrtm]`P3PuuSp$֍UtV0h4h qr떋]3Kff;u+3}ύQff;u+ʋUrff;Eu+֍qu6P3PMuj^LW֋uۋ]tuW>_P3Puj^"6Ӌ֧
PqօMUu%P3PM1wu΍Qff;EuE+A0^E3ɉPQȋEW)EV1VX^3WuM^up$։EEu3tW^EtP^EtP]_^[]j^Vh4h lp뷋USVWEP}p3ɉMىMEPjQup֋u3ҍNff;u+uEPR؅SEPuV(tWuh(5h ou6P3P}tlh\!֋蔥S蟤hP(葤Uup@֋ȉE3Qff;u+q6P3Puj_u֋%3upL֡SpL֋_^[]ËU3ʼnESVW3uمu)EPuxEPEPudMωMQff;u+q6Pjuj^*h\!֋fuohP(a3u}t
EPM_^3[(]ËUSVUWE3P߉}}}p֋MЉU}uMMwff;Eu+t~tyqΉu؅ujWX
ME+PIxu9EutEPxuF6P3P}uVj뜡up@փ3ЉEJff;u+эEMPI@xuku9]vh\!֋E֋0EttE֋+SPnu轡}tu諡3_^[]UQI VWUQujW^>3Qff;u+SYPVMuj^
WӋ0[_^]j,QYYȅt$Vj\3҃^B@f90t^tȋ̋UE0E0YY]ËUQV3EPVVhVRQu u
9uuj^u
9ut}t
uY^]UQS3ۉEWt09]t+Vt#9tu4YYt
EF;r^_[]U(3ʼnESV3E`5Wuu‰E܋މuEx5uEPVVhVVWtPquWYYRh5PW؃DQff;u+A
EPVE	Uh\!NUMhSUMhP(C3UM6EPVEPhVuWtPYuWEYYh`5PWEt'PtM$<0MuYE܀8uAhx5uWt)Wt$<MWYjW^tSY}t
uY}t
uYEtP]VM_^3[#]ËUSE53ɉ]M‰EE5VWEPQQhQQStPuSEYYt~h5PS؃uj^vSt$6}S?YuM3tuuVtS@uWCYr3jW^tWY}t
uY_^[]ËUSVW3EL6EuPVVhVETRSEEtPOuSYYt1MtPSt7YM;D}
wj^tWY}t
uY_^[]U<3ʼnEEEESE3!]؍E!]VE܋EMW3u!}؉}Ex6EĤ6EEE9]tEu<QuEQPtVh6h cf}}ϋEuE3ҍEE0PRRREPREPhRQv,tPVWh7h f_uvYYtHhx6Pv\؃t01jȋEuj^0pQ-3 tWRtSY}t
uYM_^3[ ]UP3ʼnEEUEEEԊES$E6VuوEEW3E̍EEVE}E0}ЉE܉}uEE܉EȍEWPEEPuEx6slt5V}EPj3suVWuhX7h d(M_^3[%]USVWpW֋
Wq֋ȃu!}u
jX&}u
u}u׋E#_^[]SVًW3PWuj_υt<A;r_^[ËSVWj3Wt.PWȋH9xu%tHtQPj_tPP&3҅t
H!<B;r_^[ËUQSW3ۉ]tw9tjV3@t=8t+33ɋ@4|PC2@<u܋]pZP4PP$C]<2u^R2P'_[]ËU(3ʼnEESVW3MM0QVVEVuEp_GPVEETPhVwuS, uI9ut
uYuEEpPVVVGuPVEPhVwS, uj^YtPYIuSYYt4W%RQ9W,wr9O(s3@Ƌ]9ut
O(W, }t
uYM_^3[E]UQQSVW‰MhpPQE33t6PVYYhTuutMPYENj_^[]UQQSVW}ڋp\MS'օu2Sp֋UEP3u3_^[]u}uUSVWp`3ۉMR]]SSS]MQЋjUYP}jZpOjZ@TJu|GjV@TG!0OIG@uj^Kh7jZjCPWuslt
PY}C%tE3PAtM/}tuL_^[]USVWUE3ɉMWpփttj2@873EEPjupW֋uh3Qff;u+ʋUrff;Eu+BEPpH֋Muj_uSuP0}tupL֋jWX_^[]̋UM3ujWX]jxXUSVW3Wtvt
f98tu+ǁ#xY}vLy+t++ϋ}M+tftfIuu3fz_^[]USV3ۍMW3҉]KuPVj|ZNd,WVjZVujZ}SWjZUJlXt
tjWX΃2u@pJl8Mt2Vu/EPSSEPj]u
ƃdtMN_^[]̋UuM3uBuDjP]̋UQM3SVuBWVuDujPXu88tu.jS%Stj6H&_^[Y]̋UuM3uBuDP]̋UuM3uBjDP(]̋UEVW}37-XtKtuh8j[jW^mMmjVutRJt@0<S]#-t9ujVtjVt0[_^]SV33WÅtXuv9uqtu4th|tu	M$thpu4|Pu\uxu;uj2jW^_^[̋US]3VWPPPPj|Khjv+3PPPPjj֋]+3PPPPPj׋E+3LVVVVjjӋ,+EXt	tj$u3PPPPjj*3jXVVVVPj3ҋ*_^3[]̋UQM3SVWXډUuu	AMXD}RRPjROhR{*M3R|#ȍQPjRRP*3PPPPPj2*33WWWWWj *P9uS_^[]̋UMPH]Vt6t2F4Vh@F<Pty	P^ÍF\FX@3^jWX^ËVt0JNJN(J~XtYgF<PhFX^̋UQESV3ۋXW}uSSh|D׋k8(u@׋pDEPSuOu'EPSuM_^[]̋UEV3-,1t3tuh,9jVjWE39|KgEx91t2@@DXu#9th0h8jZVj2JMEt54E0E\91t@@DXu9th.끋EP91t@@DXw9kh-KMEt43ȋEuj^^]̋U<M3SVWCE--j^+t
uh9}XuQhE%Eu`uEPVTYYM|>E؅uy9Eu`edVMXuRUE%Eu`uE
Ph/T}UYY%MjPA؅Mu,9}t'A@DXu9th0h8VrEu܍}Хx}ܥuХj}u`UdF}XE%Eu`uEPh!SEU%EYY࿍Mj@P@؅j^9Eut9EtoG@DXu9t
h.fMp@Mc@UЍMD;t%UčMD;tuh9V~RB\ЉEM]D3;MPElu܋M}āh3M쥥u}ܥ}uĥ}PxPa}uY>tT\tKb؅t>ulu܋E}ĥu𥥋u}ܥ}uĥ3}쫫'MEO}uA`2d#}Xu
Qhjuuu`uEPSPEU%EYY%MjP>؅M܅u7t3uEtAP|YM܅tE@E;rj
[R}uOtKG@DXu!th-h8jRPj2\uhT9j6PYYjW륍PЉEMBj3^;MPElu܍}ĥu}ܥ}uĥ}PxPc_}uS>tN\tEm`؅t8ulu܋E}ĥuu}ܥ}uĥx0MEu$}ut`d3ۍMxA_^[]̋UUXuEM+P	Q3]UVWV3Gu'ttjX|8E3_^]̋UQQMEPUuuUuMuju`]̋UQQMEPUauuUuMuju]̋UQQMEPU!uuUuMuuJ]̋UQQMEPUuuUuMjuA]̋UEVW3WWWWWjHh8WWWWWj3ҋ(_3^]̋UQUEVuPjuMUDjjh|.^]̋UV3}tuh9jLjWM|WAȋEuj^^]jI
3XukuGXDtEPU$=|EEPE}PRȀyu(h:hPLYYE!ËujW^̋US3ہ}V]tuh:jLjW^(W}Xu	jhkE%Eu`uEPhKYYMU
<EucEyPh<:jgKjW^MQOSID]u ;tEPht:j(K@;u:|ϋE|DuEu9Eu	`dt}_^[]jIډ]E3ҋM9U~ EPD#9V$w	+ыN;Dt9X|
;X|	EFEMM苉;AtXp\uK}tth|u0Lֹ:fFE03#ÃMjXx
̋UuM3uBujP]̋UuM3uBujP]̋UuM3uBuP	]̋UuM3uBjP]USVWC{$;Ku3C+H;w1u3C+sEC KPcC {$C ;s
EC +COω|$4;tFPB#C ;;Kt]|$D$tHD$ЋC;4tVC
QP2xQPFA~{S$Cw||$S$C;CuC4J;r;KtC;LYC$}W=KD$t;tv9F~+;uWvVjKD$~O9N}6ӋE0@t	HS;4tE@_^[]UQQQV3WuA+};sAt+U+RWP/B tA+;sqPEPA_^]jHJQu+;r2Aoh:MeEPMh(EP'̋UjHUYMMH
HJH]̋UUM9rwB9ArwjX3@3]SVWHt&NVSPjS4uӋtiu_^[ËU$SVW|$3!D$jY9Fdth;hEYY2_^[]ËNPtD$Pswx|$wۋKlD;t76ClDhX;hCEClDHPD$0zNL3|$tD$Pv|$NT3D$tD$PvD$t;tWPh;jDd$t7D$PvLvT u|$th;h}DYYI39~F8D$FD$D$Pt$L؅tj~tuSNp4NCF F$F(t
3ɋCs0Qh,<hCF;F(tG;~f,'U3ʼnESVW3!]3E9_dUOPtEPvux	9]8G(;Guhh<hcCYYOLtqPE!]P5u]OTtqPEePu]t5E􋐀t"OLt	RrtEOTt]t_tj^t9;w1
;r"tC	tStcku3C;r$5P֋HHeap73ɉM9O	EHEG8GFG8t
3ҋG4G0Rh<hBVuLEPSVuTȉMt|tL<>>MALQ<#>GUMAt#QQGtAtt#wtwpRaOU@MAM;Ot>HeapuV5֍e_^[M3]ËUQSV3W]9^(uFF(^,^03N,uF'E3PF0BPSt=EN(;u9YdtBw[AdD\LyPt'yPt!3WBPj;t4=uE3ۋ\D@Ht
D봸O#tA뢋F(DF,/_^[]ËUeSVW~r3}9~,F(HEMtM/U9h=h?UYY;hxh?UYYEX3Ƀu;u,%u ;u0;uRuQEt-=t&}u=tPh$=h?EEG;~,}\t}tZ39~ vSFXujY3ɍ<EPF(PtN(EtG
W֋ ;~ rN2!dN(E_^[]USVT$3W\$t`dXPh\=h7>d\u(u#U`u
؉\$tj}udu3`ыȅtQL$0h=j=~ht \$S׋jtD$?u\$#Ë\$UdutvhN(26u_^[]USVWىU3Ej4WCl}Euj4WVp^]u Ut=UuLuӋ]-t%t	PXQh=j<UK]t}=t}tZ}MtJp3ɋM;t˺MAIPjuMC3AMM;u벋}uuEp9tVQ)j_up9pu$9Auq;u_^[]jY)U03ʼnES3VWڋ8Fff;u+VQRpj:Xu
tf9qtGr<PQYYu
^+8jY3;7r	,j_t7;5w/
;r!tF܅t
Stcku2F;r#5P֋؅Heap߅jY>󥋵j\XfCl6PCnPS3h>hfDsn:3PhVSh t&WSh>j9jX;
Dž
PPPV?VTtWVSh0?j{9럍Pu$`WPh?jA9h?Vu(`Wh?Ph?j9LPh׋u.8s,43ɉt#;Heapu5SttP|Ǎ_^[M3]ËUQQe=SVWUu
h2ۍPPle,EP0PuvjW8֋uUtD}%=ujh}u	`
`3PFu}t
lu
jhPPx_^[]ËSVمujW^JWhPWl,V0pjhWx_^[ËUVu,uR0v ^]UQSVW33jB]ahPPl,EPj0vjhEuu3ҋtEut"ttSjZ؅uPPx_^[]ËUQSVW`_lt33jB9uhPPEltt=jh,jW0p,փ=u
jhu7XfLJttuGHD	7PjZuux_^[]ËUQSVWhڋ3GlPPljhOltEt3@39`uuu,SjW0v։Et`ui\`Xtu,uu`uu`t	Glwh~,t
N(+6u!`uGlPPx_^[]UQQVWwh~,t
N(6uꋇ``$t	2_^]ËUQSVWWClPPl\d\CljS,0qjWp#PjZetuP0h(@j2KlPQx_^[]̋UQSVjS}thjp2YYjW^XW}EP3ҋu@u3ҋju,Etuu2Ku3t_S^[]̋UW}t
VurjWXtSjSUMkEPdt-9rPtRHutuMWuQVjW_VXh`@je1S[^_]̋UQQEt\UEMPEPuuh@j1jWX.VWjWuUuMW_^]̋UEt
VutVh@j0jWXSW3GWSM#NjX43t
;t	t#׉Xt
;t	t#׉pXt;u#lj…u$$	;tu#8S_3[^]\\t	\Xt
tuOWydtFV75Xu	du\
t
tu
3ҋB6;uNjHu^_̋UVWjW}uu#}u3ҋBG\dXtW_^]̋UQQVut_UEMPEP1uuh@j.jWX1WjWuMuW_^]UQQUEMVPEPtuh0Aj(.UEJ,EJ(3^]̋UEX]̋UE`]̋UE<]UQW3EEGlUVR,0q$ր}tTGlUR,0q(օEu384t+XЉ4t
tu84^_]̋UE@@D4]̋UE@@D8]̋UM2Xtut]̋UE@@D]̋US]t
VuW}t#uUXt	tCjhEPEP
Et6WhAj+u^XWhXAj+jWXJu,uhAj+YYjW^UMCUEPSWEh_^[]̋UQQVuWt`UEMPEPtuhAj%+1jWuUMVuW_^]̋U3ĉD$E$VuQPuD$PuuV3L$^37]̋UE@p]̋UEMHp]̋Uuj]UH3ʼnEES]VEȋEuMԉEWu
9Uu|EPEPEPQu`(}}jjEPut3E9E MQPuUt<JtB;u
;Cu3G3}tB;uu3F23}t$}B;}uM#A;Au	u3@3uutd}zt"E辈8uzA<
ƇWt$W}ȋVuu=tuE؋]@E;EMԋ}EPEPEPQue}tw}tqjjEPuL39uvQeEPVut,E8u$@u5`P`t
E@;tF;urEuȍEPhuuօu3j
XM_^3[X]UQQSUW3E9xvnV5h4v`v9}u#EPujuWu#EPujutEC;Xr`^_[]UMU3V9t	@rt&~t UMjjFPjUY3^]̋U3ʼnEEUEE$EE(SEE0Vu|EUW},}u}uEtEX3ۃe!]!]]Mu`tEt	t3@3EEEtM}j<EjPkEEEċEEEԇEEut
j\Pu
`qtEt3ɋEt3Ut3uuVhFjQP(8]3EkE9\MQMQtu39]EDȉE}pR9]uQtI9]tltPq`!E9]t EtPp`!EpjjuLF;ukE@E9]t9]u
9]u3@EEt8lt.pjjEPjpYBE9]UpjjEPjpYEj3_uk]|tq3ɉM9LvfDȋpEu} t}tD3ҋt$\ċu@>ytyBuu]MAM;LrFuu3E;=
;G,ĉEStckEjWP3EkL5ą?|54e9}3}Q$#EPu18EL5@E9<}ȍ<7uEM\9]ia!]`EO;r$5Q։EtHeapEj_M΃upU tiutbVuV2RE@EjVj\PEu 9Eu9Etf	^u뵋Eutt	ElXEjYPM,,}3ۉ]t?;=w7
;r(tG"܉]tStck]u<G;r-5P֋؉]uHeap]jWSjj5`6vjS|jSj\Px|\)u
9Etju[auE]tPEt8Heapu5PօtC8Heapu5P֋ǍP_^[M3R],̋U츄9EuuPuu2]]̋UEtuUuMhPNu uu]̋UE@l]̋UE@l]̋UEMUS3Sh]VWˋӋ]X+tt	u
Et|t]tHtuzʍ#ȅth,`ύ#ȅttD<D#,ʍ#ȅt|ԅt|EPjU`M7EM_^[]VX3+tdturtgJtYub,^Jt4t'tt
u@^Í^ÍD^Í^Í^Ãt
u^Í|^̋UQQeVjVUEMPEP}tuUMV3^]̋UQQMeS]VWX}tAӋHDX}Mt݋}ujW^h BhYY3ujW^ShhBhdo9u3@PhE UWh}tht,?u'}t!EӋ@HD*t
WuSQ
_^[]̋UE$]U3ʼnEVWuэ}襥t)<3ɍu;uAuuʥ
M_3^]VW6v3>v~v~~_^ËU4SU3ۉE]VWE8}ujh@
Wxu(jY}MU}ԉ}EOff;u+F+M9;EsjVuQPEWu4FP~uEE)EhBV`EYYuf9tUMVSP9]tMjzjW[_^[]USV3EEEW}D9E;VhBjhBV`%]ChBP`YYujt9_Jff;Eu+ыAEff;Eu+MjX++3_Qff;u+AEP3P]EuhCW%YYjz}UtMQVkVOuC3ɉEh@
VKKKKC`YY;pj/VuEYYujW^h`CWYY3ɋftuhCWfj:3YYt3fPYCz3f9ouj?VEYYt3f΍Qff;Eu+.SftEPhCbuj?VEYYt3f3Ʌf9S
C3f9Cf1f;2uftfqf;rufu3ɃCj,PYY3ɅtCfuE?pj?VEYYt3f΍Qff;Eu+Dff;u6ftfPf;Qu'fu3P3ɉKhCWt|Dff;u ftfPf;Qufu3ҋ3҅u	C> Dff;uftfNf;Hufuދuv{3҉Sut1j?VYYt3ftUVu=373/hC&h`Ch,ChBjYYjW^u_^[]UQQSى]VW3Jff;u+BEPVuj^h`Dj#YYVMQPS$؅	7]'@uZE3PVujYVMQPu$؅yE	V7
'ShDjShDh(Dj|YYjW^_^[]ËUQQMSVW3}ujW^!;EPjjPu5`EPjPu
`uQMU}udtW7,tKGuB7Vj@uj^-7PVy3#V댾t!;t3#VhDVjtW}t	ud_^[]ËVVjj(Pu(`=uVj(Pu^%`3^ËUQe}VuWt7FFVEPujVjWt`_^]>u3̋U}t]%]̋Uuj]̋Uu]V3u1Wzff;u+_UQq^jhxڋ}3u8]uUh EjYYjWX3uˍQff;u+u+}uh@EjYYEE3;MvSuQhhEj~΍MEPVuj^uSPEGwu'EE3@ËeuuMgEUQQSVډM3E WtvVff;u+NP|YutI~<{tNP|Yuu!P|3YtFE3f3MjuQtMf_^[]VRFF^jhxڋ}33uS,uhEjYYEjWXlSEPVuj^uSP6EGGu'EE3@ËeuuMEwjhy%3uEE3@ËeuuE2ËSVW339wt397t/wVuj^w7PkGCGC_^[ËUQW;Us3@=vjX6V3jXt(M+S];u
F;r;][^_]̋UVuW}V:t
Oeu	֋W_^]̋UVuW}FPDXuOu
_^]V1Wu
39@:?ujX0yGQtP7HP7JRVjh8_^ËV>t6
3^QUUSVWX3EKMÙ+Et[ˍXMuËM48E4uUt$u}NMt
M~];~:M18t-EM4uUuE8ՋtwE02_^[]UQS]VW}N;vًF;r}PjujX>t.FP6W66VhEhWWVhEh>AN3<FN};t+QPP<F3_^[]VBW~;t+PAPQ@~ON_^$ËVWGujXPjtu3fw7V_^ËVjjt0^ËUSVWu22EPM+uwxrú';|;v̰_^[]Åt%=uyɅuOËUQSVW}'@f9uIuf3Cf;
t} uPhFj
jWXlq@t6tQV;tVPhHFǍEPVfMЅxfu73!PRhFj*
3HW_^[]UQSVWE3!uPVSpuP`zu/u3Vuj^MQPSpu`t?t7'_^[]ËUQQVWEUP3jWudtPVhFWEEPhWdtPVh(G(9ut0EPj;WdtPVhGh _^]ËUQVWEPj
3WutP$Gh YY?9uu:EEPhWdtPVhHh u_^]ËUDSD$VWu
@3f}	8t
WEL$Qh`NP0|$ L$߅u(D$T$RQj0PN4V4uL$Cx/D$(|$,Pjj\$4D$u5PyL$tQr֋_^[]|$L$|$0|$4|$8|$<|$ D$T$RQj0PN4V4D$@PD$L$@WWQ0L$<QjhNhMt$,PVx?D$@PD$ Pt$ D$x!D$@PD$ @D$ ;sL$\D$@PD$L$$VWjW W_^ËU3ʼnES3VEEWPu8EPEPu$U3ɋ~ff;u+QV}t
EPM_^3[]ËUSىUV3u3LWN3ff;u+tj/_f9|pu3fLpu3uPWEu
jW3V;j/uYYjh\!SpuHftj/_f;tЋfu3j/Zf;u3ff;uf9ttXEpXftj?Yf;tQVuYYt3fuˋ8tMxu9jWu_^[]ËVu!F7t3^j:6YYt3fPYF3@^ËVru3^ÍQffu+tf|H/u3fTHu3@^ËUQV5t=uhdHVYY*EPRuuhlHVEP^]ËUQSV3EWtZt$
9BtEPQ8tE	pHWPLXVhHS0}t	u_^[]ËUD3ʼnEV񉕼5SW39=h=du
PhHxj
_PPPPPPhHh,P=P +׍;PwxQAu+ ;;wAMt#tN4IH(Itlt]tIHI;wEt<@t-ttu; INIGH@I9H2t%tt<IIHHPhDIh,PP+׍;PxQAu+P+hlHP;Pm
Py=zuƁ
9rBu+t+|9
u$Gh=sfD9
D9%hdtjRWQP_[M3^謺]ËU3ʼnEVu5t9WWlEPu9Wx_M3^C]ËUQW}=SVSl
LEPuLυyI-}3WV5HVuWhhLIV5L}
8;vxBL+WWVPj5HWh~LʍqAuWE+PQRWEP5<h`I5dSx^[_]ËUSV3مtvWx/Wuz3uWSx;wuz_t^[]̋UVEtVY^]̋VL*tP߲Y^P#SVW3hMjD@iYYt'@{CDC{C*߅t-S,1t3GHj0֋_^[ËVhMhLYY^u@hPjZZ833ËVWjLvhP"%tQ(8tvpPh"_^̋UVEtV蔱Y^]SV3ۋFd*tPXlY^Nt	QF^W~tsWCY^F_t^v*v^YY^9^t
Svl^^[ËUQSVW}ujW[hIh@YYO3ۍQff;u+hMjZY3ɋQOFYYuhCjXPYYjzWӋ1j/vYY3fjX3ۋύQff;u+hMjZY3ɋQжFYYtWӋ51MWj 軶EYYtvr33ۋÉFu
j[hIQvi.t*3ہ QK㮃Wh8Jh@
WjDYYȉMtFYYYYAˉNu
j[hJjvQ-}؅tuQhJguQh Kh@hMj輵ЉUYYt3BB3ۋӉVujVNFBJvt	N*؅u-h@jPPFPhu`ShpKjW[_^[]IV3tVhKh@Z^ËIVjW^tQ(t	,^ËUUS3ۉM]EVuWʍyff;u+uNujW_R)u	E	Nh$L)Njhu)9]uuN(uN)9]hMhPuuYYt!*@HL]uj0tMA΋p#%u+t39@jE0M֋uEÅNjfu(Njgu(hMhdEYYtSSS؅uj_EFˋp=t*'w%tjW_t)j0Mօtj0֋_^[]UQQS3E !]VW9]9]}3j^}EPSShrdu `Vh4Lh@]}Pj؅tnuWX,Sj?PSu`u`VhpLjEPuju\u`VhLu33 jW^}t
uXetS_^[]UEAEA3AAAT*Aȸ]̋UVEtVdY^]yȸT*t	qEY̋USVW3ɉMMM9OGȸu9hMh@蠰GYYuj^hLh@YY3fGىMO;ȉMGEwp$֋ЍMEQPωEPRph֋MuxEt
ͫ3Eu+hPGP(y=z=zOYQff;EuE+ًhMP+hpMPGPk(y=zu3=ztbOYQff;EuE+@;GȉEMEPuuuhMh@7%h@MGMOGt(=ȸt!3fMt諪}t
EP_^[]ËVWgGPW"Rwpwօup_^ËA=,t5=/t*=v=v=t=t=t3jXjXjXËUuuaa D*]̋UVW3~ 9~9~FSu-hMS諭FYYuj_hMh@YYSWPIV^yNB;wuFEtht`pUEJȋFM;w=MtEPBBqPɸEUF CU;^{^[_^]ËUS33@VW *{$KMKKKCC PK4WK8K<KDKHCXC\K`KdKlKpKtKxK|ut֣sLVpWC@_^[]̋UVEtVtY^]SVWjS *NLtͣ~`t~@tvfv	vY~tp
WYvYvdS_^[jJ覰UME3+M
trt;hMh>YYEEsu `hMh0YYEEAu0.hMhڪYY}E
uu((hMhYYEEu%hMhMYY}Eu=(phMhYY}EtMuu
L(.hMhԩYYEutuuMt7u7uuNuuVtj03S̋USVW}33BEjY;tR;tNtI'tDt?t:t5t0t+(t&)t!tt3tt
tEuUE9C@t#sLp։C<CLx<{@t?sLp$֋Wp։C<x}jC8EYu+C$PutchMVh@1;uEt@C48jW^9C@usL{$x<C4}t=t8t3"t.hMjEYYt3ɉHH3Cuj뗋EstC@3hMj趧Y3҉EYtKpP@HPp*‰CltYPG}C@S`t#ttttu
j@X
S3hM3ɉCjZQCYY03fhMhCYY3fC`t.CPjupsL֋t
hMBu"t~{@tG{WjupsL֋uċ73Jff;u+ыK1ACPjXPusLp֋t"vS`uthMVh@_^[]3@̋UE
;w@t7t-t#Ht-t
uEA$[A4VAOAJAEM>=t4=t(=t=t=t3AXA\
AHADAx]̋UEt"tHt3EEE]̋UES3V3CWujW40E;OH-tgt6HhMj莤YYȅG<qAl)hMjbYYȅG$qA)z}t}'uj[hMjwP$YYȅ[YG4AۍGP#؉Yq*.hMjYYȅGAq0)`tOQff;u+YhMj蓣YYSwn7`tOQff;u+Y_hMjEYY~Sw9w8u9w<uG4G8hMjYYȅMG8qA*.=
===t[=t7=tj2	hMj譢YYȅGXPh5hMj脢YYȅG\hMjgYYȅGHAAqql)~hMj4YYȅtoGDAAqhMjYYȅtFGxjP4uhMjYYȅtAM)AqYq΋Euj^_^[]̋US3ۉMVW9]ujW[hNh@YYÉ]y@PUutGy@ut<=RpM֋w(Puuu֋؅u0EM@ErEq$Q4ȉxpV}PttENuEPNEQpMP4PuSh@EthNh@YY_^[]̋UVWup3օtVtQtLup$94uXu98t3GWup,u֋_^]VW3G39~DuXVHuMN@+tFt:t5tt+t
u(N<N<+ttu;tu	3;_^ËV33F9qDu;Q@t	;tu+IHu^+ttu;tu	3;^ËUQQ3҃UU}
DBIEU]ËUQVuu
3(3fEƉ^]̋UVEtVԗY^]V(趗YttP萗Y^̋UU;wAt7-t&t-t
u9OA@JB:2-t#tHtR]̋UE-t:t-t tt]7EEEEE]̋UQS]VWuuuSuu4u1Eu!jW^hNVh@_^[]f@`"EePhupwLօuMtQ<@u	AEPhupwLփuMtQc w$3@jXj3fVW3tPYhMh蠛YY~`t@t61uyIt7Q(jUj@t@dždžUtPiYhMhYYuj__^̋UQSVW}3مujWM7;(-ti-tEhMj萚YYȅAqAqql)hMjTYYȅyC@hMj7YYȅ\P,DhMjYYȅ0Ҁ{`t Qff;u+AEEhMj辙YYu--t?HtWQuwhMjcYYjQq{`t Qff;u+AEEhMjYYt=uShMjYYtf+Ήu2tj^_^[]̋UQQVWuuuS3ۃ~@u
<PtF4P=pM֋w(P4Puu֋}uuCr9}4Pp֋}P4PhNWh@[_^]UQVuuup(dž:džȯdžxT^]̋UVEtV贐Y^]V~`p(Pt舐YvfY^̋UQQS]VW3uujWE;dhvbi~`t Qff;u+AEE3hMj譖EYYtTu*?hMj聖uYYt&uMJ~FF~~*3SPuO3u2tj__^[]̋UEdtGt:t-t tt]&]̋UEdt:t-t tt]EEE
E	E]̋U$3ʼnESVuWuuuuVwvt$MhGYYt
Vn	E8_`u7$Mjf貔YYuj[3f"PjiupwL֋؅u!EEdEeEfEgEhEDMQPuEܡwLp֋؅u,ut%u܋uE!]@ErM_^3[В]̋UQSVuuu؅unW3Pit1P{P4Puup(֋؅uuGr%4PMV:PVhNSh@_^[]̋UVEtVdY^]V~`L(Pt8Y^c̋UQSVW}3مujWE7- tptWuu{`t Qff;u+AEE2hMjgYYtLuA&7hMj>YYȅt!qAAqq*Ήu2tj^_^[]̋UE- tt]]̋UE- tt]E	E]̋UVWuuuuu3`u1譊$MjdHYYuj^=3f6}"t0Ph!upwL֋u!_^]̋UQSVuu](unW34PVPVup(u֋uGr3<PPN!tNMWPWSVh@_^[]̋UVEtV脉Y^]VW((tWYY΃f_^x̋USVW}3مujWXE7-W-txtHtWuuhMj胏YYQ;"hMjUYYj Q!hMj*YYȅqAAqq*qhMjYYt]mhMjԎYYt@PhMj跎YYȅt!qAAqq0)Ήu2tj^_^[]̋UEtK-Wt<t/-t tt]( ]̋UQVWuuuuu}"ShMjYY3ۉMt
YYˉuj^`w֍BEff;u+U1APEQwE]PhXupwL֋uTMtMQ蹿E]PhYupwL֋uMtQz[_^]̋UVuWuVu9t_^]̋UV(>EtV螅Y^]̋USVW}3مujW_}7tWuu7hMjYYt!p@Hpp*Ɖu2tj^_^[]U}t]]̋U}t]LE]̋UQVWuuuuu`tF}"t@eEPhupwL֋uMtQĽ_^]̋UQSuuEI؅ucW3V4PMVPVup(u֋؅uGr%4PMVPVhNSh@6^_[]UQSVuWV]qhV'hV hVhVMå_^[]̋UVEtV$Y^]V'^qjJ蛎}3ۅujW\M;t\-ttNt
HhMj6YYȉMYAAYY)hMjEYYjUvdn-Ct}HtWQu~hMj蔈YYEEZEExuHEMPM
hMj2YYEEpPp֋MP|}hMjӇYYEEEExuHMEOhMjzYYE]tHEExuHMEPMPVˉu2tj[̋UU;w.t$-tttHu,Ad-tstOt-HtRxxuaYVWp_^<xu%xu]̋UE-t-t tHt]EEEE]̋USVWu}uuWuQ{`t$"tIUtKǃtDHthHtZtB"t%jUj@Cduj^hOh@YY_^[]
ǃ뱍tՍ덋㋁;u.;u ;u;u3@3̋SVWp֍p֍p֍p_^3[ËUQSVWuى]rh,u3'h/uMå_^[]̋UVEtV$}Y^]VW~`'tbW"tP|YtP|Yt#W|YQF_^-j6KK]3uujWE03;{ȁ,tSPu`t$t!Qff;u+AEE@hMj葂EYY2udhMj`YYȉMqAAqq0)hMj!YYȉMqAAqq)`t$t!Qff;u+AEE@hMj豁EYYRu=1==	=to=}hMjTYYEEEExuHEMPMPWhMjYYEuEExuHEMPMPW&hMj萀YYȉMt3GXP!hMjpEYYtQ)Ήu2tj^̋UE0;wKtAЁ,t/t tt P|tl=1t_=v=	vL=t&=uxu2*xuAX]̋UE--tFt9Ht+t-tt]E#EEE
E	E]̋UQQS]VWuuuSuo"hMj~YY3Mt
AAȉuj^`EEPh1upwL֋MQ3QEh-upwL֋`R3ҍNff;u+6APh.upwL֋9Qh0upwL֋39
tDt
t:uutpeɻMSh|YYuj^h@Oh@YY+3Shf|YYu
j^hO3f_^[]̋;u;u3@3̋SVWp֍p_^3[̋UQSVuu]hunW34PVPVup(u֋uGr3<PN1uPNMWvPWSVh@I_^[]̋UQWuuEuun})tjW_cS3V4|MVPVup(u֋uCr%4|MVPVhPNWh@訿^[_]UQSVuWV]hV'ǃPhV?hVwhVfM3_ $(^[]̋UVEtVdsY^]VW~`'t袬 藬"tP"sY tPsY$tcWrY(tKWrYcX_^?jK[~}3ۉ]ujWE;vp	r$0hMjxYYȉMt!YAAYYl)ˉ:hMjxYYȉMtYAAYY)hMj}xEYYtjUvd
hMjTxYYȉM{(YAAYY0)YhMjxYYȉM<$8^`t$t!Qff;u+AEE@hMjwEYYu8^`t$ t!Qff;u+AEE@hMjfwEYYu ==	u===t3=vhMjwYYEE#&hMjvYYEEpPp֋MP#	}hMjzvYYEEEExuHEMPMYhMjvYYE]AEExuHEMPMPV	hMjuYYȉMFXPlWPu؅u2tj[XzA

̋UEVW;watTp	$tAd($ ==
v{=tU=t/=t=udpIxu2*xuAXPT_^]ff̋UU;wBt8-t'tt
u@E]E
UE	MEEE=-t1t%ttuRLEE
EE]̋UQQSVWu}uuWu"hMj!sYYȉMt3AA3ɉ$uj^hMjrYY3Mt
AAȉ(tɀ{`EEPhupsL֋AM6Q$3QEhupsL֋3ҍNff;u+(6APhupsL֋|3ҍNff;u+$6APhupsL֋"9 QhupsL֋9 *t tt:t"ۍHd1u~QMWhpYYu
j^hOJ3Whfp YYu
j^h P$3f{du%jUj@Cduj^hhPh@藴YY_^[]̋;u.;u ;u;u3@3̋SVWp֍p֍p֍p_^3[̋UQSVuuW3u
<Pu54P5v(P4Puu֋uGr=PEN=tEPNPP4PuVh@蒳_^[]̋USVuVuEuB؅(ttjW[lExEWE34M5%v(PE4uu֋؅uEG;}r%uM4P4hPNSh@ɲ_^[]̋A̋A=ȸu3@ÍPffu+ËVvD*	gY^餼̋UEVh*tVfY^]jX̋AËUEQaAEAAQ(]jXËUE3҉AQAQQ(]̋I̋UAEAHE]̋UQEIEA]jXjX̋Axu3Ë̋A@̋A@3@̋At	xt3ÍAjXjXjXjXËUEaaAEAA)]̋UVEtVeY^]̋A̋A fAjXjX̋A̋A+̋UEV+tVSdY^]̋UV@EtV$dY^]jKouE3ɉNNNNNF MN(*HN4EHN@EHNLEHNXEHF$-8oUVEtVcY^]jL:ouE3ɉNNNNNF MN(*HN4EHN@EGF$0n̋UVEtVbY^]UEUSVWMExE}EpuC؉u}u UM,uEM@;A_^[]UQVt,VE;tpbbYM褧E;Fu踞^]̋UD3ĉD$@SVWD$M3D$߉L$D$ D$$D$(D$,D$0D$4-D$8.D$<0D$@/D$D1D$H2LL$QpL$օtt4L$PD$uVP usD$t$VhQWh@赬thQWh@螬L$L_^[3f]UeSVpWW֋ȋEMujW_h R@S׫YYu3҉PtVEPRuuQC4@uxQMdtj0uNEMTEt
tutt8EVt!HxMQWh`RS(Etj0MօthRWSd_^[]j84LOlًEeE̡Wpփ}EujW_hRh@襪YYMԋQjuuP#3}ȅUuQ
hMjf؉]YYt;{{{{߉]ąuj_hRWh@茪EЋTt
tu+},t}-t}0u\CStcNxJM̉CSF4$}}؉EPEP]跛MjXhRPh@EnË}Ћ]<3h,Sh@G`YY&dt.EPh`Rh@D3ۅtS1^Y}ȋEԅtj0Mօth`SWh@aiUjhYLdPSVW3PEdٍK(+6K4.K4胛K({+Md
Y_^[]̋UQQS]VWEP HQpMVup$/Nuj_&MC;A|C;wuMSthSWh@p_^[]̋U}uA(
}uA43]UjhtLdPQSVW3PEdN(*!N4N@NL	NXNXVNLNN@FN4>N(6+Md
Y_^[]̋UEHt,t"ttt3AXA(
ALA@A4]UjhtLdPQSVW3PEdN(*AN49N@1N@膙N4~N(v+Md
Y_^[]̋UEtHtt3
A@A(A4]USVUW3E߅t[tW:pp\օuLuEWPjVj,}}؅u*N;MuN;Mt3GE8jW[hSSǥYY_^[]ËUSVW3]}9}up֋UEPuj3W)؅uT΋{UuZZ3Ʌt
tu
tuuzt 
tut@Qup,u֋؋}jW[tj0օthTSh@_^[]USVWh Tjڋ聤YYu.jW^hPTh@iYYVhPUVj¤_^[]Eu
jW^hTɋTu
jW^hT뵋SVp֋uhUjYY멋USVWhUjڋYYu.jW^hUh@ϣYYVhVVj(_^[]Eu
jW^hVɋTu
jW^hTuSVp֋uhXVjfYY릋U SV‰MWEPp֋3]E9EujW[hV@VYYU+titFt1tj2[RhW@VEE<EE,EɁMEEup֋Uj2[uΉ]=E+Rttt<VhMh`]}YY2u<x+hMh`]}YYuv<`+hMh`i]}YYuC<+hMh`6]}YYu<H+hMh`]}YYtju;0+ZhMh`\}YYt>u;+.hMh`\}YYtu;+3u	EMuuu샧\uuV
?Eu(pqօtI(Et;tj039}tu@uh4WVFωEAؾ@du3thhWSVsEtp=ti؅t\ShWV۟ϋTPEMȋEM=wyuujjutPQtMEtj0־@tuhXSV貟_^[]`hWhWjW[hTVYY딋U(SV‰MWE3P3Ep֋uEujW_h8XWh@&!EjPu `hxXWh@[Pj@؅uj_C3CEu#UEPSQMjuEEuu}t_MQSQMjuUEPSQMjuUEPSQMjudfEjSfCEjPu`hXeEP6EPp`zu=uj@MQPEPpu"`6&
`ujz_thXWh@}Sj_^[]UQQeSVWMEQuȋtVhXh@辜iWp֋عtjhhpDQuuW֋tVhY뚅tuMWuthLYVh@蜜_^[]j(L]ڋjjEPWuhdY`Ph@U\3;usEPVWt.eEPEԋP|4xuhYh@褛YYMFhYjh@ËA=t =t=ujX=ujX33@ËU0SVىUpWS]֋
SEq`֋u3B΋0E3EEЉEԉEfE܍EPr$؅EMEЋu؃t6t"tj2[QhW]ۃ]ۃ!
]ۃ 3upj2XuΉEE5E+Rttt<VhMh`U}YY2u4x+hMh`U}YYui4`+hMh`\U}YYu64+hMh`)U}YYu4H+hMh`T}YYtju30+ZhMh`T}YYt>u3+.hMh`T}YYtu|3+3u	EMuuEuω\SuV7Eu(pqօtFEt8tj039}tSuh4Wh@<]Hϋ9؅thYSh@w؅tVhYh@EtPtj0օthZSh@_^[]U(SVىUpWS]֋
SEq`3ɋS0EfEfEM؉M܉Mpj2[u]j4Zu2E+Rttt<VhMh`R}YY2uf1x+hMh`YR}YYu31`+hMh`&R}YYu1+hMh`Q}YYu0H+hMh`Q}YYtju00+ZhMh`Q}YYt>ur0+.hMh`hQ}YYtuF0+3u	ENuuEuω\j4uV3Eu(pqօtEEt7tj039}tj4u@h4WVf_ωEV6ؾ@thYSV?Mt؅tQhYV躔tj0־@thZSV_^[]j8LUUȉMċE3ۋMjEXPjEMPQ]ވ]߈]uhdY`P9]3ɋAE;EMQPut(E؋M̃EЍEPEPX,M̋A9Et
M3AE@5hu`uM43Af;uE߈M"jZf;uEjZf;ЊEuM8]t	t8]uM뛃M8]tUQM8]tUȋMjXP8]tUȋMjXPz;]EPSut.E؋M̃jEXEEPEPL+M̋A9EtMC5hu`uM.UȋMPuuGu*jXh8ZPh@EuËuthpZVh@ÒSj@LS}M3Muމuuu藖Mu茖EWp։EԾtM؍EPu׉u{EEPuhWhWhԞhܞVupu֋Et8P(t-}u'3PPPE0uupDu֋uA].#EtBMQMQMQPu+`hZ	thZWh@O}tEPEPEPutEt
UEMtUwEMutUMQjPu#MtEU؍EPSQupLփ}t	uthZWh@膐EMEP0EP@*uEeeYEMEP0EP*uDYgP@)UQSW3GEڅtptlVSpօt	;tuj_tuuExt 
tu@Wup,S^jWX_[]U SUEVWujW[h[@VYY@3eEPpj2[Wj'Z#*E3+Rttt<VhMh`8J}YY2u)x+hMh`J}YYu(`+hMh`I}YYu(+hMh`I}YYuy(H+hMh`lI}YYtjuJ(0+ZhMh`@I}YYt>u(+.hMh`I}YYtu'+uj[GuuSj'u艟\V~+؅u'pqօt%؅ttj03@th(bVYY[ωE.؅thhWSV3M4؅tShWVzߋTt
x4tEtj0־@tEph@[SV虌7}}}O tETEeEEPjgup(Q֋؅thx[S@VEPjhup(w֋؅th[uWءjSwpօt?h[뒋Eph@[V=K}t*}QuϋW؅u.jZؾ@Ej[ph[Vth\SVJ
h0\VъYY_^[]U(3ʼnESVWpM3WEEWp֋EqEEEEEEEуsALt;Wp֋M؋utEPƇt؋M_^3[D]UQSVWpWΉU֋
WqփtdHt%ukEȃtmItiIt>uAYEt,ttGt@!tu*-	% E
tt t3_^[]ËUEt t.IuCYtCʃt<ItjIt]tQ
3tƒtHtujc\.ttt.t"u:t)׸t/,]USV‰MWE3!]3!]P]}p։EtHu jXuE3@uEEutp3ۋMt@UEMPu4u}Eu$tj2֋u3}C;]rtj0֋]_^[]Ue3SE3ۡVWM3pRU}։EtHtu!ثjE[ȫjE[Åtz3uMtCUEMPEu4u
}Eu+tj2֋u3}Fu;sE롅tj0֋E_^[]̋UMt6Et/8sVVh\j^#3jWhP\j؅jWX]USى]VWu
jW^h\3ҍNff;u+FC\t
/tH<+G}PREu
j^h`]WSPLE3fu"PQju^h]h@YY0U3YMEK CEV‰KPQGLC3hMj f@3utd*~~~~~~~uh]h@舄YYj^Ft
;t	Pq~u}Ή^W3Wuth]Vh@规BEt
CtCCu׋uth^뵋E3ۅt;tj0֋uu8qjW^h]h@較YY_^[]̋UVujVh>ptj{^h4^h@xYYJWj
l^VWptj{^Wht^h@GQuNuuu__^]̋UUtMth^h@YYjWX]jL$MCE3jh]}E+]]G]]]ĉEȉ]ME+ZMENEE,uMEWth^Vh@譂G;E|G;EWQuE	ukG;EK|G;EwAEEtMtWPutmu#Cr3@jXMuEGEGh}_uD_P@WuYYthl_VẂMMiA̋USVWjSh_@W"YYMtUjurjW^h_VWbS_^[]̋UW}t%StVj0^'Wn[_]hhJMAuuh_h@|YYjWX|RQjC.eEVEn0@tQh`W:蔮ͳtQhH`WDž+z@UQeSVpWW֍MQuj"P-؅th`Sh@
}tj0_^[]VptjjjfvTP蠜3FVh`Vh@^ËVWxt6jwjdP^jjjfwTPB3FVh`Vh@N_^ËVWxt6jwjdPjjjfwTЋR3FVh`Vh@~_^̋U3SVEEEWup֋}؅ujW^h ah@"~YY}uEUupր}Etut
tu5pEjxthTaVh@})-uUErtXh`uUthpauU"thauUt
haj}uUsEt
tuw}tt
hZe}t"pEjxt7E.utuuUE!Eu}t
}t`u79uuE9uu@}tt6Ut&haVh@n|hbVh@[|_^[]̋UUQuMP]̋UU3ujWX}u
9Eu3Aȉ
]USEVW}WjuuuO؅tuuhbh@>{y?p֋u}}؅thhWSh@g{9u->p0hbh@zu}e؅Lttt	t
t	3ۋTtp֋u3@؅u;>p֋u؅t"؅tShWh@z>jW[p0hbh@yjW[hHbh@yYYt,Shbh@yutt:_^[]VjAPRQj,RthaVh@y^ËUQeSVpWW֍MQujP؋}tj2_^[]UeSVWUERuju@]}u,Tt"N4E$xȥ\}tj0֋_^[]UESVWtLu
uQu֋%tjWVp֋_^[]USVW}uWE؅Vp֋UMW؅u\t
tuNUMW؅u<ut#uupTքuuUMjW	_^[]UQQS]EVWSuuuu'tuuhbh@wj;p֋^thhWWh@Hw3{tyWhWh@vjW_h8ch@vYYtOtEtj0Mփ#WhWh@pvut|t}_^[]UeSVpW]SΉ}֋ӍEPjujV}؅uzQ薩؅tSh`Rh@uPUMW.؅tShcׅt
tu(tj0uM3u؅tj0_^[]U SV‰MWE3!]3!]P}p֋ȉMtjZ+uUu3Gu}u3EURUju4QMt}؅u|Q٠dt%d؅uOEUM4W؅u/tj0֋u3}EM@E;ErShcSh`Rh@Wttj0_^[]U(SV‰MWE3!}3!}P]p֋ȉMt#Htu(uE"j[u]u3EURUju4QM6TUE؋MPj
Su]ql֋]{TE}t-}WpMPWup0$u=pM֋w4Puju֋uBQutj03ۉ]E@E;EshuMuhduhXdWh@r;jW_hTh@crYY%E0uShdWh@r]tj0օthdWh@yr_^[]UQSډMt6CV0;t$WjQvx׋6M9su_jk^[]jdzM3‰EM}ue}URVu؅uUMV؅tIEtBeMEGQEpPdй?G+ȃ@GEPBMeEMt#tQ׋heVh@Wq1jXhdPh@E4q&ÃMu}h:M;EEPM9h(EP"1̋USVu3ۉUMW}tuh`eh@ZpYYTEujW^heh@7pYYiQ9du
e躣theVh@ep!E=PEhpM֋whPuu֋tthe렋E9=PEuhpMPEjpM֋wPuu֋t
hf5EtWtRtME94u 98tPpփu3CESu0p,֋Ettth$fVh@ o_^[]U$S3T$VD$D$D$EWD$$D$PD$$t$ Puju\$uiUD$L$PSuuND$Mxtj0֋t$uT$3u'T$Qutj0փ|$tjWt$pօthHfWh@n_^[]j$M].‰E܉MP3!]3}p֋Vh`fh@Wmtt	jX+t't+u.Eu,$Euj8_u}u!]hMj(YEY}ЃetgG3}MHS6hfh@lMU܃eEQMjujP؅uUԋMWuu؋Etj0M֋utSh(eh@9l6h gh@lG0;FuME؅UuUMv؅5E9t
8t8uuUM؅uxTׄt9E8t
8t8u'}uEuuUuM؅}69wBuQ׋6dw. gW$ E؃@uYYE;EE3ƀtt%Q׋dwgWYYthgSh@'kQ+Shgh@j}ShgShTgShfh@yjvj[hfh@_jYY]jHMN+UME3P!}ȉE;]p}̥@EčEPEPSuph֋uUċN;J|N;Js3@3u%Qu2UShgTUQutt	FuȋpTք)u%hMjh%YYEetBuȋ23ۃ}hMjP$YYEEtuȋ腺3ۃMuup֋ukEEEEEEċL܋MQpօtUȋMPuu E@Eărj0֋]Pjuȋpօu5eMsbME;A+j_hhWh@hhh8hWh@Sh3ۃ}tjWuȋpօtj0օthXhWh@hD(USVWyߋwuFP苹tvދ6~t;tCPuhtߋE_^[]USVWyM߈Ew~u%FPu'Et6v~tދMut+;uuESjPXE@CM`Wuu}FP͸tuMESuPXG7G_^[]UjhP9dPQV3PEdFP0EPvHffYMd
Y^]ËUQVu`F@!F@FF@ƃf^]jY@ËUjYMMHM	H]UQQVuWG;0uF9EuApXG@GgG@GE"MyVVD$PRu;uuE0_^]UE3҉X@D+LT\]̋UVEtVY^]SWT+tVj0^+_[-Uƒ'uRY3+t}tlt@t2t!ttdZ[RUF=tjZ+tt
t
3BjZU
ȋU]US]‰EMWujW_hoh@cYY3#VPp֋Uj2_uEFtpt:FhMh`YYȉM$ux+hMh`YYȉMu`+hMh`YYȉMu+hMh`YYȉMu`H+hMh`SYYȉMtdu30+VhMh`)YYȉMt:u	+,hMh`YYȉMtu+3ɉuj_RuEuuu\uVa}u);qrօt.xt$Etj0Mփ#}^_[]UQSVW3TEtj0M։T9}ujW_hHoh@QaYY|puU\uuΉ@EPLPT"qTuj_%vp\֋T3ɅJ\_^[]V3WTFt-p֋t;hoV@W`ho@Wx`YYthoVW`_^̋UVuuU^]USVW3]}P}Lhph@`}p֋u؍ȉE聕Tplѓu'Txltj0jXω}9{vTTEPC74ENLVEuM]tpMuAM;Kr39{METPC74ENLVEu=uu,tE@E;Cr7}CM43hLpCM43hph@^E_^[]ËVTt(vp~^yVhph@m^3^3@^̋UV+^EtV>Y^]!ktet]tBt'+tt
j
Xj	XjXÃt
jXjXÃt
jX3@3jXÃ|y~~o~	uejXjXjXjXÃ"t6t-t$ttt	u2jXjXjXjXjXjXÃtt	ujXjXj
X̋X$`øøPøøøøø@øøТøøܠøȠøø,øøøøø0ø<øl3ÍI60$*<BHNT̋UV+.EtVY^]V"|@tUt@t4t(ttcj[jTjMjFj
?j8Jt4t(ttj	j
jjjJt4t(ttjjjj3F3j~"~Aj{jwjst-t$ttt	uVjQjMjIjEjAj=.t6t-t$ttt	uj!j jj
jjj^^̋X!$Pøøxødøøø ø̡øøøø@ø4øhøTø|øøø,øøHøܠø\øøøøȠøpøø0øXøDø<øl3ÍIH$*06<NTZ`flrBx~UV+EtV
Y^]V!tmtat2tJtjjjtJtjj3F3t%ttj
jjj	{t~r~Awej`j\j
XjT"t-t$ttt	u7j2j.j*j&j"ttt	uj
jjj^^̋X$LøxøøøøøøhøTø|øøø,øøøøøøȠø0øXøDø<øl3ÍI
"(.4:@̋UVx+>EtVY^]jX;=t7t/t&ttIt
Iu6jXjXjX3@jX3jXÃt&ItItttjXj
XjXj	X̋XwO$øԣø|øøøøø$ø8øLø`øt3ÍIbhntzUV`+EtV	Y^]QtKjX;)ttt	uQjX3@jX3Ãtt	u3jXjXjXjXÃt:t1t(ttt
tjXj	Xj
XjXjXj
XjXËXwg$øøøȠøĤøؤøøøøø(ø<øPødøxø3ÍI̋UVH+EtVnY^]4t.t&ttjX+t	t6jX3@jX3jXÃttjX+tIjXjXj	XËX	wC$4øøTøøøøø,øȥøܥ3ÍI
"(̋UV0+EtVnY^]̋Xt$ttt3ø|øTøhø@ËUvEU@DPE+LTuǁ@D~u
ǁ@|~]̋UV+$wEtVY^]+wSV3NLuWhMj
YYt'XwG\GwG*W%hMjYYt!PwGGww*W҄hMjfYYt!TwGGwwl)tmW胄tKhMjYYt!`wGGww*t"W8u1j0־h~訃Ph@^P_^[̋US]VWHJuSzth~XPh@P_^[]tP%Y%Ħ%Ȧá@Wtt,tW_ádV3~#x\;}X`WpPdF;|ݡ`^tP%`Y%d%hhD%@3_ù肹̡`tP%`Y%d%h̋UT3ʼnESVWj3XučMjQPEHEԉEEP<]EP4u9uvuC;r;rd#t;r;rH;sE#u+;r-jhWV@tMQhWVXt3@3e_^[M3q]d0Vpdd
0о yutB`Jd+;s3ɉ
u
dxu5ƃ^s
CP[UQ3ʼnEUeM3]jhP}3FeE3Ɂ8Ëe3EËU=иVWuukиԸ5Ըuh5ظ<ȉu`-GPjQ5ظ@uGPj75ظ@t=и~_^]
и=иu5ظL̋UE3ɃtttHt
ttjWY]Vhظh!h(Hujhh5ظDt5ظL^ËU5u5D5uh0]V7~Lu~uF^ËU
uYtuYt]ÍMhEP%jHNhMMeEPMh(EPUjHNhMMeEjPMhEPhYu@Ã 3ËU}SVWpdH3ۣpܸd]PʉU33G;thU3u}=t
jY\Eth5u;r:MtU
;uE9Mt͋‰MEP3YGܸ9]33G9}d3ۉ]ܸPU;thU3u}9j[t	j
5h2h2=AYYt3Xh2h2dY}Yu3=t&h
Ytu5Sup_^[]̋U}ue] Ucsm9Eu
uP	YY]3]j,h}E3uEw}u=puu9Et	=tNE}u
tuuu׉EMEQPIYYËe3uu}EuuuEMEQPYYËe3uu}Euuu}EMEQPYYËe3uu}}EVVuA}MEQP}YYËe3uEVVu]MEQPNYYËe3u=t4EVVuMEQPYYËe3uEt	EuuuEMEQPYYËe3uu=tG=tt>Euuu׉EMEQPyYYËe3uuEE	}w
ËUVu3;usWu>t
׃;ur_^]%;
ujh8~e]Ë}Njuue}x+uMU3@EE}]uEuuWSVjh~memxFu+uuMUEEEEE8csmtEE8eEV%8U]j<NsueY
e)ËEËUuY]̋Uuuuuh(h]̋UV0EtVY^]̋UMt*j3X;Es3PPPPP]3]MQuzYY]ËUj uh	P$]ËU$x
tpl5h=dff
f`f\f%Xf-TE|EEȲx	|jXkǀjX
jX
jXk
LjX
Lh]ËUx
tpl5h=dff
f`f\f%Xf-TȲEEx	|jXkǀh]jh~eEuu5YTjNYeEEEPEPu5u܋M
M
EËujYËUuZYH]%jh~V3uuuu]};u}MU}Fu3@EER]}uEuuVSWv%%%U3ʼnEffffffEEDž0@hM(M3]%L%HMd
Y__^[]QËM3M3Pd5D$+d$SVW(衰3PuEEdPd5D$+d$SVW(衰3PEuEEdPd5D$+d$SVW(衰3PeuEEdPd5D$+d$SVW(衰3PEeuEEd%D%@̋UE3SVWH<AYt}p;r	H;r
B(;r3_^[]̋Ujh~h)dPSVW1E3PEdeEhztTE-Ph@t:@$ЃEMd
Y_^[]ËE3Ɂ8ËeE3Md
Y_^[]̋UMMZf9uA<8PEuf9Hu]3]ËUeeVWN@;tudEPE3EE1EP1ET3EM3EEPLE3E3E;t5uO@ȉ
_^]%<h)d5D$l$l$+SVW1E3PeuEEEEdËMd
Y__^[]Q%4%,%(%$%t%̸QRPhL"ZY฼|x`wmcYOE;t1'X\	dhlpQRPhlZYQRPhZYQRPhZYQRPh̀ZYDQRPhZY@<8HPLQRPh,ZY0QRPh,ZY (,$h)d5D$l$l$+SVW1E3ʼnEPeuEEEEdËM3QL$+#ȋ%;r
Y$-QL$+ȃYQL$+ȃY%%%%MLlT$BJ3 OT$BJ3LOT$BJ3OT$BJ3OT$BJ3TPT$BJ3PvuYËT$BJ3gQQuYËT$BJ3BdQ,T$BJ3'QT$BJ3QT$BJ3@Ru<YÍMeQT$BJ3lRҕti^T$B3zJ3pRZM駞M韞T$BJ3E4S/M齤T$BJ3"SMM钤T$BJ3J3S}rT$B3J30TT$B3{J3qT[T$B3=J33UMT$BJ3hUMT$BJ3UM靋T$BJ3UMzT$BJ3Uo$Q(CNT$B3TJ3JTV4T$BJ3/QT$BJ3VMT$BJ3VM顊M陊T$BJ3VMT$BJ3$WMT$BJ3PWjMT$BJ3]|WGMT$BJ3:W$MT$BJ3WMT$BJ3XM_MWT$BJ3,XM4T$BJ3`XMM	T$BJ3{XeM+T$BJ3XXBMMMT$BJ3%XT$BJ3
VM麈M鲈T$BJ3J38YM酈M}MuMmT$B,3J3lYwhMuYYhMuYYËT$BJ3RY<MT$BJ3/$ZMfMT$BJ3PZMT$BJ3J3ZT$BJ3ZT$BJ3[T$BJ3p[pT$BJ3k[UT$BJ3P \:T$BJ35x\T$BJ3\T$BJ3(]uJYËT$BJ3]u%YËT$BJ3]uYËT$BJ3@^zuYËT$BJ3k^UuYËT$BJ3F_0uYËT$BJ3!`_ulYËT$BJ3_uGYËT$BJ3 `MUIT$BJ3J3`M(IMMIMlMdT$BJ3gJ3]aGMHMMHMMT$BJ3J3aMHT$BJ3J3bMaHT$BJ3J3bM4HT$BJ3J3csMHMMGMKMCT$BJ3FJ3<c&T$BJ3!dMGMPMGMM۪T$BJ3J3XdM韂T$BJ3dMM逪T$BJ3emMMUT$BJ3X8eBMM*T$BJ3-leMdMT$BJ3eM9MԩT$BJ3eMM驩T$BJ3fMM~T$BJ3<fkMMST$BJ3Vpf@MT$BJ33J3)fT$BJ3fMMрT$BJ3(gu+YËT$BJ3\gM:M~T$BJ3gwuYËT$BJ3hgRMM+T$BJ3:Ph$uYËT$BJ3hMMT$BJ3hu2YËT$BJ3iMAMT$BJ3xi~uYËT$BJ3oiYMM2T$BJ3Aj+uYËT$BJ3@jMM~T$BJ3ju9YËT$BJ3jMHM~T$BJ34kuYËT$BJ3vhk`M%T$BJ3Rk<T$BJ37k!T$BJ3lT$BJ3J3lT$BJ3J3<mT$BJ3mT$BJ3 nMcT$BJ3yJ3onYT$BJ3Tn>hMu|YYËT$BJ3)0oM0mT$BJ34qhMu.YYËM^MiAMaAMYAT$BJ3`qMlT$BJ3qMlT$BJ3rr\MylM@T$BJ3G8r1MNlT$BJ3$rM+lMT$BJ3sMlT$BJ34sMkhMuYYËM&M1@M)@M!@T$BJ3`sjMkT$BJ3]sGMdkT$BJ3:t$MAkM?T$BJ3@tMkT$BJ3tT$BJ3uhMuYYËT$BJ3`uT$BJ3lvuMIsT$BJ3h$wRM&sMM>T$BJ35PwT$B3J3wMrMrT$BJ3J3wT$BJ3wT$BJ3DxM^T$BJ3tJ3jxThMuYYhMuYYhMurYYhMubYYhMuRYYhMuBYYhMu2YYËT$BJ3$yhMuYYhMuYYhMuYYhMuYYËT$BJ3ynhMuYYhMuYYËT$BJ3Iy3hMuqYYhMuaYYhMuQYYhMuAYYËT$BJ3yMrM(sM4sM@rMLrT$BJ3<zMqrM(rM4rT$BJ3fzPT$BJ3KJ3Az+T$BJ3&QT$BJ3QT$BJ3J3{T$BJ3J3t{M@M8T$BJ3{MhqMqMqMwT$BJ3[ |E
T$B32J3(d|MT$BJ3J3|hMu#YYËT$BJ3|hMuYYhMuYYËT$BJ3J3}uMRT$BJ3hJ3^t}HT$BJ3C~-/heUQ=ЦtXܦW=ئ;s5VMt#QtRp֋Maܦ;r^h%Ц_]"DOd5"pOOO@"OOO@" P0PDP@"xPPP@"PPP@l"(Q@Q6TQ@N"QQ36Q@""RR0R@"dR)"RR66R@
"R6666
 "XSS*727SS@@"SU7" Tx77"TTT77TT@@."T77"$UDU)848XU@t"Ug8"U8"U8"V8(,"xV8999"V)"V9"W99"HW9"tW9"W:"W=:"W`:"$X:"PX::"X:"X::"X;"YB;J;R;))"\Y;;"Y;;;;"Y
<<ɼ8F"HZH<"tZk<s<))"Z<"ZZ[@["<[L[`[@"[[[@"[[\@4"D\T\h\@"\\\@Y"\]]@"L]\]p]@"]]=]@"^^=0^@"d^|^=^@Q"^^
>^@"$_<_/>P_@"__T>_@%"__y>`@"D`\`>p`@]"``>`@]"$a\a>>???pa@"aa=?E?M?U?]?a@"$b\b?pb@"bb?b@"$c\c?pc@
"cc@@!@)@1@c@="$d4dHd@"|ddy@@@@@d@"d@"(e@@"\eAA"eBAJA"emAuA"eAA",fAA"`fAA"fB!B"fDB"fgg@"LgBB"ggBg@"gBB"h,h
C@h@!"th2C:C"hh`Ch@$"iCC"<iTiChi@'"iCC"iiDi@*"0j+D3D"dj|jYDj@-"j~DD"jkD$k@0"XkDD"kkDk@L4"k$E"l8l`lpl@<@Q<	J
J"l)PU^U"mm,mx]"`mpmmx]"mmnnx8^x^"Dndnnn@k@#k"nE"no o@x"ToFFjxw˃|sn|TX+9/=/=TbwIW"0y}"XqqF"qqFFFFFqx1"rF"0rG"\r|r(G0GrxM"rrSGrx"$svG~G"XsG"sssGGGGGGxˣ"tH"8t=H"dtt`HhHtx"ttHtx<",u<uPu@."uH$#(#b%f%$,2,A-O-/)///"vvvxpCKPYPwwVx"HwI"tw2I:IBI"weI"wII"x x4xx!"hxxxxx#"xJ\\1^?^~^^"HyJJPJpJ0J`J@J"yJJJJ"y&KK"zKqKaKQK"`zKKKKK"zKLL"zz{xO"@{P{d{xM"{{{xV"|LL))"D|MMMM"|?M"||rM|x"}M"@}MM 	!N"l}B(<&P&&&&&''7'K'u''''( (N)x)(@)T~"d~t~--00(668(9@:x;0;(X(>-94d8pNXāNH|NlN8N@N8NxOȄd`ʃvԂ‚D.IEaXuo.
$O)PNetApiBufferFreeDsRoleGetPrimaryDomainInformationDsRoleFreeMemoryNetDfsGetClientInfoDsGetDcNameWGetUserNameExWbTranslateNameW&LsaConnectUntrusted,LsaLookupAuthenticationPackage+LsaLogonUser)LsaFreeReturnBuffer'LsaDeregisterLogonProcess+WNetGetConnectionWxwnsprintfWuPathIsUNCWkPathIsRootWPathRemoveFileSpecW3PathAddBackslashWPathRemoveBackslashWFPathCreateFromUrlWuUrlUnescapeW)І,,ȅxG@uptvpvtZ [ @
P\`Zpqpq0qUP $$$P$pJuPvvuPZP;@ Z ܆);Mhvɇׇ4QcuĈψڈ%2?JUcs	

 !"#$%&'()*+azroles.DLLAzAddPropertyItemAzApplicationCloseAzApplicationCreateAzApplicationDeleteAzApplicationEnumAzApplicationOpenAzAuthorizationStoreDeleteAzCloseHandleAzContextAccessCheckAzContextGetAssignedScopesPageAzContextGetRolesAzFreeMemoryAzGetPropertyAzGroupCreateAzGroupDeleteAzGroupEnumAzGroupOpenAzInitializeAzInitializeContextFromNameAzInitializeContextFromTokenAzOperationCreateAzOperationDeleteAzOperationEnumAzOperationOpenAzRemovePropertyItemAzRoleCreateAzRoleDeleteAzRoleEnumAzRoleOpenAzScopeCreateAzScopeDeleteAzScopeEnumAzScopeOpenAzSetPropertyAzSubmitAzTaskCreateAzTaskDeleteAzTaskEnumAzTaskOpenAzUpdateCacheDllCanUnloadNowDllGetClassObjectDllRegisterServerDllUnregisterServerO[``  [0  [`  `ppd  пpd@>;>??0G?@0@`A< =ABCpC`CNCP\@0AANNNQPR>@0\[][][][\[\[\[\[\[\[\[ \[\[][[[][ ][p\[0][@][0\[[[P][@\[\[`][P\[p][][`\[][][ḑeȧfħghTЪܪx`DhL1`D1 |,1|ȗ0TT@t0Td@.-,@/t01\ 0 !hdefg0hLpXl0<\<l$4<0ȝXhT8D<l@l-.<0l,/1 !df,edgh@-.01ĸTTpT$TTT\TThhhD	ih,ihܰXih ihih̰jPjjjjk4kdkد	k	kkt lXltl,llЬ8mxtmtxmh\nh\pnh\n@qllqqpL	q@
 r`rpLrpL sh`sH0s sXs tpLptp\ihtiht uhxuTu\(vHxvĬv(w̬Ȭwih̰wh4(x8hx$x0yyytHzh8zzX{{|,ihܰx|̭
|| }<d}0}h}Xih s ~	s<HH.?AVCAtlException@ATL@@.?AVlength_error@std@@.?AVout_of_range@std@@.?AVlogic_error@std@@.?AVbad_alloc@std@@.?AVexception@@N@Dxȯ: !`,||0tLtLtLHXwGg

 k
-.0)()+*+	

/,1 !1 !defghi






	.0-	1defghi !.0-1 !defghif2H{I4f2H{I4L)EgddL)Eg,X
&6Bfz,F^r.hL6hP2zhRB8ZvpN:X6 0@N`r0Lbp|.FZn&HZb~x	kMo
+H	M:

*:rdNB8."|`H,~h*:RnZL(
fD$&:Vp$8Jp^$x0<DLl(0DX
&6Bfz,F^r.hL6hP2zhRB8ZvpN:X6 0@N`r0Lbp|.FZn&HZb~x	kMo
+H	M:

*:rdNB8."|`H,~h*:RnZL(
fD$&:Vp$8Jp^y__CxxFrameHandler3-srandNswscanf_vsnwprintfwcsrchr
_wcsicmp|wcsncpy_smallocfree
memcpy_stwcscpy_sowcscat_s_purecall_vsnprintf??0exception@@QAE@ABV0@@Z7?what@exception@@UBEPBDXZ??1exception@@UAE@XZ	??0exception@@QAE@ABQBD@Zmemmove_s??0exception@@QAE@XZCstrrchrldivpwcschr~wcspbrkiswspacezwcsncmp_wtol_wcsnicmpqsortbsearch)_wcsuprwcsstrZtowloweriswxdigitwcstol_wtoi64"_callnewhd_CxxThrowExceptiono_XcptFilter_amsg_exit_inittermmsvcrt.dll5?terminate@@YAXXZj_except_handler4_common??1type_info@@UAE@XZg_errnorealloc`_lock_unlock__dllonexit	_onexit&RtlCopySidRtlLengthSidRtlNtStatusToDosErrorNtAllocateLocallyUniqueIdhRtlDeleteResource[RtlInitializeResourceRtlAcquireResourceExclusive3RtlReleaseResourceRtlAcquireResourceShared1RtlIdentifierAuthoritySidRtlEqualSidERtlInitStringWRtlInitializeGenericTableAvlaRtlInsertElementGenericTableAvlcRtlDeleteElementGenericTableAvlRtlLookupElementGenericTableAvlHRtlInitUnicodeStringRtlDosPathNameToNtPathName_UNtCreateFileRtlFreeHeapNtCloseRtlEnumerateGenericTableAvlRtlNumberGenericTableElementsAvlRtlValidSidRtlValidSecurityDescriptorntdll.dll3CharNextW>CharUpperWUnregisterClassAUSER32.dllCreateFileWaGetLastErrorCloseHandleMultiByteToWideCharFindResourceW|SizeofResourceLoadResourceLockResourceFreeLibraryGetProcAddressLoadLibraryExWxGetModuleHandleW3lstrcmpiWLeaveCriticalSectionbRaiseException1EnterCriticalSectionFindResourceExWtGetModuleFileNameW^InitializeCriticalSectionDeleteCriticalSectionDisableThreadLibraryCallsWideCharToMultiByteLocalAllocLocalFree9GetEnvironmentVariableWCreateDirectoryWGetCurrentProcessIdWriteFilebGetLocalTimeGetVersionExWCreateTimerQueueDeleteTimerQueueExCreateTimerQueueTimerDeleteTimerQueueTimerGetCurrentThreadGetCurrentProcessGetComputerNameWGetSystemTimeAsFileTimeEGetFileAttributesWGetVolumeInformationWBGetFileAttributesExWCompareFileTimeDeleteFileWYGetFullPathNameWLoadLibraryW2SetLastErrorCompareStringWFormatMessageW}SleepUnhandledExceptionFiltermSetUnhandledExceptionFilterTerminateProcessOutputDebugStringAMQueryPerformanceCounterGetCurrentThreadIdGetTickCountKERNEL32.dllCoTaskMemFreeCoTaskMemReallocCoTaskMemAlloc(CoCreateInstanceStringFromGUID2CLSIDFromString^CoInitializeExCoUninitialize
CLSIDFromProgIDStringFromCLSIDole32.dllOLEAUT32.dllLsaOpenPolicyLsaNtStatusToWinErrorLsaQueryInformationPolicyLsaFreeMemoryLsaCloseCreateWellKnownSid[RegCloseKeyRegQueryInfoKeyWzRegEnumKeyExWRegOpenKeyExWRegSetValueExWdRegCreateKeyExWsRegDeleteValueWLookupAccountNameWLookupAccountSidW{ConvertSidToStringSidWConvertStringSidToSidWRegQueryValueExWKGetLengthSidpGetTokenInformationOpenThreadTokenSetThreadTokenEqualDomainSidOpenProcessTokenDuplicateTokenExCopySidInitializeAclAddAccessAllowedAceInitializeSecurityDescriptorSetSecurityDescriptorDaclSetSecurityDescriptorOwnerWGetNamedSecurityInfoWbGetSecurityDescriptorSacl]GetSecurityDescriptorDaclSetNamedSecurityInfoW_GetSecurityDescriptorLength8GetAclInformation7GetAceIsValidSidAddAccessAllowedAceExAddAccessAllowedObjectAceAddAuditAccessAceExSetSecurityDescriptorSaclAdjustTokenPrivilegesMakeSelfRelativeSDCryptReleaseContextCryptAcquireContextWCryptCreateHashCryptHashDataCryptGetHashParamCryptDestroyHashADVAPI32.dll'AuthziFreeAuditEventType,AuthziInitializeAuditEventType%AuthziAllocateAuditParams/AuthziInitializeAuditParamsWithRM+AuthziInitializeAuditEvent2AuthziLogAuditEventAuthzFreeAuditEvent(AuthziFreeAuditParamsAuthzInitializeResourceManager
AuthzFreeResourceManagerAuthzFreeContextAuthzGetInformationFromContextAuthzAddSidsToContextAuthzInitializeContextFromTokenAuthzInitializeContextFromSidAuthzAccessCheckAUTHZ.dllUuidFromStringWUuidToStringW
RpcStringFreeWUuidCreateUuidToStringARpcStringFreeARPCRT4.dllDsQuoteRdnValueWDSPARSE.dllDsCrackNamesW$DsFreeNameResultWDsBindWtDsUnBindWNTDSAPI.dllODBC32.dllVirtualProtectVirtualAllocGetSystemInfo]SetThreadStackGuaranteeVirtualQuery6RtlImageNtHeaderaRtlDeleteCriticalSectionRtlEnterCriticalSectionRtlConvertExclusiveToSharedPRtlInitializeCriticalSectionRtlLeaveCriticalSectionRtlConvertSharedToExclusiveResolveDelayLoadedAPI
DelayLoadFailureHook"PerfCreateInstance6PerfSetCounterRefValue7PerfSetCounterSetInfo:PerfStartProvider<PerfStopProvidermemcmp	memcpymemmove
memset3d34`4~4L4V44j4t41433333443
32!3+353?3222w2m2c2Y2O2222222222E2;23 233I384`x$fghe(u@Xp								'z#/%=(@|REGISTRYFILETYPELIBMUIx4VS_VERSION_INFO
cE
cE?StringFileInfo040904B0LCompanyNameMicrosoft CorporationFFileDescriptionazroles Modulen'FileVersion10.0.17763.1697 (WinBuild.160101.0800)0InternalNameazroles.LegalCopyright Microsoft Corporation. All rights reserved.8OriginalFilenameazrolesj%ProductNameMicrosoft Windows Operating SystemDProductVersion10.0.17763.1697DVarFileInfo$Translation	HKCR
{
	AzRoles.AzAuthorizationStore.1 = s 'AzAuthorizationStore Class'
	{
		CLSID = s '{b2bcff59-a757-4b0b-a1bc-ea69981da69e}'
	}
	AzRoles.AzAuthorizationStore = s 'AzAuthorizationStore Class'
	{
		CurVer = s 'AzRoles.AzAuthorizationStore.1'
	}
	NoRemove CLSID
	{
		ForceRemove {b2bcff59-a757-4b0b-a1bc-ea69981da69e} = s 'AzAuthorizationStore Class'
		{
			ProgID = s 'AzRoles.AzAuthorizationStore.1'
			VersionIndependentProgID = s 'AzRoles.AzAuthorizationStore'
			ForceRemove 'Programmable'
			InprocServer32 = s '%MODULE%'
			{
				val ThreadingModel = s 'Both'
			}
		}
	}
	
	AzRoles.AzPrincipalLocator.1 = s 'AzPrincipalLocator Class'
	{
		CLSID = s '{483afb5d-70df-4e16-abdc-a1de4d015a3e}'
	}
	AzRoles.AzPrincipalLocator = s 'AzPrincipalLocator Class'
	{
		CurVer = s 'AzRoles.AzPrincipalLocator.1'
	}
	NoRemove CLSID
	{
		ForceRemove {483afb5d-70df-4e16-abdc-a1de4d015a3e} = s 'AzPrincipalLocator Class'
		{
			ProgID = s 'AzRoles.AzPrincipalLocator.1'
			VersionIndependentProgID = s 'AzRoles.AzPrincipalLocator'
			ForceRemove 'Programmable'
			InprocServer32 = s '%MODULE%'
			{
				val ThreadingModel = s 'Both'
			}
		}
	}
	NoRemove Interface
	{
	    ForceRemove {edbd9ca9-9b82-4f6a-9e8b-98301e450f14} = s 'IAzAuthorizationStore interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {b11e5584-d577-4273-b6c5-0973e0f8e80d} = s 'IAzAuthorizationStore2 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {abc08425-0c86-4fa0-9be3-7189956c926e} = s 'IAzAuthorizationStore3 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {987bc7c7-b813-4d27-bede-6ba5ae867e95} = s 'IAzApplication interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {086a68af-a249-437c-b18d-d4d86d6a9660} = s 'IAzApplication2 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {181c845e-7196-4a7d-ac2e-020c0bb7a303} = s 'IAzApplication3 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {929b11a9-95c5-4a84-a29a-20ad42c2f16c} = s 'IAzApplications interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {5e56b24f-ea01-4d61-be44-c49b5e4eaf74} = s 'IAzOperation interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {1f5ea01f-44a2-4184-9c48-a75b4dcc8ccc} = s 'IAzOperation2 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {90ef9c07-9706-49d9-af80-0438a5f3ec35} = s 'IAzOperations interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {cb94e592-2e0e-4a6c-a336-b89a6dc1e388} = s 'IAzTask interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {03a9a5ee-48c8-4832-9025-aad503c46526} = s 'IAzTask2 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {b338ccab-4c85-4388-8c0a-c58592bad398} = s 'IAzTasks interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {00e52487-e08d-4514-b62e-877d5645f5ab} = s 'IAzScope interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {ee9fe8c9-c9f3-40e2-aa12-d1d8599727fd} = s 'IAzScope2 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {78e14853-9f5e-406d-9b91-6bdba6973510} = s 'IAzScopes interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {f1b744cd-58a6-4e06-9fbf-36f6d779e21e} = s 'IAzApplicationGroup interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {3f0613fc-b71a-464e-a11d-5b881a56cefa} = s 'IAzApplicationGroup2 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {4ce66ad5-9f3c-469d-a911-b99887a7e685} = s 'IAzApplicationGroups interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {859e0d8d-62d7-41d8-a034-c0cd5d43fdfa} = s 'IAzRole interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {95e0f119-13b4-4dae-b65f-2f7d60d822e4} = s 'IAzRoles interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {eff1f00b-488a-466d-afd9-a401c5f9eef5} = s 'IAzClientContext interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {2b0c92b8-208a-488a-8f81-e4edb22111cd} = s 'IAzClientContext2 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {11894fde-1deb-4b4b-8907-6d1cda1f5d4f} = s 'IAzClientContext3 interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {e192f17d-d59f-455e-a152-940316cd77b2} = s 'IAzBizRuleContext interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {fc17685f-e25d-4dcd-bae1-276ec9533cb5} = s 'IAzBizRuleParameters interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {e94128c7-e9da-44cc-b0bd-53036f3aab3d} = s 'IAzBizRuleInterfaces interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {d97fcea1-2599-44f1-9fc3-58e9fbe09466} = s 'IAzRoleDefinition interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {881f25a5-d755-4550-957a-d503a3b34001} = s 'IAzRoleDefinitions interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {55647d31-0d5a-4fa3-b4ac-2b5f9ad5ab76} = s 'IAzRoleAssignment interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {9c80b900-fceb-4d73-a0f4-c83b0bbf2481} = s 'IAzRoleAssignments interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {e5c3507d-ad6a-4992-9c7f-74ab480b44cc} = s 'IAzPrincipalLocator interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {504d0f15-73e2-43df-a870-a64f40714f53} = s 'IAzNameResolver interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	    ForceRemove {63130a48-699a-42d8-bf01-c62ac3fb79f9} = s 'IAzObjectPicker interface'
		{
			ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
			ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
			TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}'
			{
				val Version = s '1.0'
			}
		}
	}
}
HKCR
{
	AzRoles.AzBizRuleContext.1 = s 'AzBizRuleContext Class'
	{
		CLSID = s '{5c2dc96f-8d51-434b-b33c-379bccae77c3}'
	}
	AzRoles.AzBizRuleContext = s 'AzBizRuleContext Class'
	{
		CurVer = s 'AzRoles.AzBizRuleContext.1'
	}
	NoRemove CLSID
	{
		ForceRemove {5c2dc96f-8d51-434b-b33c-379bccae77c3} = s 'AzBizRuleContext Class'
		{
			ProgID = s 'AzRoles.AzBizRuleContext.1'
			VersionIndependentProgID = s 'AzRoles.AzBizRuleContext'
			ForceRemove 'Programmable'
			InprocServer32 = s '%MODULE%'
			{
				val ThreadingModel = s 'Both'
			}
		}
	}
}
CREATE TABLE [dbo].[AzMan_AzApplicationGroup] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [ObjectGuid] [uniqueidentifier] NULL,       
    [StoreID]       [int] , 
    [AppID]         [int] ,     
    [ScopeID]       [int] ,         
    [ParentType] [tinyint] NOT NULL ,   
    [Name] [nvarchar] (64) ,
    [Description] [nvarchar] (1024) ,
    [ApplicationData] [ntext]  ,
    [GroupType] [tinyint] NULL,
    [LdapQueryID]   [int] NULL,
    [RowUpdateTimeStamp] [timestamp] NULL , 
    [ChildUpdateTimeStamp] [binary] (8) NULL  
) ON [PRIMARY]
GO


CREATE TABLE [dbo].[AzMan_AzAuthorizationStore] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [ObjectGuid] [uniqueidentifier] NULL,   
    [Description] [nvarchar] (1024) ,
    [Name] [nvarchar] (512) ,   
    [ApplicationData] [ntext]  ,
    [DomainTimeout] [int] NULL ,
    [ScriptEngineTimeout] [int] NULL ,
    [MaxScriptEngines] [int] NULL ,
    [TargetMachine] [nvarchar] (50) ,
    [ApplyStoreSacl] [bit] NULL ,
    [GenerateAudits] [bit] NULL ,
    [MajorVersion] [int] NULL,
    [MinorVersion] [int] NULL,
    [RowUpdateTimeStamp] [timestamp] NULL ,     
    [ChildUpdateTimeStamp] [binary] (8) NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_AzApplication] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [ObjectGuid] [uniqueidentifier] NULL,   
    [StoreID] [int] NOT NULL ,
    [Name] [nvarchar] (512) ,
    [Description] [nvarchar] (1024) ,
    [ApplicationData] [ntext]  ,
    [ApplyStoreSacl] [bit] NULL ,
    [GenerateAudits] [bit] NULL ,
    [AuthzInterfaceClsId] [int] NULL ,
    [ApplicationVersion] [nvarchar] (50),
    [RowUpdateTimeStamp] [timestamp] NULL ,     
    [ChildUpdateTimeStamp] [binary] (8) NULL  
) ON [PRIMARY]
GO


CREATE TABLE [dbo].[AzMan_BizRule_To_Task] (
    [BizRuleID] [int]   NOT NULL ,
    [TaskID]    [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_BizRule_To_Group] (
    [BizRuleID] [int]   NOT NULL ,
    [GroupID]   [int]   NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_BizRule] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [ParentId] [int] NOT NULL ,
    [ParentType] [tinyint] not NULL,
    [BizRuleImportedPath] [nvarchar] (512) ,
    [BizRule] [ntext] ,
    [BizRuleLanguage] [nvarchar] (64), 
    [RowUpdateTimeStamp] [timestamp] NULL           
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_LDAPQuery] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [GroupID] [int] NOT NULL ,
    [LdapQuery] [ntext] ,
    [RowUpdateTimeStamp] [timestamp] NULL           
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_Group_SIDMember] (
    [GroupID] [int] NOT NULL ,
    [MemberSID] [varbinary] (85) NOT NULL ,
    [Member] [bit] Not NULL ,
    [RowUpdateTimeStamp] [timestamp] NULL 
) ON [PRIMARY]
GO


CREATE TABLE [dbo].[AzMan_Group_AppMember] (
    [GroupID]       [int] NOT NULL ,
    [ChildID]       [int] NOT NULL ,
    [Member]        [bit] Not NULL ,
    [RowUpdateTimeStamp] [timestamp] NULL       
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_AzOperation] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [ObjectGuid] [uniqueidentifier] NULL,   
    [AppID] [int] NOT NULL ,
    [Name] [nvarchar] (64) ,
    [Description] [nvarchar] (1024) ,
    [ApplicationData] [ntext]  ,
    [OperationID] [int] NULL,
    [RowUpdateTimeStamp] [timestamp] NULL ,         
    [ChildUpdateTimeStamp] [binary] (8) NULL  
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_AzTask] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [ObjectGuid] [uniqueidentifier] NULL,   
    [AppID] [int],
    [ScopeID] [int],
    [ParentType] [tinyint] NOT NULL ,       
    [Name] [nvarchar] (64) ,
    [Description] [nvarchar] (1024) ,
    [ApplicationData] [ntext]  ,
    [IsRoleDefinition] [bit] NULL ,
    [RowUpdateTimeStamp] [timestamp] NULL ,     
    [ChildUpdateTimeStamp] [binary] (8) NULL  
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_AzScope] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [AppID] [int] NOT NULL ,
    [Name] [ntext],
    [NameLen]   [int]  NOT NULL,
    [NameHash]  [Binary] (32) NULL,
    [Description] [nvarchar] (1024) ,
    [ApplicationData] [ntext]  ,
    [ObjectGuid] [uniqueidentifier] NULL,
    [RowUpdateTimeStamp] [timestamp] NULL ,     
    [ChildUpdateTimeStamp] [binary] (8) NULL,
    [HasSpecificUsers] [bit] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_AzRoleAssignment] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [AppID] [int],
    [ScopeID] [int],
    [ParentType] [tinyint] NOT NULL ,       
    [Name] [nvarchar] (64) ,
    [Description] [nvarchar] (1024) ,
    [ApplicationData] [ntext]  ,
    [ObjectGuid] [uniqueidentifier] NULL ,
    [RowUpdateTimeStamp] [timestamp] NULL ,     
    [ChildUpdateTimeStamp] [binary] (8) NULL  
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_Role_SIDMember] (
    [RoleID] [int] NOT NULL ,
    [MemberSID] [varbinary] (85) NOT NULL,
    [RowUpdateTimeStamp] [timestamp] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_Role_AppMember] (
    [RoleID]        [int] NOT NULL ,
    [ChildID]       [int] NOT NULL ,
    [RowUpdateTimeStamp] [timestamp] NULL       
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_Role_To_Task_Link] (
    [TaskID]  [int] NOT NULL ,
    [RoleID]  [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_Role_To_Operation_Link] (
    [OperationID]  [int]    NOT NULL ,
    [RoleID]        [int]   NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AzMan_Task_To_Task_Link] (
    [TaskID]  [int] NOT NULL ,
    [ChildID]   [int]   NOT NULL 
) ON [PRIMARY]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Azman_SQLRole]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Azman_SQLRole]
GO

CREATE TABLE [dbo].[Azman_SQLRole] (
    [uid]      [int] not null,
    [ObjectID] [int] NULL ,
    [ObjectType] [tinyint] NULL ,
    [SQLRoleName] [nvarchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,   
    [RoleType] [tinyint] NULL 
) ON [PRIMARY]
GO


CREATE TABLE [dbo].[AzMan_Task_To_Operation_Link] (
    [OperationID]   [int]   NOT NULL ,
    [TaskID]        [int]   NOT NULL 
) ON [PRIMARY]
GO

CREATE  INDEX [IX_AzMan_AzApplication_StoreID] ON [dbo].[AzMan_AzApplication]([StoreID]) ON [PRIMARY]
GO

CREATE  INDEX [IX_AzMan_AzApplicationGroup_AppID] ON [dbo].[AzMan_AzApplicationGroup]([AppID]) ON [PRIMARY]
GO

CREATE  INDEX [IX_AzMan_AzApplicationGroup_ScopeID] ON [dbo].[AzMan_AzApplicationGroup]([ScopeID]) ON [PRIMARY]
GO

CREATE  INDEX [IX_AzMan_AzApplicationGroup_Name] ON [dbo].[AzMan_AzApplicationGroup]([Name]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_AzMan_AzOperation_Name] ON [dbo].[AzMan_AzOperation]([Name]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_AzMan_AzOperation_AppID] ON [dbo].[AzMan_AzOperation]([AppID]) ON [PRIMARY]
GO

CREATE  INDEX [IX_AzMan_AzRoleAssignment_AppID] ON [dbo].[AzMan_AzRoleAssignment]([AppID]) ON [PRIMARY]
GO

CREATE  INDEX [IX_AzMan_AzRoleAssignment_ScopeID] ON [dbo].[AzMan_AzRoleAssignment]([ScopeID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_AzMan_AzRoleAssignment_Name] ON [dbo].[AzMan_AzRoleAssignment]([Name]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_AzMan_AzScope_AppID] ON [dbo].[AzMan_AzScope]([AppID]) ON [PRIMARY]
GO
  

CREATE  INDEX [IX_Azman_Scope_Name] ON [dbo].[AzMan_AzScope] ([AppID], [NameHash]) ON [PRIMARY]  
Go  

CREATE  INDEX [IX_AzMan_AzTask_AppID] ON [dbo].[AzMan_AzTask]([AppID]) ON [PRIMARY]
GO

CREATE  INDEX [IX_AzMan_AzTask_ScopeID] ON [dbo].[AzMan_AzTask]([ScopeID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_AzMan_AzTask_Name] ON [dbo].[AzMan_AzTask]([Name]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_AzMan_BizRule_Parent] ON [dbo].[AzMan_BizRule]([ParentId], [ParentType]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_AzMan_Group_AppMember_GroupID] ON [dbo].[AzMan_Group_AppMember]([GroupID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_AzMan_LDAPQuery_GroupID] ON [dbo].[AzMan_LDAPQuery]([GroupID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AzMan_AzApplication] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_AzApplication] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_AzAuthorizationStore] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_AzAuthorizationStore] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_AzScope] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_AzScope] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO


ALTER TABLE [dbo].[AzMan_AzApplicationGroup] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_AzApplicationGroup] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] ,
    CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzApplication] FOREIGN KEY 
    (
        [AppID]
    ) REFERENCES [dbo].[AzMan_AzApplication] (
        [ID]
    ) ,
    CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzAuthorizationStore] FOREIGN KEY 
    (
        [StoreID]
    ) REFERENCES [dbo].[AzMan_AzAuthorizationStore] (
        [ID]
    ) ,
    CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzScope] FOREIGN KEY 
    (
        [ScopeID]
    ) REFERENCES [dbo].[AzMan_AzScope] (
        [ID]
    ) 
    
GO

ALTER TABLE [dbo].[AzMan_AzApplicationGroup] WITH NOCHECK ADD 
    CONSTRAINT [CK_AzMan_AzApplicationGroup] CHECK (sign(coalesce([StoreID],0)) + sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1)
GO

ALTER TABLE [dbo].[AzMan_AzRoleAssignment] WITH NOCHECK ADD 
    CONSTRAINT [CK_AzMan_AzRoleAssignment] CHECK (sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1)
GO

ALTER TABLE [dbo].[AzMan_AzTask] WITH NOCHECK ADD 
    CONSTRAINT [CK_AzMan_AzTask] CHECK (sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1)
GO

alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzApplication]
GO

alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzAuthorizationStore]
GO

alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzScope]
GO


ALTER TABLE [dbo].[AzMan_AzOperation] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_AzOperation] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_AzRoleAssignment] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_AzRoleAssignment] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] ,
    
    CONSTRAINT [FK_AzMan_Role_To_App] FOREIGN KEY 
    (
        [AppID]
    ) REFERENCES [dbo].[AzMan_AzApplication] (
        [ID]
    ) ,

    CONSTRAINT [FK_AzMan_Role_To_Scope] FOREIGN KEY 
    (
        [ScopeID]
    ) REFERENCES [dbo].[AzMan_AzScope] (
        [ID]
    ) 
    
GO

alter table [dbo].[AzMan_AzRoleAssignment] nocheck constraint [FK_AzMan_Role_To_App]
GO

alter table [dbo].[AzMan_AzRoleAssignment] nocheck constraint FK_AzMan_Role_To_Scope
GO


ALTER TABLE [dbo].[AzMan_AzTask] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_AzTask] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] ,
    CONSTRAINT [FK_AzMan_AzTask_To_App] FOREIGN KEY 
    (
        [AppID]
    ) REFERENCES [dbo].[AzMan_AzApplication] (
        [ID]
    ) ,
    CONSTRAINT [FK_AzMan_AzTask_To_Scope] FOREIGN KEY 
    (
        [ScopeID]
    ) REFERENCES [dbo].[AzMan_AzScope] (
        [ID]
    )   
GO

alter table [dbo].[AzMan_AzTask] nocheck constraint [FK_AzMan_AzTask_To_App]
GO

alter table [dbo].[AzMan_AzTask] nocheck constraint [FK_AzMan_AzTask_To_Scope]
GO

ALTER TABLE [dbo].[AzMan_BizRule] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_BizRule] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_LDAPQuery] WITH NOCHECK ADD 
    CONSTRAINT [PK_AzMan_LDAPQuery] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_AzOperation] WITH NOCHECK ADD 
    CONSTRAINT [IX_AzMan_AzOperation_OpID] UNIQUE  NONCLUSTERED 
    (
        [OperationID],
        [AppID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_Group_AppMember] WITH NOCHECK ADD 
    CONSTRAINT [IX_AzMan_Group_AppMember_member] UNIQUE  NONCLUSTERED 
    (
        [GroupID],
        [ChildID],
        [Member]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_Group_SIDMember] WITH NOCHECK ADD 
    CONSTRAINT [IX_AzMan_Group_SIDMember_member] UNIQUE  NONCLUSTERED 
    (
        [GroupID],
        [MemberSID],
        [Member]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_Role_AppMember] WITH NOCHECK ADD 
    CONSTRAINT [IX_AzMan_Role_AppMember_member] UNIQUE  NONCLUSTERED 
    (
        [RoleID],
        [ChildID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_Role_SIDMember] WITH NOCHECK ADD 
    CONSTRAINT [IX_AzMan_Role_SIDMember_member] UNIQUE  NONCLUSTERED 
    (
        [RoleID],
        [MemberSID]
    )  ON [PRIMARY] 
GO


ALTER TABLE [dbo].[AzMan_AzApplication] ADD 
    CONSTRAINT [FK_AzMan_AzApplication_AzMan_AzAuthorizationStore] FOREIGN KEY 
    (
        [StoreID]
    ) REFERENCES [dbo].[AzMan_AzAuthorizationStore] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE 
GO


ALTER TABLE [dbo].[AzMan_AzOperation] ADD 
    CONSTRAINT [FK_AzMan_AzOperation_AzMan_AzApplication] FOREIGN KEY 
    (
        [AppID]
    ) REFERENCES [dbo].[AzMan_AzApplication] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE 
GO

ALTER TABLE [dbo].[AzMan_AzScope] ADD 
    CONSTRAINT [FK_AzMan_AzScope_AzMan_AzApplication] FOREIGN KEY 
    (
        [AppID]
    ) REFERENCES [dbo].[AzMan_AzApplication] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE 
GO


ALTER TABLE [dbo].[AzMan_BizRule_To_Group] ADD 
    CONSTRAINT [FK_AzMan_BizRule_To_Group_AzMan_AzApplicationGroup] FOREIGN KEY 
    (
        [GroupID]
    ) REFERENCES [dbo].[AzMan_AzApplicationGroup] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [FK_AzMan_BizRule_To_Group_AzManBizrule] FOREIGN KEY 
    (
        [BizRuleID]
    ) REFERENCES [dbo].[AzMan_BizRule] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [PK_AzMan_BizRule_To_Group] PRIMARY KEY  CLUSTERED 
    (
        [BizRuleID],
        [GroupID]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[AzMan_BizRule_To_Task] ADD 
    CONSTRAINT [FK_AzMan_BizRule_To_Task_AzMan_AzTask] FOREIGN KEY 
    (
        [TaskID]
    ) REFERENCES [dbo].[AzMan_AzTask] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [FK_AzMan_BizRule_To_Task_AzManBizrule] FOREIGN KEY 
    (
        [BizRuleID]
    ) REFERENCES [dbo].[AzMan_BizRule] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [PK_AzMan_BizRule_To_Task] PRIMARY KEY  CLUSTERED 
    (
        [BizRuleID],
        [TaskID]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[AzMan_Group_AppMember] ADD 
    CONSTRAINT [FK_AzMan_Group_AppMember_AzMan_AzApplicationGroup] FOREIGN KEY 
    (
        [GroupID]
    ) REFERENCES [dbo].[AzMan_AzApplicationGroup] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [PK_AzMan_Group_AppMember] PRIMARY KEY  CLUSTERED 
    (
        [GroupID],
        [ChildID],
        [Member]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[AzMan_Group_SIDMember] ADD 
    CONSTRAINT [FK_AzMan_Group_SIDMember_AzMan_AzApplicationGroup] FOREIGN KEY 
    (
        [GroupID]
    ) REFERENCES [dbo].[AzMan_AzApplicationGroup] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [PK_AzMan_Group_SIDMember] PRIMARY KEY  CLUSTERED 
    (
        [GroupID],
        [MemberSID],
        [Member]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[AzMan_LDAPQuery] ADD 
    CONSTRAINT [FK_AzMan_LDAPQuery_AzMan_AzApplicationGroup] FOREIGN KEY 
    (
        [GroupID]
    ) REFERENCES [dbo].[AzMan_AzApplicationGroup] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE 
GO

ALTER TABLE [dbo].[AzMan_Role_AppMember] ADD 
    CONSTRAINT [FK_AzMan_Role_AppMember_AzMan_AzRoleAssignment] FOREIGN KEY 
    (
        [RoleID]
    ) REFERENCES [dbo].[AzMan_AzRoleAssignment] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [PK_AzMan_Role_AppMember] PRIMARY KEY  CLUSTERED 
    (
        [RoleID],
        [ChildID]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[AzMan_Role_SIDMember] ADD 
    CONSTRAINT [FK_AzMan_Role_SIDMember_AzMan_AzRoleAssignment] FOREIGN KEY 
    (
        [RoleID]
    ) REFERENCES [dbo].[AzMan_AzRoleAssignment] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [PK_AzMan_Role_SIDMember] PRIMARY KEY  CLUSTERED 
    (
        [RoleID],
        [MemberSID]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[AzMan_Role_To_Operation_Link] ADD 
    CONSTRAINT [FK_AzMan_Role_To_Operation_Link_AzMan_AzOperation] FOREIGN KEY 
    (
        [OperationID]
    ) REFERENCES [dbo].[AzMan_AzOperation] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [FK_AzMan_Role_To_Operation_Link_AzMan_AzRoleAssignment] FOREIGN KEY 
    (
        [RoleID]
    ) REFERENCES [dbo].[AzMan_AzRoleAssignment] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [PK_AzMan_Role_To_Operation_Link] PRIMARY KEY  CLUSTERED 
    (
        [RoleID],
        [OperationID]
    )  ON [PRIMARY]
GO

ALTER TABLE [dbo].[AzMan_Role_To_Task_Link] ADD 
    CONSTRAINT [FK_AzMan_Role_To_Task_Link_AzMan_AzRoleAssignment] FOREIGN KEY 
    (
        [RoleID]
    ) REFERENCES [dbo].[AzMan_AzRoleAssignment] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [FK_AzMan_Role_To_Task_Link_AzMan_AzTask] FOREIGN KEY 
    (
        [TaskID]
    ) REFERENCES [dbo].[AzMan_AzTask] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE,
    CONSTRAINT [PK_AzMan_Role_To_Task_Link] PRIMARY KEY  CLUSTERED 
    (
        [RoleID],
        [TaskID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_Task_To_Operation_Link] ADD 
    CONSTRAINT [FK_AzMan_Task_To_Operation_Link_AzMan_AzOperation] FOREIGN KEY 
    (
        [OperationID]
    ) REFERENCES [dbo].[AzMan_AzOperation] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [FK_AzMan_Task_To_Operation_Link_AzMan_AzTask] FOREIGN KEY 
    (
        [TaskID]
    ) REFERENCES [dbo].[AzMan_AzTask] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE ,
    CONSTRAINT [PK_AzMan_Task_To_Operation_Link] PRIMARY KEY  CLUSTERED 
    (
        [OperationID],
        [TaskID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[AzMan_Task_To_Task_Link] ADD 
    CONSTRAINT [FK_AzMan_Task_To_Task_Link_AzMan_AzTask] FOREIGN KEY 
    (
        [TaskID]
    ) REFERENCES [dbo].[AzMan_AzTask] (
        [ID]
    ) ON DELETE CASCADE  ON UPDATE CASCADE,
    CONSTRAINT [PK_AzMan_Task_To_Task_Link] PRIMARY KEY  CLUSTERED 
    (
        [TaskID],
        [ChildID]
    )  ON [PRIMARY]
GO

--Trigger for updating Timestamps

CREATE TRIGGER TR_updateStoreTimeStampOnAppDelete ON dbo.[AzMan_AzApplication] 
FOR delete
AS
    UPDATE [AzMan_AzAuthorizationStore] 
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT StoreID FROM deleted)
go

CREATE TRIGGER TR_updateStoreTimeStampOnAppModified ON dbo.[AzMan_AzApplication] 
FOR INSERT,UPDATE
AS

    UPDATE [AzMan_AzAuthorizationStore] 
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT StoreID FROM inserted)
go

CREATE TRIGGER TR_updateAppTimeStampOnScopeDelete ON dbo.[AzMan_AzScope] 
FOR delete
AS
    UPDATE [AzMan_AzApplication] 
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT AppID FROM deleted)
go

CREATE TRIGGER TR_updateAppTimeStampOnScoprModified ON dbo.[AzMan_AzScope] 
FOR INSERT,UPDATE
AS

    UPDATE [AzMan_AzApplication] 
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT AppID FROM inserted)
go

CREATE TRIGGER TR_UpdateAppTimeStampOnOpChange ON dbo.[AzMan_AzOperation] 
FOR INSERT,UPDATE
AS
    UPDATE [AzMan_AzApplication] 
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT AppID FROM inserted)
go

CREATE TRIGGER TR_UpdateAppTimeStampOnOpDelete ON dbo.[AzMan_AzOperation] 
FOR delete
AS
    UPDATE [AzMan_AzApplication] 
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT AppID FROM deleted)
go

Create Procedure UpdateGroupsParentTimeStamp
(
  @ParentId [int]                   
, @ParentType [tinyint]
)
as 
    if @ParentType = 0 
    Begin 
        UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId 
    end
    else if @ParentType = 1  -- App
    Begin
        UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId 
    end
    else if @ParentType = 4  -- Scope
    Begin
        UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId 
    end

GO

Create Procedure UpdateTasksParentTimeStamp
(
  @ParentId [int]                   
, @ParentType [tinyint]
)
as 
    if @ParentType = 1  -- App
    Begin
        UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId 
    end
    else if @ParentType = 4  -- Scope
    Begin
        UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId 
    end
GO

Create Procedure UpdateRolesParentTimeStamp
(
  @ParentId [int]                   
, @ParentType [tinyint]
)
as 
    if @ParentType = 1  -- App
    Begin
        UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId 
    end
    else if @ParentType = 4  -- Scope
    Begin
        UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId 
    end
GO

CREATE TRIGGER TR_UpdateParentTimeStampOnGroupDelete ON dbo.[AzMan_AzApplicationGroup] 
FOR delete
AS
DECLARE @ParentID INT
DECLARE @ParentType TinyInt
Declare @StoreID INT
Declare @AppID INT
Declare @ScopeID INT

    -- We need to find the parent first
    SELECT @StoreID=StoreID, @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted
    if @@RowCount = 1
    Begin
        if @ParentType = 0
        Begin
            set @ParentID = @StoreID
        End
        else if @ParentType = 1
        Begin
            set @ParentID = @AppID
        End
        else if @ParentType = 4
        Begin
            set @ParentID = @ScopeID
        End
        
        exec UpdateGroupsParentTimeStamp @ParentID, @ParentType
    End     
go

CREATE TRIGGER TR_UpdateParentTimeStampOnGroupInsOrUpd ON dbo.[AzMan_AzApplicationGroup] 
FOR INSERT,UPDATE
AS

DECLARE @ParentID INT
DECLARE @ParentType TinyInt
Declare @StoreID INT
Declare @AppID INT
Declare @ScopeID INT

    SELECT @StoreID=StoreID, @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted
    
    if @@RowCount = 1
    Begin
        if @ParentType = 0 
        Begin
            set @ParentID = @StoreID
        End
        else if @ParentType = 1 
        Begin
            set @ParentID = @AppID
        End
        else if @ParentType = 4 
        Begin
            set @ParentID = @ScopeID
        End
    
        exec UpdateGroupsParentTimeStamp @ParentID, @ParentType
    End     
go

CREATE TRIGGER TR_UpdateParentTimeStampOnTaskDelete ON dbo.[AzMan_AzTask] 
FOR delete
AS
DECLARE @ParentID INT
DECLARE @ParentType TinyInt
Declare @AppID INT
Declare @ScopeID INT

    -- We need to find the parent first
    SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted
    if @@RowCount = 1
        Begin
           if @ParentType = 1 
           Begin
        set @ParentID = @AppID
       End
       else if @ParentType = 4 
       Begin
        set @ParentID = @ScopeID
       End

       exec UpdateTasksParentTimeStamp @ParentID, @ParentType
        end    
go

CREATE TRIGGER TR_UpdateParentTimeStampOnTaskInsOrUpd ON dbo.[AzMan_AzTask] 
FOR INSERT,UPDATE
AS
DECLARE @ParentID INT
DECLARE @ParentType TinyInt
Declare @AppID INT
Declare @ScopeID INT

    SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted
    if @@RowCount = 1
        Begin
           if @ParentType = 1 
           Begin
        set @ParentID = @AppID
       End
       else if @ParentType = 4 
       Begin
        set @ParentID = @ScopeID
       End

       exec UpdateTasksParentTimeStamp @ParentID, @ParentType
        end
go


CREATE TRIGGER TR_UpdateParentTimeStampOnRoleDelete ON dbo.[AzMan_AzRoleAssignment] 
FOR delete
AS
DECLARE @ParentID INT
DECLARE @ParentType TinyInt
Declare @AppID INT
Declare @ScopeID INT

    -- We need to find the parent first
    SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted
    if @@RowCount = 1
        Begin
           if @ParentType = 1 
           Begin
        set @ParentID = @AppID
       End
       else if @ParentType = 4 
       Begin
        set @ParentID = @ScopeID
       End
           exec UpdateRolesParentTimeStamp @ParentID, @ParentType
        end
go

CREATE TRIGGER TR_UpdateParentTimeStampOnRoleInsOrUpd ON dbo.[AzMan_AzRoleAssignment] 
FOR INSERT,UPDATE
AS
DECLARE @ParentID INT
DECLARE @ParentType TinyInt
Declare @AppID INT
Declare @ScopeID INT

    SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted
    if @@RowCount = 1
        Begin
           if @ParentType = 1 
           Begin
        set @ParentID = @AppID
       End
       else if @ParentType = 4 
       Begin
        set @ParentID = @ScopeID
       End

           exec UpdateRolesParentTimeStamp @ParentID, @ParentType
        end
go

CREATE TRIGGER TR_UpdateGroupsTimeStampOnSidMemberDel ON dbo.[AzMan_Group_SIDMember] 
FOR delete
AS
    UPDATE [AzMan_AzApplicationGroup]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT GroupID FROM deleted)
go

CREATE TRIGGER TR_UpdateGroupsTimeStampOnSidMemberInsOrUpd ON dbo.[AzMan_Group_SIDMember] 
FOR INSERT,UPDATE
AS
    UPDATE [AzMan_AzApplicationGroup]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT GroupID FROM inserted)
go

CREATE TRIGGER TR_UpdateGroupsTimeStampOnAppdMemberDel ON dbo.[AzMan_Group_AppMember] 
FOR delete
AS
    UPDATE [AzMan_AzApplicationGroup]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT GroupID FROM deleted)
go

CREATE TRIGGER TR_UpdateGroupsTimeStampOnAppMemberInsOrUpd ON dbo.[AzMan_Group_AppMember] 
FOR INSERT,UPDATE
AS
    UPDATE [AzMan_AzApplicationGroup]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT GroupID FROM inserted)
go

CREATE TRIGGER TR_UpdateRolesTimeStampOnSidMemberDel ON dbo.[AzMan_Role_SIDMember] 
FOR delete
AS
    UPDATE [AzMan_AzRoleAssignment]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT RoleID FROM deleted)
go

CREATE TRIGGER TR_UpdateRolesTimeStampOnSidMemberInsOrUpd ON dbo.[AzMan_Role_SIDMember] 
FOR INSERT,UPDATE
AS
    UPDATE [AzMan_AzRoleAssignment]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT RoleID FROM inserted)
go

CREATE TRIGGER TR_UpdateRolesTimeStampOnAppMemberDel ON dbo.[AzMan_Role_AppMember] 
FOR delete
AS
    UPDATE [AzMan_AzRoleAssignment]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT RoleID FROM deleted)
go

CREATE TRIGGER TR_UpdateRolesTimeStampOnAppMemberInsOrUpd ON dbo.[AzMan_Role_AppMember] 
FOR INSERT,UPDATE
AS
    UPDATE [AzMan_AzRoleAssignment]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT RoleID FROM inserted)
go

CREATE TRIGGER TR_UpdateRolesTimeStampOnOperationDelete ON dbo.AzMan_Role_To_Operation_Link
FOR DELETE
AS
    UPDATE [AzMan_AzRoleAssignment]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT RoleID FROM deleted)
go

CREATE TRIGGER TR_UpdateRolesTimeStampOnOperationInsert ON dbo.AzMan_Role_To_Operation_Link
FOR INSERT
AS
    UPDATE [AzMan_AzRoleAssignment]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT RoleID FROM inserted)
go

CREATE TRIGGER TR_UpdateRolesTimeStampOnTaskDelete ON dbo.AzMan_Role_To_Task_Link
FOR DELETE
AS
    UPDATE [AzMan_AzRoleAssignment]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT RoleID FROM deleted)
go

CREATE TRIGGER TR_UpdateRolesTimeStampOnTaskInsert ON dbo.AzMan_Role_To_Task_Link
FOR INSERT
AS
    UPDATE [AzMan_AzRoleAssignment]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT RoleID FROM inserted)
go

CREATE TRIGGER TR_UpdateTaskTimeStampOnOperationDelete ON dbo.AzMan_Task_To_Operation_Link
FOR DELETE
AS
    UPDATE [AzMan_AzTask]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT TaskID FROM deleted)
go

CREATE TRIGGER TR_UpdateTaskTimeStampOnOperationInsert ON dbo.AzMan_Task_To_Operation_Link
FOR INSERT
AS
    UPDATE [AzMan_AzTask]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT TaskID FROM inserted)
go

CREATE TRIGGER TR_UpdateTaskTimeStampOnTaskDelete ON dbo.AzMan_Task_To_Task_Link
FOR DELETE
AS
    UPDATE [AzMan_AzTask]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT TaskID FROM deleted)
go

CREATE TRIGGER TR_UpdateTaskTimeStampOnTaskInsert ON dbo.AzMan_Task_To_Task_Link
FOR INSERT
AS
    UPDATE [AzMan_AzTask]
        SET [ChildUpdateTimeStamp]=@@DBTS 
    WHERE ID in (SELECT TaskID FROM inserted)
go

CREATE TRIGGER TR_DeleteGroupForStore ON dbo.[AzMan_AzAuthorizationStore]
FOR delete
AS
delete [AzMan_AzApplicationGroup] where StoreID in (select ID from deleted)  
go

CREATE TRIGGER TR_DeleteGroupForApp ON dbo.[AzMan_AzApplication]
FOR delete
AS
delete [AzMan_AzApplicationGroup] where AppID in (SELECT ID FROM deleted) 
go

CREATE TRIGGER TR_DeleteGroupForScope ON dbo.[AzMan_AzScope]
FOR delete
AS
delete [AzMan_AzApplicationGroup] where ScopeID in (SELECT ID FROM deleted)
go

CREATE TRIGGER TR_DeleteTaskForApp ON dbo.[AzMan_AzApplication]
FOR delete
AS
delete [AzMan_AzTask] where AppID in (SELECT ID FROM deleted)
go

CREATE TRIGGER TR_DeleteTaskForScope ON dbo.[AzMan_AzScope]
FOR delete
AS
delete [AzMan_AzTask] where ScopeID in (SELECT ID FROM deleted)
go

CREATE TRIGGER TR_DeleteRoleForApp ON dbo.[AzMan_AzApplication]
FOR delete
AS
delete [AzMan_AzRoleAssignment] where AppID in (SELECT ID FROM deleted)
go

CREATE TRIGGER TR_DeleteRoleForScope ON dbo.[AzMan_AzScope]
FOR delete
AS
delete [AzMan_AzRoleAssignment] where ScopeID in (SELECT ID FROM deleted)
go

CREATE TRIGGER TR_DeleteBizRuleForTask ON dbo.[AzMan_BizRule_To_Task]
FOR delete
AS
delete [AzMan_BizRule] where [ID] in (SELECT BizRuleID FROM deleted)
go

CREATE TRIGGER TR_DeleteBizRuleForGroup ON dbo.[AzMan_BizRule_To_Group]
FOR delete
AS
delete [AzMan_BizRule] where [ID] in (SELECT BizRuleID FROM deleted)
go 
IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_GenerateObjectAudit' and type = 'P')
    DROP PROCEDURE [AzMan_SP_GenerateObjectAudit]
GO

Create Procedure [AzMan_SP_GenerateObjectAudit]  
(
@success int,
@event int,
@actObjectType tinyint,
@actObjectName nvarchar(512),
@actObjectGuid uniqueidentifier,
@targetType tinyint,
@targetName nvarchar(512),
@targetGuid uniqueidentifier,
@otherInfo nvarchar(1024)
)
AS
    DECLARE @UserName nvarchar(256)
    DECLARE @UserSid varbinary(85)
    SELECT @UserName = User_Name()
    SELECT @UserSid = SUSER_SID()
    
    -- events:
    -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE
    -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE
    -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN
    -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE
    
    
    Exec master.dbo.AzGenerateAudit @success,
                                    @event, 
                                    @actObjectType, 
                                    @actObjectName, 
                                    @actObjectGuid, 
                                    0, 
                                    @UserName, 
                                    @UserSid, 
                                    @targetType,  
                                    @targetName, 
                                    @targetGuid,
                                    @otherInfo

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_GenerateMemberAudit' and type = 'P')
    DROP PROCEDURE [AzMan_SP_GenerateMemberAudit]
GO

Create Procedure [AzMan_SP_GenerateMemberAudit]  
(
@success int,
@event int,
@actObjectType tinyint,
@actObjectName nvarchar(512),
@actObjectGuid uniqueidentifier,
@memberName nvarchar(256),
@memberSid varbinary(85),
@memberFlag int,
@otherInfo nvarchar(1024)
)
AS
    DECLARE @UserName nvarchar(256)
    DECLARE @UserSid varbinary(85)
    SELECT @UserName = User_Name()
    SELECT @UserSid = SUSER_SID()
    
    -- events:
    -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN
    -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE
    
    -- memberFlags:
    -- 0 for non-members
    -- 1 for members
    -- 2 for admins
    -- 3 for readers
    -- 4 for delegated users
    
    
    Exec master.dbo.AzGenerateAudit @success,
                                    @event, 
                                    @actObjectType, 
                                    @actObjectName, 
                                    @actObjectGuid, 
                                    0, 
                                    @UserName, 
                                    @UserSid, 
                                    @memberName,  
                                    @memberSid, 
                                    @memberFlag,
                                    @otherInfo

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_GenerateGenericAudit' and type = 'P')
    DROP PROCEDURE [AzMan_SP_GenerateGenericAudit]
GO

Create Procedure [AzMan_SP_GenerateGenericAudit]  
(
@success int,
@actObjectType tinyint,
@actObjectName nvarchar(512),
@actObjectGuid uniqueidentifier,
@otherInfo nvarchar(1024)
)
AS
    DECLARE @UserName nvarchar(256)
    DECLARE @UserSid varbinary(85)
    SELECT @UserName = User_Name()
    SELECT @UserSid = SUSER_SID()
    
    -- events:
    -- 6 for SE_AUDITID_AZ_SQL_OTHER
    
        
    Exec master.dbo.AzGenerateAudit @success,
                                    6, 
                                    @actObjectType, 
                                    @actObjectName, 
                                    @actObjectGuid, 
                                    0, 
                                    @UserName, 
                                    @UserSid, 
                                    @otherInfo

GO


IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPU_SqlRoleUpdated' and type = 'P')
    DROP PROCEDURE AzMan_SPU_SqlRoleUpdated
GO

CREATE PROCEDURE dbo.AzMan_SPU_SqlRoleUpdated 
(
@Return int output,
@ObjectID int,
@ObjectType tinyint
)
AS

DECLARE @OldChildTS timestamp
    
    -- We can't just manually update the row timestamp because it is a timestamp column. 
    -- So we set-and-reset the ChildUpdateTimeStamp for the update of the timestamp column
    
    IF @ObjectType = 0
        BEGIN
            SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzAuthorizationStore] WHERE ID = @ObjectID
            UPDATE [AzMan_AzAuthorizationStore]
                SET [ChildUpdateTimeStamp]=@OldChildTS + 1
                WHERE ID = @ObjectID
                
            UPDATE [AzMan_AzAuthorizationStore]
                SET [ChildUpdateTimeStamp]=@OldChildTS
                WHERE ID = @ObjectID
        END
    ELSE IF @ObjectType = 1
        BEGIN
            SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzApplication] WHERE ID = @ObjectID
            UPDATE [AzMan_AzApplication]
                SET [ChildUpdateTimeStamp]=@OldChildTS + 1
                WHERE ID = @ObjectID
            UPDATE [AzMan_AzApplication]
                SET [ChildUpdateTimeStamp]=@OldChildTS
                WHERE ID = @ObjectID
        END
    ELSE IF @ObjectType = 4
        BEGIN
            SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzScope] WHERE ID = @ObjectID
            UPDATE [AzMan_AzScope]
                SET [ChildUpdateTimeStamp]=@OldChildTS + 1
                WHERE ID = @ObjectID
            UPDATE [AzMan_AzScope]
                SET [ChildUpdateTimeStamp]=@OldChildTS
                WHERE ID = @ObjectID
        END
        
    SET @Return = @@ERROR
    
    RETURN @Return
    
GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_GetRoleMemberCount' and type = 'P')
    DROP PROCEDURE AzMan_SP_GetRoleMemberCount
GO

CREATE PROCEDURE dbo.AzMan_SP_GetRoleMemberCount 
(
@SqlRoleName nvarchar(64),
@count int output
)
AS
    select @count = count(*)  
    from sysusers u, sysusers g, sysmembers m  
    where   g.uid = m.groupuid
        and    g.name = @SqlRoleName
        and    g.issqlrole = 1  
        and    u.uid = m.memberuid
	RETURN
GO


IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_GetSQLRole' and type = 'P')
    DROP PROCEDURE AzMan_SP_GetSQLRole
GO

Create Procedure [AzMan_SP_GetSQLRole]
(
@Return [int] output,
@ID [int]
,@ObjectType [tinyint]
,@RoleType [tinyint]
,@SQLRoleName [nvarchar] (64) output
)
As
    Set @Return = 0
    
    Select @SQLRoleName = SQLRoleName from Azman_SQLRole
    where  ObjectID = @ID and ObjectType = @ObjectType and RoleType = @RoleType
Go

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPI_SQLRole' and type = 'P')
    DROP PROCEDURE AzMan_SPI_SQLRole
GO

Create PROCEDURE dbo.AzMan_SPI_SQLRole
(
 @Return [int] output
,@ID int
,@ObjectType [tinyint]
,@RoleType [tinyint]
,@SQLRoleName [nvarchar] (64) output    
)
AS
    Set @SQLRoleName = ''

    DECLARE @myid   uniqueidentifier
    DECLARE @RoleID smallint
    DECLARE @Ret    [int]
    
    declare @dbName nvarchar (255)

    Set @Return = 0


    SET @myid = NEWID()
    Set @SQLRoleName = CONVERT(varchar(64), @myid)
    Set @RoleID = 1 
    
    If Is_Member('db_owner') = 1 or Is_Member('db_securityadmin') = 1
    Begin
        EXEC @Ret = sp_addrole @SQLRoleName
    End
    else
    begin
        Set @dbName = db_name()
        Exec master.dbo.xp_AzManAddRole @Ret output, @ID, @ObjectType, @dbName, @SQLRoleName
    End
    
    if @Ret = 0 
        Begin
            select @RoleID = uid from sysusers where (name = @SQLRoleName) and (issqlrole = 1)
            
            Insert Into [dbo].[Azman_SQLRole]
            (
                [uid],      
                [ObjectID], 
                [ObjectType],
                [SQLRoleName],
                [RoleType] 
            )
            Values
            (
                @RoleID,
                @ID,
                @ObjectType,
                @SQLRoleName,
                @RoleType
            )
        End     
    Else
        Begin
            Set @Return = -1
        End

    Return @Return  
go

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPI_SQLRole_From_XP' and type = 'P')
    DROP PROCEDURE AzMan_SPI_SQLRole_From_XP
GO

Create PROCEDURE dbo.AzMan_SPI_SQLRole_From_XP
(
 @Return [int] output
,@SQLRoleName [nvarchar] (64) 
)
AS

    DECLARE @RoleID smallint
    DECLARE @Ret    [int]

    Set @Return = -1
    Set @RoleID = -1

    EXEC @Ret = sp_addrole @SQLRoleName
    
    if @Ret = 0 
        Begin
            select @RoleID = uid from sysusers where (name = @SQLRoleName) and (issqlrole = 1)
            if @RoleID <> -1
            Begin
                set @Return = 0
            End
        End     
    Else
        Begin
            Set @Return = -1
        End

    Return @Return  
go

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPI_Add_User_To_SQLRole_From_XP' and type = 'P')
    DROP PROCEDURE AzMan_SPI_Add_User_To_SQLRole_From_XP
GO

CREATE PROCEDURE AzMan_SPI_Add_User_To_SQLRole_From_XP
(
 @Return             [int] output
,@ID                 [int]
,@ObjectType         [tinyint]
,@RoleType           [tinyint]
,@UserName          [nvarchar] (255)
)
AS
    DECLARE @Ret                [int]
    Declare @NameInDB           [nvarchar] (255)
    Declare @SQLRoleName        [nvarchar] (64) 
    DECLARE @RoleMemberCount    [int]
    Set @Return = -1    
    
    Set @SQLRoleName = NULL
    
    Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, 
            @ID, 
            @ObjectType, 
            @RoleType, 
            @SQLRoleName = @SQLRoleName output  

    if len(@SQLRoleName) > 0
    Begin
    
        set @NameInDB = null                          

        SET @Ret = 0

        -- if no such loging yet, then grant the user login
        IF NOT EXISTS (SELECT * FROM master..syslogins WHERE UPPER(loginname) = UPPER(@UserName) AND hasaccess=1)
            BEGIN
                EXEC @Ret = sp_grantlogin @UserName
            END

        -- if the user does not have access to the db
        IF @Ret= 0 AND NOT EXISTS (SELECT * FROM sysusers WHERE UPPER(Name) = UPPER(@UserName) AND hasdbaccess = 1)
            BEGIN
                EXEC @Ret = sp_grantdbaccess @UserName, @NameInDB output
            END
            
        -- workaround for now sp_grantdbaccess returns 1 when the user already has access
        if @Ret= 0 or len(@NameInDB) > 0
            BEGIN
                Exec @Ret = sp_addrolemember  @SQLRoleName, @UserName
                -- if the user is successfully added to a scope's role
                IF @Ret = 0 AND @ObjectType = 4 -- scope
                    BEGIN
                        EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output
                        IF @RoleMemberCount > 0
	                        UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 1 
	                            WHERE dbo.AzMan_AzScope.ID = @ID
                    END
            END
    End
        
    Set @Return = @Ret 
GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPI_Add_User_To_SQLRole' and type = 'P')
    DROP PROCEDURE AzMan_SPI_Add_User_To_SQLRole
GO

CREATE PROCEDURE AzMan_SPI_Add_User_To_SQLRole
(
 @Return             [int] output
,@ID                 [int]
,@ObjectType         [tinyint]
,@RoleType           [tinyint]
,@SQLRoleName        [nvarchar] (64) 
,@UserSid            varbinary(85)
,@UserName          [nvarchar] (255)
,@SaclIsOn          [bit]
)
AS
    DECLARE @Ret    [int]
    Declare @NameInDB [nvarchar] (255)
    DECLARE @ObjectName nvarchar(512)
    DECLARE @ObjectGuid uniqueidentifier
    DECLARE @MemberType int    
    declare @dbName nvarchar (255)
    DECLARE @RoleMemberCount    [int]
    
    Set @Return = -1

    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            IF @ObjectType = 0 -- store
                SELECT @ObjectName = store.Name, @ObjectGuid=store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store
                    WHERE store.ID=@ID
            IF @ObjectType = 1 -- app
                SELECT @ObjectName = app.Name, @ObjectGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                    WHERE app.ID=@ID
            IF @ObjectType = 4 -- scope
                SELECT @ObjectName = scope.Name, @ObjectGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope
                    WHERE scope.ID=@ID
            
            IF @RoleType = 1  -- admin
                SET @MemberType = 2
            IF @RoleType = 2  -- reader
                SET @MemberType = 3
            IF @RoleType = 3  -- delegated users
                SET @MemberType = 4
        END
                     
    set @NameInDB = null
    If Is_Member('db_owner') = 1
    Begin
        exec AzMan_SPI_Add_User_To_SQLRole_From_XP @Return output, @ID, @ObjectType, @RoleType, @UserName
    End
    else
    Begin
        Set @dbName = db_name()
        Exec master.dbo.xp_AzManAddUserToRole @Return output, @ID, @ObjectType, @RoleType, @dbName, @UserName
    End
    
    -- trigger the parent object's update timestamp
    IF @Return = 0
        BEGIN
            Exec AzMan_SPU_SqlRoleUpdated @Ret output, @ID, @ObjectType
            IF @ObjectType = 4 -- scope
                BEGIN
                    EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output
                    IF @RoleMemberCount > 0
	                    UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 1 
	                        WHERE dbo.AzMan_AzScope.ID = @ID
                END
        END
        
    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateMemberAudit]
                @Return,
                4,  -- 0 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN
                @ObjectType,
                @ObjectName,
                @ObjectGuid,
                @UserName,
                @UserSid,
                @MemberType,  -- member type
                N'' -- no other info
        END
            
	Return @Return

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPI_Create_SqlRole_For_Object' and type = 'P')
    DROP PROCEDURE AzMan_SPI_Create_SqlRole_For_Object
GO

CREATE PROCEDURE AzMan_SPI_Create_SqlRole_For_Object
(
 @Return                [int] output
,@ID                    [int]
,@ObjectType        [tinyint]
,@RoleType          [tinyint]  
)
AS
    DECLARE @Ret            [int]
    DECLARE @SQLRoleName    [nvarchar] (255)
    
    DECLARE @SaclIsOn [bit]
    DECLARE @AccessAtObjType tinyint
    Set @SaclIsOn = 0
    Set @Return = 0
    
    Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, 
            @ID, 
            @ObjectType, 
            @RoleType, 
            @SQLRoleName = @SQLRoleName output  
    
    if @SQLRoleName Is NULL
        begin
            Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output
            if @Return <> 1
                begin
                    Set @Return = -5
                    goto Done
                end
            -- we have proper access, then insert the role
            Exec AzMan_SPI_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output
        end
    
Done:

    Return @Return  

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPI_Add_User_To_Role' and type = 'P')
    DROP PROCEDURE AzMan_SPI_Add_User_To_Role
GO

CREATE PROCEDURE AzMan_SPI_Add_User_To_Role
(
 @Return                [int] output
,@ID                    [int]
,@ObjectType        [tinyint]
,@RoleType          [tinyint]
,@UserSid           varbinary(85)
,@UserName          [nvarchar] (255)    
)
AS
    DECLARE @Ret            [int]
    DECLARE @SQLRoleName    [nvarchar] (255)
    Declare @NameInDB       [nvarchar] (255)
    
    DECLARE @SaclIsOn [bit]
    DECLARE @AccessAtObjType tinyint
    Set @SaclIsOn = 0
    Set @Return = 0
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output
    
    IF @Return <> 1
        BEGIN
            Set @Return = -5
            goto Done
        END
        
    Set @Return = -1

    Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, 
            @ID, 
            @ObjectType, 
            @RoleType, 
            @SQLRoleName = @SQLRoleName output  

    if @SQLRoleName  Is NULL
    Begin
        Exec AzMan_SPI_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output
    End
    
    if @SQLRoleName is NOT NULL
    Begin 
        Exec AzMan_SPI_Add_User_To_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName, @UserSid, @UserName, @SaclIsOn
    End
    Else
    Begin
        Set @Return = -1
    End     

Done:

    Return @Return  

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPD_User_From_SQLRole_From_XP' and type = 'P')
    DROP PROCEDURE AzMan_SPD_User_From_SQLRole_From_XP
GO

CREATE PROCEDURE AzMan_SPD_User_From_SQLRole_From_XP
(
@Return              [int] output
,@SQLRoleName        [nvarchar] (64)
,@UserName           [nvarchar] (255)
)
AS
    DECLARE @Ret    [int]
    
    SET NOCOUNT ON
    
    Set @Return = -1
    
    Exec @Ret = sp_droprolemember @SQLRoleName, @UserName
    
    if @Ret <> 0 
    Begin
        Set @Return = -1 
    End
    Else
    Begin
        Set @Return = 0 
    End
    
    SET NOCOUNT OFF
    
    Return @Return  
GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPD_User_From_SQLRole' and type = 'P')
    DROP PROCEDURE AzMan_SPD_User_From_SQLRole
GO

CREATE PROCEDURE AzMan_SPD_User_From_SQLRole
(
 @Return             [int] output
,@ID                 [int]
,@ObjectType         [tinyint]
,@RoleType           [tinyint]
,@SQLRoleName        [nvarchar] (64)
,@UserSid            varbinary(85)
,@UserName           [nvarchar] (255)
,@SaclIsOn           [bit]
)
AS
    DECLARE @Ret    [int]
    DECLARE @ObjectName nvarchar(512)
    DECLARE @ObjectGuid uniqueidentifier
    DECLARE @MemberType int 
    Declare @DbName [nvarchar] (255)    
    DECLARE @RoleMemberCount int
    DECLARE @OtherRoleMemberCount int
    
    DECLARE @OtherRoleName [nvarchar] (64)
    
    Set @Return = -1
    
    If is_Member('db_owner') = 1 or is_Member('db_securityadmin')  = 1 or is_member('db_accessyadmin') = 1
    Begin
        Exec @Ret = sp_droprolemember @SQLRoleName, @UserName
    End
    else
    begin
        Set @DbName = db_name()
        Exec master.dbo.xp_AzManRemoveUserFromRole 
                    @Ret output,
                    @ID,
                    @ObjectType,
                    @DbName,
                    @SQLRoleName,
                    @UserName
    End
    
    if @Ret <> 0 
    Begin
        Set @Return = -1 
    End
    Else
    Begin
        -- trigger the parent object's update timestamp
        Set @Return = 0
        Exec AzMan_SPU_SqlRoleUpdated @Return output, @ID, @ObjectType
        
        -- if the delete is successful to a scope role
        IF @Return = 0 AND @ObjectType = 4
            BEGIN
                -- we need to get the other role's name for the scope
                SET @OtherRoleName = NULL
                IF @RoleType = 1 -- admin
                    Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, 2, @OtherRoleName output
                ELSE IF @RoleType = 2 -- reader
                    Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, 1, @OtherRoleName output  
			    
                SET @RoleMemberCount = 0
                SET @OtherRoleMemberCount = 0
                IF @SQLRoleName IS NOT NULL
			        EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output
                IF @OtherRoleName IS NOT NULL
                    EXEC AzMan_SP_GetRoleMemberCount @OtherRoleName, @OtherRoleMemberCount output
                
                IF @RoleMemberCount = 0 AND @OtherRoleMemberCount = 0
	                UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 0 
	                    WHERE dbo.AzMan_AzScope.ID = @ID
            END
    End
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            IF @ObjectType = 0 -- store
                SELECT @ObjectName = store.Name, @ObjectGuid=store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store
                    WHERE store.ID=@ID
            IF @ObjectType = 1 -- app
                SELECT @ObjectName = app.Name, @ObjectGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                    WHERE app.ID=@ID
            IF @ObjectType = 4 -- scope
                SELECT @ObjectName = scope.Name, @ObjectGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope
                    WHERE scope.ID=@ID
                    
            IF @RoleType = 1  -- admin
                SET @MemberType = 2
            IF @RoleType = 2  -- reader
                SET @MemberType = 3
            IF @RoleType = 3  -- delegated users
                SET @MemberType = 4

            -- generate an audit
            EXEC [AzMan_SP_GenerateMemberAudit]
                @Return,
                5,  -- 0 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE
                @ObjectType,
                @ObjectName,
                @ObjectGuid,
                @UserName,
                @UserSid,
                @MemberType,  -- member type
                N'' -- no other info
        END
	
    Return @Return  

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPD_User_From_Role' and type = 'P')
    DROP PROCEDURE AzMan_SPD_User_From_Role
GO

CREATE PROCEDURE AzMan_SPD_User_From_Role
(
 @Return                [int] output
,@ID                    [int]
,@ObjectType            [tinyint]
,@RoleType              [tinyint]
,@UserSid               varbinary(85)
,@UserName              [nvarchar] (255)    
)
AS
    DECLARE @Ret            [int]
    DECLARE @SQLRoleName    [nvarchar] (64) 
    DECLARE @SaclIsOn [bit]
    DECLARE @AccessAtObjType tinyint
    Set @SaclIsOn = 0
    Set @Return = 0
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output
    
    IF @Return <> 1
        BEGIN
            Set @Return = -5
            goto Done
        END

    Set @Return = -1

    Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output  
    
    if @SQLRoleName Is not NULL
    Begin
        Exec AzMan_SPD_User_From_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName, @UserSid, @UserName, @SaclIsOn
    End
    
Done:
    Return @Return  

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPS_Get_DBOwners' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Get_DBOwners
GO

CREATE PROCEDURE AzMan_SPS_Get_DBOwners
(
@Return [int] output,
@ID     [int]
)
AS
    SET NOCOUNT ON
    -- @ID is not used. But our internal implementation requires non-empty
    -- parameter set where @Return is not considered one of them.
    EXEC @Return = sp_helprolemember 'db_owner'
    
    SET NOCOUNT OFF
    
    Return @Return 

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPS_Get_Role_For_Object' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Get_Role_For_Object
GO

CREATE PROCEDURE AzMan_SPS_Get_Role_For_Object
(
@Return      [int] output
,@ID         [int]
,@ObjectType [tinyint]
,@RoleType   [tinyint]
)
AS
    DECLARE @SQLRoleName [nvarchar] (64)

    SET NOCOUNT ON
    
    Set @SQLRoleName = NULL
    Set @Return = 0

    Select @SQLRoleName = SQLRoleName From [dbo].[Azman_SQLRole]
    where 
      [ObjectID]    = @ID and
      [ObjectType]  = @ObjectType and
      [RoleType]    = @RoleType
    
    if @SQLRoleName is not NULL 
        Begin
            EXEC @Return = sp_helprolemember @SQLRoleName
        End
    
    SET NOCOUNT OFF
    
    Return @Return
    
GO


IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_Get_Object_Path_For_Container' and type = 'P')
    DROP PROCEDURE AzMan_SP_Get_Object_Path_For_Container
GO

Create Procedure [AzMan_SP_Get_Object_Path_For_Container]
(
 @Return                [int]   output
,@ID                    [int]
,@ObjectType            [tinyint]
,@StoreID               [int]   output
,@AppID                 [int]   output
,@ScopeID               [int]   output
)
AS
    DECLARE @RowCount INT, @Error INT
    Declare @ParentID [int]
    Declare @ParentType [int]

    Set @StoreID  = -1
    Set @AppID    = -1
    Set @ScopeID  = -1
    Set @Return   = 0 
    
    if @ObjectType = 0 --Store
    Begin
        Set @StoreID = @ID
    End 
    if @ObjectType = 1 -- App
    Begin
        Select @StoreID=StoreID From AzMan_AzApplication where ID = @ID
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        
        if @RowCount <> 1
        Begin
            if @Error = 0
            Begin
                Set @Return = -1168 -- Record not found
            End
            Else
            Begin
                Set @Return = @Error 
            End
        End
        else
        Begin
            Set @AppID = @ID        
        End
    End

    If @ObjectType = 4 -- Scope
    Begin
        Select @AppID   = AppID From [AzMan_AzScope] where ID = @ID
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
        if @RowCount = 1
        Begin
            Select @StoreID = StoreID From AzMan_AzApplication where ID = @AppID
            
            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT        
            if @RowCount <> 1
            Begin
                if @Error = 0
                Begin
                    Set @Return = -1168 -- Record not found
                End
                Else
                Begin
                    Set @Return = @Error 
                End
            End
            else
            Begin
                Set @ScopeID = @ID
            End
        End
        else
        Begin
            if @Error = 0
            Begin
                Set @Return = -1168 -- Record not found
            End
            Else
            Begin
                Set @Return = @Error 
            End
        End
    End     
    
Return @Return

Go  

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_Get_Object_Path' and type = 'P')
    DROP PROCEDURE AzMan_SP_Get_Object_Path
GO

Create Procedure [AzMan_SP_Get_Object_Path]
(
 @Return [int] output
,@ID [int]
,@ObjectType [tinyint]
,@StoreID [int] output
,@AppID [int]   output
,@ScopeID [int] output
)
AS
    Declare @ParentID [int]
    Declare @ParentType [int]
    DECLARE @RowCount INT, @Error INT

    Set @StoreID  = -1
    Set @AppID    = -1
    Set @ScopeID  = -1
    Set @Return   = 0 
    
    if @ObjectType = 0 --Store
    Begin
        Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output
        goto Return_Get_ObjPath     
    End 
    
    if @ObjectType = 1 -- App
    Begin
        Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output
        goto Return_Get_ObjPath     
    End
    
    If @ObjectType = 2 -- Operation
    Begin
        Select @AppID=   AppID From [AzMan_AzOperation] where ID = @ID
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT        
        if @RowCount <> 1
        Begin
            if @Error = 0
            Begin
                Set @Return = -1168 -- Record not found
            End
            Else
            Begin
                Set @Return = @Error 
            End
        End
        Else
        Begin
            Select @StoreID =StoreID From AzMan_AzApplication where ID = @AppID
            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
            if @RowCount <> 1
            Begin
                if @Error = 0
                Begin
                    Set @Return = -1168 -- Record not found
                End
                Else
                Begin
                    Set @Return = @Error 
                End
            End
        End
        
        goto Return_Get_ObjPath     
    End     
    
    If @ObjectType = 4 -- Scope
    Begin
        Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output
        goto Return_Get_ObjPath
    End     

    If @ObjectType = 3 -- Task
    Begin
        Select @ParentID = 
                case ParentType
                    when 1 then AppID
                    when 4 then ScopeID
                end,
               @ParentType = ParentType from [AzMan_AzTask] where ID = @ID
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT               
        
    End

    If @ObjectType = 5 -- Group
    Begin
        Select @ParentID = 
                case ParentType
                    when 0 then StoreID
                    when 1 then AppID
                    when 4 then ScopeID 
                end,
              @ParentType = ParentType 
        from [AzMan_AzApplicationGroup] where ID = @ID
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT        
    End
    
    If @ObjectType = 6 -- Role
    Begin
        Select @ParentID =  
                case ParentType
                    when 1 then AppID
                    when 4 then ScopeID
                end,
            @ParentType = ParentType 
        from AzMan_AzRoleAssignment where ID = @ID
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT        
    End
    

    if @RowCount <> 1
    Begin
        if @Error = 0
        Begin
            Set @Return = -1168 -- Record not found
        End
        Else
        Begin
            Set @Return = @Error 
        End
    End
    else
    Begin
        exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ParentID, @ParentType, @StoreID output, @AppID output, @ScopeID output
    End 
    
Return_Get_ObjPath:
    Return @Return

Go  

-- Access Check Store Procedure

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_AccessCheck_For_Container' and type = 'P')
    DROP PROCEDURE AzMan_SP_AccessCheck_For_Container
GO

Create Procedure [AzMan_SP_AccessCheck_For_Container]
(
 @Return [int] output
,@ID [int] 
,@ObjectType [tinyint]
)

As
    -- Check MemberShip starting with current node and going up
    Declare @SQLRoleName     [nvarchar](64) 
    Declare @SQLRoleType     [TinyInt]  
    
    Set @Return      = -5

    -- Check Admin
    
    Set @SQLRoleType = 1
    Set @SQLRoleName = ''
    
    Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output

    -- Is a member of admin 
    
    if @SQLRoleName <> ''
    Begin
        If Is_Member(@SQLRoleName) = 1
        Begin
            Set @Return = 1 -- Admin Access
            Goto Exit_AzMan_SP_AccessCheck_For_Container
        End
    End

    -- Is a member of Reader?

    Set @SQLRoleType = 2
    Set @SQLRoleName = ''   
    
    Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output
    
    if @SQLRoleName <> ''
    Begin
        If Is_Member(@SQLRoleName) = 1
        Begin
            Set @Return = 2 -- Reader Access
            Goto Exit_AzMan_SP_AccessCheck_For_Container
        End
    End
    
    
    -- Is a member of Delegated Users?

    Set @SQLRoleType = 3
    Set @SQLRoleName = ''   
    
    Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output
    
    if @SQLRoleName <> ''
    Begin
        If Is_Member(@SQLRoleName) = 1
        Begin
            Set @Return = 3 -- Delegated user Access
            Goto Exit_AzMan_SP_AccessCheck_For_Container
        End
    End
    
    
Exit_AzMan_SP_AccessCheck_For_Container:
    Return  @Return
GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_AccessCheck' and type = 'P')
    DROP PROCEDURE AzMan_SP_AccessCheck
GO

Create Procedure [AzMan_SP_AccessCheck]
(
 @Return [int] output
,@AccessAtObjType [tinyint] output 
,@ID [int] 
,@ObjectType [tinyint]
,@CheckSacl [bit] = 0
,@SaclIsOn [bit] output
)

As
    -- Check MemberShip starting with current node and going up
    Declare @SQLRoleName     [nvarchar](64) 
    Declare @SQLRoleType     [TinyInt]  
    
    Declare @StoreID        [int] 
    Declare @AppID          [int]   
    Declare @ScopeID        [int] 
    Declare @StoreAccess    [int]
    
    -- If this bit is set we know access check result, but we need to do SACL
    Declare @CheckSaclOnly  [int]
    Declare @TempRet [int]
    
    Set @Return      = -5
    Set @StoreAccess = -5   
    Set @AccessAtObjType = 0
    
    -- default to SACL off
    Set @SaclIsOn = 0
    Set @CheckSaclOnly = 0
    
    -- If the user is a DB_Owner, he has full control
    
    if  Is_Member('db_owner') = 1
        Begin
            set @Return = 1
            --print 'User is member of db_Owner'
            IF @CheckSacl = 0
                Goto Exit_AzMan_SP_AccessCheck
            ELSE
                Set @CheckSaclOnly = 1
        End
    else if  Is_Member('db_datawriter') = 1
        -- If the user is a data writer he has full control
        Begin
            set @Return = 1
            --print 'User is member of db_datawriter' 
            IF @CheckSacl = 0
                Goto Exit_AzMan_SP_AccessCheck
            ELSE
                Set @CheckSaclOnly = 1
        End
    else if  Is_Member('db_datareader') = 1
        -- If the user is a data reader he has read control
        Begin
            set @Return = 2
            --print 'User is member of db_datareader' 
            IF @CheckSacl = 0
                Goto Exit_AzMan_SP_AccessCheck
            ELSE
                Set @CheckSaclOnly = 1
        End
    
    IF @CheckSaclOnly = 1
        Set @TempRet = @Return
        
    -- Go all the way up to the store
    -- Check Access from top to bottom
    
    Exec AzMan_SP_Get_Object_Path @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output    
    
    -- Error ? Record not found 
    if @Return < 0
    Begin
        goto Exit_AzMan_SP_AccessCheck  
    End
    
    -- we honor application's SACL setting over the store's
    IF @CheckSacl = 1 AND @StoreID <> -1 AND @AppID <> -1
        BEGIN
            SELECT @SaclIsOn = IsNull(ApplyStoreSacl, 0) FROM AzMan_AzApplication App WHERE App.ID = @AppID AND App.StoreID = @StoreID
        END
    ELSE IF @CheckSacl = 1 AND @StoreID <> -1
        BEGIN
            SELECT @SaclIsOn = IsNull(ApplyStoreSacl, 0) FROM AzMan_AzAuthorizationStore Store WHERE Store.ID = @StoreID
        END
            
    -- if we are only to check SACL settings (in other words, we already know the answer of access)
    IF @CheckSaclOnly = 1
        Goto Exit_AzMan_SP_AccessCheck
        
    if @StoreID <> -1
    Begin
        set @AccessAtObjType = 0
        Exec AzMan_SP_AccessCheck_For_Container @Return output, @StoreID, 0
        Set @StoreAccess = @Return
        if @Return <= 2
        Begin
            Goto Exit_AzMan_SP_AccessCheck
        End
    End
    else
    Begin
        Goto Exit_AzMan_SP_AccessCheck      
    End
    
    if @AppID <> -1
    Begin
        set @AccessAtObjType = 1
        Exec AzMan_SP_AccessCheck_For_Container @Return output, @AppID, 1
        if @Return <= 2
        Begin
            Goto Exit_AzMan_SP_AccessCheck
        End
    End
    else
    Begin
        Goto Exit_AzMan_SP_AccessCheck  
    End

    if @ScopeID <> -1
    Begin
        set @AccessAtObjType = 4
        Exec AzMan_SP_AccessCheck_For_Container @Return output, @ScopeID, 4
        if @Return <= 2 
        Begin
            Goto Exit_AzMan_SP_AccessCheck
        End
    End
    Begin
        Goto Exit_AzMan_SP_AccessCheck  
    End
    
    
Exit_AzMan_SP_AccessCheck:

    IF @CheckSaclOnly = 1
        Set @Return = @TempRet
        
    Return  @Return


GO

Create PROCEDURE dbo.AzMan_SPS_Get_StoreIDByName
(
    @Return [int] output,
    @ID int OUTPUT,    
    @Name nvarchar(512)
)
AS
Set @ID = -1    -- this means it doesn't exist
Set @Return = 0 

SELECT @ID = ID FROM AzMan_AzAuthorizationStore WHERE Name = @Name

RETURN @@RowCount

go

Create Procedure [AzMan_SP_Check_Dup_Task_For_Given_Parent]
(
    @Return [int] output,
    @ParentID	[int],
    @ParentType     [tinyint] ,
    @ID [int],
    @Name           [nvarchar](64) 
)
AS

Set @Return = 0

    -- Make sure that the name doesn't exist at the same level
    
    if @ParentType = 1
    Begin
        if Exists( Select [Name] from 
            [dbo].[AzMan_AzTask] 
        where 
            ParentType = @ParentType and
            AppID      = @ParentID   and        
            ID <> IsNULL(@ID,0) and
            LOWER([Name]) = LOWER(@Name) )
        Begin
            Set @Return = -183  -- Same Name exist
        End
    End
    else if @ParentType = 4
    Begin
        if Exists( Select [Name] from 
            [dbo].[AzMan_AzTask] 
        where 
            ParentType = @ParentType and
            ScopeID    = @ParentID   and        
            ID <> IsNULL(@ID,0) and
            LOWER([Name]) = LOWER(@Name) )
        Begin
            Set @Return = -183  -- Same Name exist
        End
    End
    else
    Begin
        Set @Return = -87   -- invalid parameter
    End
Return @Return

go 

Create Procedure [AzMan_SP_Check_Dup_Task]
(
    @Return [int] output,
    @ParentID	[int],
    @ParentType     [tinyint] ,
    @ID [int],
    @Name           [nvarchar](64) 
)
AS

Declare @ParentAppID [int]

Set @Return = 0
Set @ParentAppID = 0

    -- First Check the current Parent
    exec AzMan_SP_Check_Dup_Task_For_Given_Parent @Return output, @ParentID, @ParentType, @ID, @Name
    
    if  @Return <> 0 
    Begin
        Return(@Return)
    End
    
    -- Behave differently depending on the object type of the parent object
    
    -- A task that is a child of an application
    --  cannot have the same name as any tasks that are children of any of the child scopes.
    
    if @ParentType = 1		-- Application
    Begin
        Set @ParentAppID = @ParentID
        if Exists( Select [Name] from 
            [dbo].[AzMan_AzTask] 
        where 
            ( ParentType = 4 ) -- All Child scope
                and 
                LOWER([Name]) = LOWER(@Name)  and 
                (@ParentID IN ( Select AppID from AzMan_AzScope where AppID = @ParentID and ID <> IsNULL(@ID,0)) ) )
            
        Begin
            Set @Return = -183  -- Same Name exist
        End
    End
    else if @ParentType = 4		-- Scope
    Begin
    -- A task that is a child of a scope,
    --  cannot have the same name as tasks that are children of the application.
    
        -- Find the Parent App
        Select @ParentAppID = [AppID] 
        from AzMan_AzScope
        where [ID] = @ParentID
        
        if ( @ParentAppID = 0 )
        Begin
            Set @Return = -1 -- General Error
        End
        else
        Begin
            exec AzMan_SP_Check_Dup_Task_For_Given_Parent @Return output, @ParentAppID, 1, @ID, @Name
        End
    End
    
    -- Tasks and operations share a namespace so ensure there 
    -- isn't an operation by this name.			
    if  @Return = 0 
    Begin
        if Exists( Select [Name] from 
            [dbo].[AzMan_AzOperation] 
        where 
            LOWER([Name]) = LOWER(@Name) and
            (@ParentAppID = AppID) )
        Begin
            Set @Return = -183  -- Same Name exist
        End
    End
    

Return @Return

go 

Create Procedure [AzMan_SP_Check_Dup_RoleAssignment]
(
    @Return [int] output,
    @ParentID   [int],
    @ParentType [tinyint],
    @ID [int],
    @Name [nvarchar](64) 
)
AS

Set @Return = 0

    if @ParentType = 1
    Begin   
        if Exists( Select [Name] from 
            [dbo].[AzMan_AzRoleAssignment] 
        where 
            ParentType = @ParentType and
            AppID =   @ParentID and
            ID <> IsNULL(@ID,0) and
            LOWER([Name]) = LOWER(@Name) )
        Begin
            Set @Return = -183  -- Same Name exist
        End
    End
    else if @ParentType = 4
    Begin
        if Exists( Select [Name] from 
            [dbo].[AzMan_AzRoleAssignment] 
        where 
            ParentType = @ParentType and
            ScopeID =   @ParentID and
            ID <> IsNULL(@ID,0) and
            LOWER([Name]) = LOWER(@Name) )
        Begin
            Set @Return = -183  -- Same Name exist
        End
    End
    Else
    Begin
        Set @Return = -1
    End

Return @Return

go 

Create Procedure [AzMan_SP_Check_Dup_Application]
(
    @Return [int] output,
    @StoreID    [int],
    @ID [int],
    @Name [nvarchar](512) 
)
AS



Set @Return = 0

    -- Make sure that the name doesn't exist at the same level
    
    if Exists( Select [Name] from 
        [dbo].[AzMan_AzApplication] 
    where 
        StoreID =   @StoreID and ID <> IsNULL(@ID,0) and
        LOWER([Name]) = LOWER(@Name) )
    Begin
        Set @Return = -183  -- Same Name exist
    End

Return @Return

go 


Create Procedure [AzMan_SP_Check_Dup_Scope]
(
    @Return [int] output,
    @AppID  [int],
    @ID [int],
    @NameHash [binary] (32)
)
AS
    Set @Return = 0
    -- Make sure that the name doesn't exist at the same level

    begin
        if Exists( Select ID from 
            [dbo].[AzMan_AzScope] 
        where 
            ID          <>  IsNULL(@ID,0) and
            AppID       =   @AppID and
            [NameHash]  = @NameHash )
        Begin
            Set @Return = -183  -- Same Name exist
        End
    end

Return @Return



go

Create Procedure [AzMan_SP_Check_Dup_Operation]
(
    @Return [int] output,
    @AppID  [int],
    @ID [int],
    @Name [nvarchar](64) 
)
AS

Set @Return = 0

    -- Make sure that the name doesn't exist at the same level
    
    if Exists( Select [Name] from 
        [dbo].[AzMan_AzOperation] 
    where 
        AppID =   @AppID and
        ID <> IsNULL(@ID,0) and 
        LOWER([Name]) = LOWER(@Name) )
    Begin
        Set @Return = -183  -- Same Name exist
    End

Return @Return

go 


Create Procedure [AzMan_SP_Check_Dup_Group_For_Given_Parent]
(
    @Return [int] output,
    @ParentID   [int],
    @ParentType [tinyint] ,
    @ID [int],
    @Name [nvarchar](64) 
)
AS
    Set @Return = 0
        
    if @ParentType = 0
    Begin
        
    if Exists( Select [Name] from 
        [dbo].[AzMan_AzApplicationGroup] 
    where 
        ( ParentType = @ParentType ) 
        and (StoreID = @ParentID)
        and LOWER([Name]) = LOWER(@Name) 
        and ID <> IsNULL(@ID,0) )
    Begin
        Set @Return = -183  -- Same Name exist
    End
        
    End
    else if @ParentType = 1
    Begin
        if Exists( Select [Name] from 
            [dbo].[AzMan_AzApplicationGroup] 
        where 
            ( ParentType = @ParentType ) 
            and (AppID = @ParentID)
            and LOWER([Name]) = LOWER(@Name) 
            and ID <> IsNULL(@ID,0) )
        Begin
            Set @Return = -183  -- Same Name exist
        End

    End
    else if @ParentType = 4
    Begin
        if Exists( Select [Name] from 
            [dbo].[AzMan_AzApplicationGroup] 
        where 
            ( ParentType = @ParentType ) 
            and (ScopeID = @ParentID)
            and LOWER([Name]) = LOWER(@Name) 
            and ID <> IsNULL(@ID,0) )
        Begin
            Set @Return = -183  -- Same Name exist
        End

    End
    Else
    Begin
        Set @Return = -1
        Return (@Return)
    End
    
Return(@Return)

GO  

Create Procedure [AzMan_SP_Check_Dup_Group]
(
    @Return [int] output,
    @ParentID   [int],
    @ParentType [tinyint] ,
    @ID [int],
    @Name [nvarchar](64) 
)
AS

Declare @ParentStore [int]
Declare @ParentAppID [int]

Set @Return = 0
Set @ParentStore = 0
Set @ParentAppID = 0

    
    -- First Check the current Parent
    exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentID, @ParentType, @ID, @Name
    
    if  @Return <> 0 
    Begin
        Return(@Return)
    End

    -- Behave differently depending on the object type of the parent object
    --
    -- A group that is a child of the authorization store,
    --  cannot have the same name as any groups that are children of any of the child applications, and
    --  cannot have the same name as any groups that are children of any of the grandchild child scopes.

        if @ParentType = 0      -- Auth Store
        Begin

            if Exists( Select ID from 
                [dbo].[AzMan_AzApplicationGroup] 
            where 
                 ( ( ID <> IsNULL(@ID,0) ) and
                   ( [Name] = @Name )      and
                   (   (   ( ParentType = 1 ) and       -- Application
                           ( AppID in ( select ID from AzMan_AzApplication where StoreID = @ParentID ) )
                        )
                    or 
                        (  ( ParentType = 4 ) and   -- Scope
                           ( ScopeID in ( select ID from AzMan_AzScope 
                                            where AppID in (select ID from AzMan_AzApplication where StoreID = @ParentID) ) )
                        )
                    ) 
                 ) 
            )
            Begin
                Set @Return = -183  -- Same Name exist
            End
        End
        else if @ParentType = 1     -- Application
        Begin
        
            -- A group that is a child of an application
            --  cannot have the same name as groups that are children of the authorization store,
            --  and cannot have the same name as any groups that are children of any of the child scopes.
            
            -- Find the parent of Application 
            
            Select @ParentStore = [StoreID] 
            from AzMan_AzApplication
            where [ID] = @ParentID
            
            if ( @ParentStore = 0 )
            Begin
                Set @Return = -1 -- General Error
            End
            Else
            Begin
                -- and Check for conflict 
                exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentStore, 0, @ID, @Name
            End
            
            if ( @Return = 0 )
            Begin
                -- Find All the Child scopes of parent and check for conflicts
                
                if Exists( Select [Name] from 
                    [dbo].[AzMan_AzApplicationGroup] 
                where 
                    ( ParentType = 4 ) -- All Child scope
                      and 
                      LOWER([Name]) = LOWER(@Name)  and 
                     (@ParentID IN ( Select AppID from AzMan_AzScope where AppID = @ParentID and ID <> IsNULL(@ID,0)) ) )

                    
                Begin
                    Set @Return = -183  -- Same Name exist
                End
            End             
        End
        else if @ParentType = 4     -- Scope
        Begin
            -- A group that is a child of a scope,
            -- cannot have the same name as groups that are children of the application or authorization store
            
            -- Find the Parent App
            Select @ParentAppID = [AppID] 
            from AzMan_AzScope
            where [ID] = @ParentID
            
            if ( @ParentAppID = 0 )
            Begin
                Set @Return = -1 -- General Error
            End
            else
            Begin
                exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentAppID, 1, @ID, @Name
                
                if  @Return = 0 
                Begin
            
                    -- Find the Parent Store
                    Select @ParentStore = [StoreID] 
                    from AzMan_AzApplication
                    where [ID] = @ParentAppID
                    
                    if ( @ParentStore = 0 )
                    Begin
                        Set @Return = -1 -- General Error
                    End
                    else
                    Begin
                        exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentStore, 0, @ID, @Name
                    End
                End             
            End         
        End         

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzAuthorizationStore]
-- Inserts a new record in [AzMan_AzAuthorizationStore] table
(
  @Return       [int]   output  
, @ID [int] OUTPUT                            
, @ObjectGuid [uniqueidentifier] = Null     
, @DomainTimeout [int] = Null               
, @ScriptEngineTimeout [int] = Null         
, @MaxScriptEngines [int] = Null            
, @ApplyStoreSacl [bit] = Null              
, @GenerateAudits [bit] = 0                 
, @MajorVersion [int] = 1                   
, @MinorVersion [int] = 0                   
, @TargetMachine [nvarchar](50) = Null      
, @Description [nvarchar](1024) = Null      
, @Name [nvarchar] (512)        = NULL
, @ApplicationData [ntext] = Null           

) as 

    DECLARE @RowCount INT, @Error INT
    
    Set @Return = 0
    Set @ID     = 0 

    Set NoCount On
    
    Begin
        Insert Into [dbo].[AzMan_AzAuthorizationStore]
        (
              [ObjectGuid]
            , [Name]
            , [Description]
            , [ApplicationData]
            , [DomainTimeout]
            , [ScriptEngineTimeout]
            , [MaxScriptEngines]
            , [TargetMachine]
            , [ApplyStoreSacl]
            , [GenerateAudits]
            , [MajorVersion]
            , [MinorVersion]
        )

        Values
        (
             @ObjectGuid
            , @Name
            , @Description
            , @ApplicationData
            , @DomainTimeout
            , @ScriptEngineTimeout
            , @MaxScriptEngines
            , @TargetMachine
            , @ApplyStoreSacl
            , @GenerateAudits
            , @MajorVersion
            , @MinorVersion
        )

        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @RowCount = 1 
        Begin
            Set @ID = Cast(SCOPE_IDENTITY() As [int])
        End         
        else
        Begin
            Set @Return = @Error
        End
        
        -- generate a generic audit
        EXEC [AzMan_SP_GenerateGenericAudit]
                @Return,
                0,  -- 0 for store
                @Name,
                @ObjectGuid,
                N'Trying to create an AzAuthorizationStore'
                
        -- generate an audit

        EXEC [AzMan_SP_GenerateObjectAudit]
                @Return,
                0,  -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE
                0,  -- 0 for store
                @Name,
                @ObjectGuid,
                0,  -- 0 for store
                @Name,
                @ObjectGuid,
                N'' -- no other info
                
    End
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzApplication]

-- Inserts a new record in [AzMan_AzApplication] table
(
  @Return       [int]   output      
, @ID [int] = Null Output                   
, @ObjectGuid [uniqueidentifier] = Null     
, @StoreId [int]                    
, @ApplyStoreSacl [bit] = Null              
, @GenerateAudits [bit] = Null              
, @AuthzInterfaceClsId [int] = Null         
, @CheckDup [bit] = 1
, @ApplicationVersion [nvarchar](50) = Null 
, @Name [nvarchar](512) = Null              
, @Description [nvarchar](1024) = Null      
, @ApplicationData [ntext] = Null           
)

As

Set NoCount On

    Begin
    
    DECLARE @RowCount INT, @Error INT
    DECLARE @storeName [nvarchar](512)
    DECLARE @storeGuid [uniqueidentifier]
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    Set @Return = 0
    
        Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @StoreId, 0, 1, @SaclIsOn output
        
        -- Require Admin Access
        if @Return <> 1 
        Begin
            if (@Return >= 2)
            Begin
                Set @Return = -5 
            End
            goto Done
        End
    
        -- Check for duplicate name 
        IF @CheckDup = 1
            BEGIN
                Exec AzMan_SP_Check_Dup_Application @Return output, @StoreId, @ID, @Name
            END
        ELSE
            Set @Return = 0
            
        if @Return = 0 
        Begin

            Insert Into [dbo].[AzMan_AzApplication]
            (
                  [ObjectGuid]
                , [StoreID]
                , [Name]
                , [Description]
                , [ApplicationData]
                , [ApplyStoreSacl]
                , [GenerateAudits]
                , [AuthzInterfaceClsId]
                , [ApplicationVersion]
            )

            Values
            (
                  @ObjectGuid
                , @StoreId
                , @Name
                , @Description
                , @ApplicationData
                , @ApplyStoreSacl
                , @GenerateAudits
                , @AuthzInterfaceClsId
                , @ApplicationVersion
            )

            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            If @RowCount = 1
            Begin
                Set @ID = Cast(SCOPE_IDENTITY() As [int])
            End
            Else
            Begin
                Set @Return = @Error
            End
            
            -- generate an audit if SACL is on
            IF @SaclIsOn = 1
                BEGIN
                    -- get the store info
                    SELECT @storeName = Store.Name, @storeGuid = Store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] Store
                        WHERE Store.ID = @StoreId

                    -- generate an audit
                    EXEC [AzMan_SP_GenerateObjectAudit]
                        @Return,
                        0,  -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE
                        0,  -- 0 for store
                        @storeName,
                        @storeGuid,
                        1,  -- 1 for Application
                        @Name,
                        @ObjectGuid,
                        N'' -- no other info
               END
        End         
    End

Done:

Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPU_AzApplication]

-- Update an existing record in [AzMan_AzApplication] table

(
  @Return       [int]   output  
, @ID [int] 
, @StoreId [int]                    
, @ConsiderNull_Description bit = 0
, @ConsiderNull_ApplicationData bit = 0
, @ApplyStoreSacl [bit] = Null                      
, @ConsiderNull_ApplyStoreSacl bit = 0
, @GenerateAudits [bit] = Null                      
, @ConsiderNull_GenerateAudits bit = 0
, @AuthzInterfaceClsId [int] = Null                 
, @ConsiderNull_AuthzInterfaceClsId bit = 0
, @ConsiderNull_ApplicationVersion bit = 0
, @ApplicationVersion [nvarchar](50) = Null         
, @Name [nvarchar](512) 
, @Description [nvarchar](1024) = Null              
, @ApplicationData [ntext] = Null                   

)

As
DECLARE @ObjectGuid uniqueidentifier
Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set NoCount On

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5
        End
        goto Done
    End

Set @Return = 0

If @ConsiderNull_Description Is Null
    Set @ConsiderNull_Description = 0

If @ConsiderNull_ApplicationData Is Null
    Set @ConsiderNull_ApplicationData = 0

If @ConsiderNull_ApplyStoreSacl Is Null
    Set @ConsiderNull_ApplyStoreSacl = 0

If @ConsiderNull_GenerateAudits Is Null
    Set @ConsiderNull_GenerateAudits = 0

If @ConsiderNull_AuthzInterfaceClsId Is Null
    Set @ConsiderNull_AuthzInterfaceClsId = 0

If @ConsiderNull_ApplicationVersion Is Null
    Set @ConsiderNull_ApplicationVersion = 0


    IF @Name Is Not NULL
    Begin
        -- Check for duplicate name 
        Exec AzMan_SP_Check_Dup_Application @Return output, @StoreId, @ID, @Name
    End
    
    If @Return = 0 
    Begin 
        Update [dbo].[AzMan_AzApplication]

        Set
            [Name] = IsNull(@Name, [Name]) 
            ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End
            ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End
            ,[ApplyStoreSacl] = Case @ConsiderNull_ApplyStoreSacl When 0 Then IsNull(@ApplyStoreSacl, [ApplyStoreSacl]) When 1 Then @ApplyStoreSacl End
            ,[GenerateAudits] = Case @ConsiderNull_GenerateAudits When 0 Then IsNull(@GenerateAudits, [GenerateAudits]) When 1 Then @GenerateAudits End
            ,[AuthzInterfaceClsId] = Case @ConsiderNull_AuthzInterfaceClsId When 0 Then IsNull(@AuthzInterfaceClsId, [AuthzInterfaceClsId]) When 1 Then @AuthzInterfaceClsId End
            ,[ApplicationVersion] = Case @ConsiderNull_ApplicationVersion When 0 Then IsNull(@ApplicationVersion, [ApplicationVersion]) When 1 Then @ApplicationVersion End

        Where
            ([ID] = @ID)
    End              

    -- generate an audit if SACL is on
    IF @SaclIsOn = 1
        BEGIN
            -- get info for auditing
            SELECT @ObjectGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                WHERE app.ID = @ID

            -- generate an audit
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    1,  -- 0 for application
                    @Name,
                    @ObjectGuid,
                    N'The shallow properties of the application may have been modified'
        END
        
Done:
Set NoCount Off

Return(@Return)


GO

Create Procedure [AzMan_SPI_AzScope]

-- Inserts a new record in [AzMan_AzScope] table
(
  @Return       [int]   output  
, @ID [int] = Null      output
, @AppId [int] = Null                       
, @NameLen [int]         = 0                    
, @NameHash [Binary] (32) = NULL
, @ObjectGuid [uniqueidentifier] = Null         
, @CheckDup [bit] = 1
, @Description [nvarchar](1024) = Null          
, @Name [ntext]
, @ApplicationData [ntext] = Null               

)

As
DECLARE @appName nvarchar(512)
DECLARE @appGuid uniqueidentifier
Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set NoCount On

    Begin
    
    DECLARE @RowCount INT, @Error INT
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppId, 1, 1, @SaclIsOn output
    
    -- Require Admin Access at App
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End
    
    
    IF @CheckDup = 1
        BEGIN
            Exec AzMan_SP_Check_Dup_Scope @Return output, @AppId, -1, @NameHash
        End
    ELSE
        Set @Return = 0
            
    if @Return = 0 
    Begin

        Insert Into [dbo].[AzMan_AzScope]
        (
              [AppID]
            , [Name]
            , [NameLen]
            , [NameHash]
            , [Description]
            , [ApplicationData]
            , [ObjectGuid]
        )

        Values
        (
            @AppId
            , @Name
            , @NameLen
            , @NameHash
            , @Description
            , @ApplicationData
            , @ObjectGuid
        )
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        If @RowCount = 1
        Begin
            Set @ID = Cast(SCOPE_IDENTITY() As [int])               
        End
        Else
        Begin
            Set @Return = @Error
        End
    End
    
    IF @SaclIsOn = 1
        BEGIN
            -- get the store info for auditing
            SELECT @appName = app.Name, @appGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                WHERE app.ID = @AppId

            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                @Return,
                0,  -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE
                1,  -- 1 for Application
                @appName,
                @appGuid,
                4,  -- 4 for scope
                @Name,
                @ObjectGuid,
                N'' -- no other info
        END
    End
Done:
Set NoCount Off

Return(@Return)


GO

Create Procedure [AzMan_SPI_AzOperation]

-- Inserts a new record in [AzMan_AzOperation] table
(
  @Return       [int]   output  
, @ID [int] = Null Output                       
, @OperationID [int] = Null                     
, @AppId [int] = Null                       
, @ObjectGuid [uniqueidentifier] = Null         
, @CheckDup [bit] = 1
, @Name [nvarchar](64) = Null                   
, @Description [nvarchar](1024) = Null          
, @ApplicationData [ntext] = Null               

)

As
DECLARE @appName nvarchar(512)
DECLARE @appGuid uniqueidentifier
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set NoCount On
    Begin

    DECLARE @RowCount INT, @Error INT   
    Declare @AccessAtObjType [tinyint]
    Set @Return = 0 
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @AppId, 1, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End
    
    -- if check dup
    IF @CheckDup = 1
        BEGIN
            Exec AzMan_SP_Check_Dup_Operation @Return output, @AppId, @ID, @Name
        End
    ELSE
        Set @Return = 0
            
    if @Return = 0  
    Begin   
            
        Insert Into [dbo].[AzMan_AzOperation]
        (
              [ObjectGuid]
            , [AppID]
            , [Name]
            , [Description]
            , [ApplicationData]
            , [OperationID]
        )

        Values
        (
              @ObjectGuid
            , @AppId
            , @Name
            , @Description
            , @ApplicationData
            , @OperationID
        )

        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        If @RowCount = 1
        Begin
            Set @ID = Cast(SCOPE_IDENTITY() As [int])
        End
        Else
        Begin
            Set @Return = @Error
        End
        
    End
    
    IF @SaclIsOn = 1
        BEGIN
            -- get the store info for auditing
            SELECT @appName = app.Name, @appGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                WHERE app.ID = @AppId

            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                @Return,
                0,  -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE
                1,  -- 1 for Application
                @appName,
                @appGuid,
                2,  -- 2 for operation
                @Name,
                @ObjectGuid,
                N'' -- no other info
        END
    End
    
Done:
Set NoCount Off

Return(@Return)

GO


Create Procedure [AzMan_SPI_AzApplicationGroup]

-- Inserts a new record in [AzMan_AzApplicationGroup] table
(
  @Return       [int]   output  
, @ID [int] = Null Output 
, @ParentId [int] 
, @ParentType [int]  
, @GroupType [tinyint] = Null  
, @ObjectGuid [uniqueidentifier] = Null  
, @CheckDup [bit] = 1
, @Name [nvarchar](64) = Null  
, @Description [nvarchar](1024) = Null
)
As

    DECLARE @RowCount INT, @Error INT
    Declare @StoreID int, @AppID int , @ScopeID int
    
    -- parent name and guid is only needed for auditing
    DECLARE @parentName nvarchar(512)
    DECLARE @parentGuid uniqueidentifier
    
    Declare @AccessAtObjType [tinyint]
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0

    Set @Return = 0
    
    set @StoreID = 0 
    set @AppID   = 0
    set @ScopeID = 0

    Set NoCount On

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ParentId, @ParentType, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

    IF @CheckDup = 1
        BEGIN
            Exec AzMan_SP_Check_Dup_Group @Return output, @ParentId, @ParentType, @ID, @Name
        END
    ELSE
        Set @Return = 0
        
    if @Return = 0
    Begin

        if @ParentType = 0
        Begin
            set @StoreID = @ParentId
            -- get info for auditing            
            IF @SaclIsOn = 1
                BEGIN
                    SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store
                        WHERE store.ID = @ParentId
                END
        End
        else if @ParentType = 1
        Begin
            set @AppID = @ParentId 
            -- get info for auditing            
            IF @SaclIsOn = 1
                BEGIN
                    SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                        WHERE app.ID = @ParentId 
                END
        End         
        else if @ParentType = 4
        Begin
            set @ScopeID = @ParentId 
            -- get info for auditing            
            IF @SaclIsOn = 1
                BEGIN
                    SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope
                        WHERE scope.ID = @ParentId
                END
        End         

        Insert Into [dbo].[AzMan_AzApplicationGroup]
        (
            [ObjectGuid]
            , [StoreID]
            , [AppID]           
            , [ScopeID]                     
            , [ParentType]
            , [Name]
            , [Description]
            , [GroupType]
        )

        Values
        (
            @ObjectGuid
            , @StoreID
            , @AppID            
            , @ScopeID                      
            , @ParentType
            , @Name
            , @Description
            , @GroupType
        )
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        If @RowCount = 1
        Begin
            Set @ID = Cast(SCOPE_IDENTITY() As [int])
        End
        Else
        Begin
            Set @Return = @Error
        End
    End         
    
    IF @SaclIsOn = 1
        BEGIN
        -- generate an audit
        EXEC [AzMan_SP_GenerateObjectAudit]
            @Return,
            0,  -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE
            @ParentType,  -- parent type
            @parentName,
            @parentGuid,
            5,  -- 5 for group
            @Name,
            @ObjectGuid,
            N'' -- no other info
        END

Done:

Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzTask]

-- Inserts a new record in [AzMan_AzTask] table
(
  @Return       [int]   output  
, @ID [int] = Null Output 
, @IsRoleDefinition [bit] = 0 
, @ParentId [int] 
, @ParentType [tinyint]  
, @ObjectGuid [uniqueidentifier] = Null  
, @CheckDup [bit] = 1
, @Name [nvarchar](64) = Null  
, @Description [nvarchar](1024) = Null  
, @ApplicationData [ntext] = Null   
)
As

DECLARE @RowCount INT, @Error INT
Declare @AppID [int], @ScopeID [int]
DECLARE @parentName nvarchar(512)
DECLARE @parentGuid uniqueidentifier
Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0
    
Set @Return = 0

Set NoCount On

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

    Set @AppID = null
    Set @ScopeID = null
    
    if @ParentType = 1
    Begin
        Set @AppID = @ParentId
        -- get info for auditing            
        IF @SaclIsOn = 1
            BEGIN
                SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                    WHERE app.ID = @ParentId 
            END
    End
    Else if @ParentType = 4
    Begin 
        Set @ScopeID = @ParentId
        -- get info for auditing            
        IF @SaclIsOn = 1
            BEGIN
                SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope
                    WHERE scope.ID = @ParentId
            END
    End
    Else
    Begin
        Set @Return = -1
        goto Done
    End 

        -- Make sure that the name doesn't exist at the same level
        
        IF @CheckDup = 1
            BEGIN
                Exec AzMan_SP_Check_Dup_Task @Return output, @ParentId, @ParentType, @ID, @Name
            End
        ELSE
            Set @Return = 0
            
        if @Return = 0  
        Begin
            Insert Into [dbo].[AzMan_AzTask]
            (
                  [ObjectGuid]
                , [AppID]
                , [ScopeID]
                , [ParentType]
                , [Name]
                , [Description]
                , [ApplicationData]
                , [IsRoleDefinition]
            )

            Values
            (
                  @ObjectGuid
                , @AppID
                , @ScopeID
                , @ParentType
                , @Name
                , @Description
                , @ApplicationData
                , @IsRoleDefinition
            )
            
            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            If @RowCount = 1
            Begin
                Set @ID = Cast(SCOPE_IDENTITY() As [int])
            End
            Else
            Begin
                Set @Return = @Error
            End
        End
        
    IF @SaclIsOn = 1
        -- generate an audit
        EXEC [AzMan_SP_GenerateObjectAudit]
            @Return,
            0,  -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE
            @ParentType,  -- parent type
            @parentName,
            @parentGuid,
            3,  -- 3 for task
            @Name,
            @ObjectGuid,
            N'' -- no other info

Done:  
Set NoCount Off

Return(@Return)

GO


Create Procedure [AzMan_SPI_AzTask_Single_Operation]
(
  @Return [int] output
, @TaskID       [int]               -- ID Of task
, @OperationID  [int]
, @SaclIsOn     [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @taskName nvarchar(512)
DECLARE @taskGuid uniqueidentifier
DECLARE @opName nvarchar(512)
DECLARE @opGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    INSERT INTO [AzMan_Task_To_Operation_Link] 
        (TaskID, OperationID) 
    VALUES 
        (@TaskID, @OperationID) 
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1 --Generic Error
        End
    End
    
    IF @SaclIsOn = 1
        BEGIN
            -- get the info for auditing
            SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task
                WHERE Task.ID = @TaskID
            SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op
                WHERE Op.ID = @OperationID
                        
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    2,  -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN
                    3,  -- 3 for task
                    @taskName,
                    @taskGuid,
                    2,  -- 2 for Operation
                    @opName,
                    @opGuid,
                    N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzTask_Single_Operation]
(
  @Return [int] output
, @TaskID       [int]               -- ID Of task
, @OperationID  [int]
, @SaclIsOn     [bit]
)
As

Set @Return = 0

DECLARE @RowCount INT, @Error INT
DECLARE @taskName nvarchar(512)
DECLARE @taskGuid uniqueidentifier
DECLARE @opName nvarchar(512)
DECLARE @opGuid uniqueidentifier

Set NoCount On

    delete [AzMan_Task_To_Operation_Link] 
    where 
        TaskID = @TaskID and OperationID =  @OperationID 
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End
    End

    IF @SaclIsOn = 1
        BEGIN
            -- get the info for auditing
            SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task
                WHERE Task.ID = @TaskID
            SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op
                WHERE Op.ID = @OperationID
                        
            -- generate an audit

            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    3,  -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE
                    3,  -- 3 for task
                    @taskName,
                    @taskGuid,
                    2,  -- 2 for Operation
                    @opName,
                    @opGuid,
                    N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzTask_Multi_Operations]
(
  @Return [int] output
, @TaskID [int]             -- ID Of Task
, @SepChar [char] (1) = "|"
, @OperationIDs [nvarchar] (4000)
)
As

Set @Return = 0
DECLARE @equal char
DECLARE @addOrDelete nvarchar(10)
DECLARE @isAdd int
Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

SET @equal = '='

Set NoCount On

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

-- First parse the string
-- Insert each one of them 

DECLARE @OperationID varchar(100), @Pos int
Declare @iOperationID int

    SET @OperationIDs = LTRIM(RTRIM(@OperationIDs))+ @SepChar
    
    SET @Pos = CHARINDEX(@equal, @OperationIDs, 1)

    IF REPLACE(@OperationIDs, @SepChar, '') <> ''
    BEGIN
        WHILE @Pos > 0
        BEGIN
            SET @OperationID = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1)))
            Set @iOperationID = CAST(@OperationID as int)
            
            -- remove the left part (the id)
            SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos)
            
            -- now move to the pipe separator
            SET @Pos = CHARINDEX(@SepChar, @OperationIDs, 1)
            SET @addOrDelete = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1)))
            
            Set @isAdd = CAST(@addOrDelete as int)
            
            IF @iOperationID <> 0
            BEGIN
                -- if NNNN=0, then it means to delete
                IF @isAdd <> 0
                BEGIN
                    Exec AzMan_SPI_AzTask_Single_Operation @Return output, @TaskID, @iOperationID, @SaclIsOn
                    if @Return <> 0 
                    Begin
                        Break   
                    End
                End
                ELSE
                BEGIN
                    Exec AzMan_SPD_AzTask_Single_Operation @Return output, @TaskID, @iOperationID, @SaclIsOn
                    if @Return <> 0 
                    Begin
                        Break   
                    End
                End
            END
            SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos)
            SET @Pos = CHARINDEX(@equal, @OperationIDs, 1)
        END
    END 

Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzRoleAssignment_Single_Operation]
(
  @Return [int] output
, @RoleID       [int]               -- ID Of Role
, @OperationID  [int]
, @SaclIsOn     [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @roleName nvarchar(512)
DECLARE @roleGuid uniqueidentifier

DECLARE @opName nvarchar(512)
DECLARE @opGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    INSERT INTO [AzMan_Role_To_Operation_Link] 
        (RoleID, OperationID) 
    VALUES 
        (@RoleID, @OperationID) 
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1 --Generic Error
        End 
    End
    
    IF @SaclIsOn = 1
        BEGIN
            -- get the info for auditing
            SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role
                WHERE Role.ID = @RoleID
            SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op
                WHERE Op.ID = @OperationID
                        
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    2,  -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN
                    6,  -- 6 for role
                    @roleName,
                    @roleGuid,
                    2,  -- 2 for Operation
                    @opName,
                    @opGuid,
                    N'' -- no other info
        END

Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzRoleAssignment_Single_Operation]
(
  @Return [int] output
, @RoleID       [int]               -- ID Of Role assignment
, @OperationID  [int]
, @SaclIsOn     [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @roleName nvarchar(512)
DECLARE @roleGuid uniqueidentifier

DECLARE @opName nvarchar(512)
DECLARE @opGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    delete [AzMan_Role_To_Operation_Link] 
    where 
        RoleID = @RoleID and OperationID =  @OperationID 
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End
    End

    IF @SaclIsOn = 1
        BEGIN
            -- get the info for auditing
            SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role
                    WHERE Role.ID = @RoleID
            SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op
                    WHERE Op.ID = @OperationID
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    3,  -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE
                    6,  -- 6 for role
                    @roleName,
                    @roleGuid,
                    2,  -- 1 for Operation
                    @opName,
                    @opGuid,
                    N'' -- no other info
        END
        
Set NoCount Off

Return(@Return)

GO


Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_Operations]
(
  @Return [int] output  
, @RoleID [int]             -- ID Of Role
, @SepChar [nchar] (1) = "|"
, @OperationIDs [nvarchar] (4000)
)
As

Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0
Set @Return = 0

Set NoCount On

-- First parse the string
-- Insert each one of them 

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

DECLARE @OperationID nvarchar(100), @Pos int
Declare @iOperationID int
DECLARE @equal char
DECLARE @addOrDelete nvarchar(10)
DECLARE @isAdd int
SET @equal = '='

    SET @OperationIDs = LTRIM(RTRIM(@OperationIDs))+ @SepChar
    
    SET @Pos = CHARINDEX(@equal, @OperationIDs, 1)

    IF REPLACE(@OperationIDs, @SepChar, '') <> ''
    BEGIN
        WHILE @Pos > 0
        BEGIN
            SET @OperationID = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1)))
            Set @iOperationID = CAST(@OperationID as int)
            
            -- remove the left part (the id)
            SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos)
            
            -- now move to the pipe separator
            SET @Pos = CHARINDEX(@SepChar, @OperationIDs, 1)
            SET @addOrDelete = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1)))
            
            Set @isAdd = CAST(@addOrDelete as int)
            
            IF @iOperationID <> 0
            BEGIN
                -- if NNNN=0, then it means to delete
                IF @isAdd <> 0
                BEGIN
                    Exec AzMan_SPI_AzRoleAssignment_Single_Operation @Return output, @RoleID, @iOperationID, @SaclIsOn
                    if @Return <> 0
                    Begin
                        Break
                    End
                End
                ELSE
                BEGIN
                    Exec AzMan_SPD_AzRoleAssignment_Single_Operation @Return output, @RoleID, @iOperationID, @SaclIsOn
                    if @Return <> 0
                    Begin
                        Break
                    End
                END
            END
            
            SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos)
            SET @Pos = CHARINDEX(@equal, @OperationIDs, 1)
        END
    END 
    
Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzTask_Single_Task]
(
  @Return [int] output
, @TaskID       [int]               
, @ChildID      [int]
, @SaclIsOn     [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @taskName nvarchar(512)
DECLARE @taskGuid uniqueidentifier
DECLARE @refTaskName nvarchar(512)
DECLARE @refTaskGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    INSERT INTO [AzMan_Task_To_Task_Link] 
        (TaskID, ChildID) 
    VALUES 
        (@TaskID, @ChildID) 
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1 --Generic Error
        End 
    End
    
    -- get the info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task
                WHERE Task.ID = @TaskID
            SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask
                WHERE refTask.ID = @ChildID
                        
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    2,  -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN
                    3,  -- 3 for task
                    @taskName,
                    @taskGuid,
                    3,  -- 3 for task
                    @refTaskName,
                    @refTaskGuid,
                    N'' -- no other info
        END
        
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzTask_Single_Task]
(
  @Return [int] output,
  @TaskID       [int]               
, @ChildID      [int]
, @SaclIsOn     [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @taskName nvarchar(512)
DECLARE @taskGuid uniqueidentifier
DECLARE @refTaskName nvarchar(512)
DECLARE @refTaskGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    Delete From [AzMan_Task_To_Task_Link] 
    where TaskID = @TaskID and
          ChildID  = @ChildID 

    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        Set @Return = @Error
    End

    -- get the info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task
                WHERE Task.ID = @TaskID
            SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask
                WHERE refTask.ID = @ChildID
                        
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    3,  -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE
                    3,  -- 3 for task
                    @taskName,
                    @taskGuid,
                    3,  -- 3 for task
                    @refTaskName,
                    @refTaskGuid,
                    N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO


Create Procedure [AzMan_SPI_AzTask_Multi_Tasks]
(
  @Return [int] output
, @ParentTaskId [int]               -- ID Of Task
, @SepChar [char] (1) = "|"
, @TaskIDs [nvarchar] (4000)

)
As

Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set @Return = 0


Set NoCount On

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentTaskId, 3, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End


-- First parse the string
-- Insert each one of them 

DECLARE @TaskID varchar(100), @Pos int
Declare @iTaskID int
DECLARE @equal char
DECLARE @addOrDelete nvarchar(10)
DECLARE @isAdd int
SET @equal = '='

    SET @TaskIDs = LTRIM(RTRIM(@TaskIDs))+ @SepChar
    
    SET @Pos = CHARINDEX(@equal, @TaskIDs, 1)

    --IF REPLACE(@TaskIDs, @SepChar, '') <> ''
    BEGIN
        WHILE @Pos > 0
        BEGIN
            SET @TaskID = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1)))
            Set @iTaskID = CAST(@TaskID as int)
            
            -- remove the left part (the id)
            SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos)
            
            -- now move to the pipe separator
            SET @Pos = CHARINDEX(@SepChar, @TaskIDs, 1)
            SET @addOrDelete = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1)))
            
            Set @isAdd = CAST(@addOrDelete as int)
            
            
            IF @iTaskID <> 0
            BEGIN
                if @isAdd <> 0 
                Begin
                    Exec AzMan_SPI_AzTask_Single_Task @Return output, @ParentTaskId, @iTaskID, @SaclIsOn
                    if @Return <> 0
                    Begin
                        Break
                    End
                End                 
                else
                Begin
                    Exec AzMan_SPD_AzTask_Single_Task @Return output, @ParentTaskId, @iTaskID, @SaclIsOn
                    if @Return <> 0
                    Begin
                        Break
                    End
                End
                
            END
            SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos)
            SET @Pos = CHARINDEX(@equal, @TaskIDs, 1)
        END
    END 

Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzRoleAssignment_Single_Task]
(
  @Return [int] output,
  @RoleID       [int]               -- ID Of Role
, @TaskID       [int]
, @SaclIsOn     [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @roleName nvarchar(512)
DECLARE @roleGuid uniqueidentifier
DECLARE @refTaskName nvarchar(512)
DECLARE @refTaskGuid uniqueidentifier

Set @Return = 0


Set NoCount On

    INSERT INTO [AzMan_Role_To_Task_Link] 
        (RoleID, TaskID) 
    VALUES 
        (@RoleID, @TaskID) 
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1 --Generic Error
        End 
    End
        
    IF @SaclIsOn = 1
        BEGIN
            -- get the info for auditing
            SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role
                WHERE role.ID = @RoleID
            SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask
                WHERE refTask.ID = @TaskID
                        
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    2,  -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN
                    6,  -- 6 for role
                    @roleName,
                    @roleGuid,
                    3,  -- 3 for task
                    @refTaskName,
                    @refTaskGuid,
                    N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO

Create Procedure AzMan_SPD_AzRoleAssignment_Single_Task
(
  @Return [int] output,
  @RoleId [int]             -- ID Of Role Assignment
, @TaskID [int]
, @SaclIsOn     [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @roleName nvarchar(512)
DECLARE @roleGuid uniqueidentifier
DECLARE @refTaskName nvarchar(512)
DECLARE @refTaskGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    Delete From [AzMan_Role_To_Task_Link] 
    where TaskID    = @TaskID and
          RoleID    = @RoleId
          
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End 
    End
    
    -- get the info for auditing
    SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role
        WHERE role.ID = @RoleId
    SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask
        WHERE refTask.ID = @TaskID
    
    IF @SaclIsOn = 1
        BEGIN
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    3,  -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE
                    6,  -- 6 for role
                    @roleName,
                    @roleGuid,
                    3,  -- 3 for task
                    @refTaskName,
                    @refTaskGuid,
                    N'' -- no other info  
        END
Set NoCount Off

Return(@Return)

go


Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_Tasks]
(
  @Return [int] output
, @RoleId [int]             
, @SepChar [char] (1) = "|"
, @TaskIDs [nvarchar] (4000)
)
As

Set NoCount On

Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set @Return = 0


    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End


-- First parse the string
-- Insert each one of them 

DECLARE @TaskID varchar(100), @Pos int
Declare @iTaskID int
DECLARE @equal char
DECLARE @addOrDelete nvarchar(10)
DECLARE @isAdd int
SET @equal = '='


    SET @TaskIDs = LTRIM(RTRIM(@TaskIDs))+ @SepChar
    
    SET @Pos = CHARINDEX(@equal, @TaskIDs, 1)

    IF REPLACE(@TaskIDs, @SepChar, '') <> ''
    BEGIN
        WHILE @Pos > 0
        BEGIN
            SET @TaskID = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1)))
            Set @iTaskID = CAST(@TaskID as int)
            

            -- remove the left part (the id)
            SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos)
            
            -- now move to the pipe separator
            SET @Pos = CHARINDEX(@SepChar, @TaskIDs, 1)
            SET @addOrDelete = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1)))
            
            Set @isAdd = CAST(@addOrDelete as int)
            
            
            IF @iTaskID <> 0
            BEGIN
                -- if NNNN=0, then it means to delete
                IF @isAdd <> 0
                Begin           
                    Exec [AzMan_SPI_AzRoleAssignment_Single_Task] @Return output, @RoleId, @iTaskID, @SaclIsOn
                    if @Return <> 0
                    Begin
                        Break
                    End
                End
                else
                Begin
                    Exec [AzMan_SPD_AzRoleAssignment_Single_Task] @Return output, @RoleId, @iTaskID, @SaclIsOn
                    if @Return <> 0
                    Begin
                        Break
                    End
                End                 
            END
            SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos)
            SET @Pos = CHARINDEX(@equal, @TaskIDs, 1)
        END
    END 

Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzRoleAssignment]

(
  @Return [int] output
, @ID [int] = Null Output 
, @ParentId [int] 
, @ParentType [tinyint]  
, @ObjectGuid [uniqueidentifier] = Null  
, @CheckDup [bit] = 1
, @Name [nvarchar](64) = Null  
, @Description [nvarchar](1024) = Null  
, @ApplicationData [ntext] = Null   
)
As

DECLARE @RowCount INT, @Error INT
Declare @AppId [int] , @ScopeID [int]
DECLARE @parentName nvarchar(512)
DECLARE @parentGuid uniqueidentifier
Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set @Return = 0

Set NoCount On

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

        IF @CheckDup = 1
            BEGIN
                Exec AzMan_SP_Check_Dup_RoleAssignment @Return output, @ParentId, @ParentType, @ID, @Name
            END
        ELSE
            Set @Return = 0
            
        if @Return = 0 
        Begin 
        
            Set @AppId  = null
            Set @ScopeID= null 
            
            if @ParentType = 1
            Begin
                Set @AppId = @ParentId
                -- get info for auditing
                IF @SaclIsOn = 1
                    BEGIN
                        SELECT @parentName=app.Name, @parentGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                            WHERE app.ID = @ParentId
                    END
            End
            else if @ParentType = 4
            Begin
                Set @ScopeID = @ParentId
                -- get info for auditing
                IF @SaclIsOn = 1
                    BEGIN
                        SELECT @parentName=scope.Name, @parentGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope
                            WHERE scope.ID = @ParentId
                    END
            End
            else
            Begin
                Set @Return = -1
                Return
            End
    
            Insert Into [dbo].[AzMan_AzRoleAssignment]
            (
                  [ObjectGuid]
                , [AppID]
                , [ScopeID]
                , [ParentType]
                , [Name]
                , [Description]
                , [ApplicationData]
            )

            Values
            (
                  @ObjectGuid
                , @AppId
                , @ScopeID
                , @ParentType
                , @Name
                , @Description
                , @ApplicationData
            )

            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            If @RowCount = 1
            Begin

                Set @ID = Cast(SCOPE_IDENTITY() As [int])
            End
            Else
            Begin
                Set @Return = @Error
            End


        End         
        
    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    0,  -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE
                    @ParentType,
                    @parentName,
                    @parentGuid,
                    6,  -- 6 for role
                    @Name,
                    @ObjectGuid,
                    N'' -- no other info  
        END
Done:
          
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPU_AzAuthorizationStore]

-- Update an existing record in [AzMan_AzAuthorizationStore] table

(
  @Return [int] output
, @ID [int]
, @ConsiderNull_Description bit = 0
, @ConsiderNull_ApplicationData bit = 0
, @DomainTimeout [int] = Null                           
, @ConsiderNull_DomainTimeout bit = 0
, @ScriptEngineTimeout [int] = Null                     
, @ConsiderNull_ScriptEngineTimeout bit = 0
, @MaxScriptEngines [int] = Null                        
, @ConsiderNull_MaxScriptEngines bit = 0
, @ConsiderNull_TargetMachine bit = 0
, @ApplyStoreSacl [bit] = Null                          
, @ConsiderNull_ApplyStoreSacl bit = 0
, @GenerateAudits [bit] = Null                          
, @ConsiderNull_GenerateAudits bit = 0
, @MajorVersion [int] = Null                            
, @ConsiderNull_MajorVersion bit = 0
, @MinorVersion [int] = Null                            
, @ConsiderNull_MinorVersion bit = 0
, @TargetMachine [nvarchar](50) = Null                  
, @Description [nvarchar](1024) = Null                  
, @ApplicationData [ntext] = Null                       
)

As

DECLARE @RowCount INT, @Error INT
DECLARE @ObjectName nvarchar(512)
DECLARE @ObjectGuid uniqueidentifier
Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0
Set @Return = 0

Set NoCount On


    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

Set @Return = 0 -- no error

If @ConsiderNull_Description Is Null
    Set @ConsiderNull_Description = 0

If @ConsiderNull_ApplicationData Is Null
    Set @ConsiderNull_ApplicationData = 0

If @ConsiderNull_DomainTimeout Is Null
    Set @ConsiderNull_DomainTimeout = 0

If @ConsiderNull_ScriptEngineTimeout Is Null
    Set @ConsiderNull_ScriptEngineTimeout = 0

If @ConsiderNull_MaxScriptEngines Is Null
    Set @ConsiderNull_MaxScriptEngines = 0

If @ConsiderNull_TargetMachine Is Null
    Set @ConsiderNull_TargetMachine = 0

If @ConsiderNull_ApplyStoreSacl Is Null
    Set @ConsiderNull_ApplyStoreSacl = 0

If @ConsiderNull_GenerateAudits Is Null
    Set @ConsiderNull_GenerateAudits = 0

If @ConsiderNull_MajorVersion Is Null
    Set @ConsiderNull_MajorVersion = 0

If @ConsiderNull_MinorVersion Is Null
    Set @ConsiderNull_MinorVersion = 0

Update [dbo].[AzMan_AzAuthorizationStore]

Set
    [Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End
    ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End
    ,[DomainTimeout] = Case @ConsiderNull_DomainTimeout When 0 Then IsNull(@DomainTimeout, [DomainTimeout]) When 1 Then @DomainTimeout End
    ,[ScriptEngineTimeout] = Case @ConsiderNull_ScriptEngineTimeout When 0 Then IsNull(@ScriptEngineTimeout, [ScriptEngineTimeout]) When 1 Then @ScriptEngineTimeout End
    ,[MaxScriptEngines] = Case @ConsiderNull_MaxScriptEngines When 0 Then IsNull(@MaxScriptEngines, [MaxScriptEngines]) When 1 Then @MaxScriptEngines End
    ,[TargetMachine] = Case @ConsiderNull_TargetMachine When 0 Then IsNull(@TargetMachine, [TargetMachine]) When 1 Then @TargetMachine End
    ,[ApplyStoreSacl] = Case @ConsiderNull_ApplyStoreSacl When 0 Then IsNull(@ApplyStoreSacl, [ApplyStoreSacl]) When 1 Then @ApplyStoreSacl End
    ,[GenerateAudits] = Case @ConsiderNull_GenerateAudits When 0 Then IsNull(@GenerateAudits, [GenerateAudits]) When 1 Then @GenerateAudits End
    ,[MajorVersion] = Case @ConsiderNull_MajorVersion When 0 Then IsNull(@MajorVersion, [MajorVersion]) When 1 Then @MajorVersion End
    ,[MinorVersion] = Case @ConsiderNull_MinorVersion When 0 Then IsNull(@MinorVersion, [MinorVersion]) When 1 Then @MinorVersion End

Where
         ([ID] = @ID) 
         

    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        Set @Return = @Error
    End
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @ObjectName=store.Name, @ObjectGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store
                WHERE store.ID = @ID
            -- generate an audit
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    0,  -- 0 for store
                    @ObjectName,
                    @ObjectGuid,
                    N'The shallow properties of the store may have been modified'
        END
Done:
Set NoCount Off

Return(@Return)


GO

Create Procedure [AzMan_SPU_AzScope]

-- Update an existing record in [AzMan_AzScope] table

(
  @Return [int] output
,  @ID [int]                                    
, @AppId [int]              
, @ConsiderNull_Description bit = 0
, @ConsiderNull_ApplicationData bit = 0
, @NameHash [Binary] (32) = Null
, @Description [nvarchar](1024) = Null      
, @Name [ntext] = Null             
, @ApplicationData [ntext] = Null           

)

As
    Set NoCount On

    DECLARE @RowCount INT, @Error INT
    DECLARE @ObjectGuid uniqueidentifier
    DECLARE @iScopeNameLen int
    Declare @AccessAtObjType [tinyint]    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 4, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End
    
    -- Only store or app admin can modify property of the scope object
    if ( (@AccessAtObjType <> 0) and  (@AccessAtObjType <> 1) )
    begin
        Set @Return = -5 
        goto Done
    end

    Set @Return = 0 

    If @ConsiderNull_Description Is Null
        Set @ConsiderNull_Description = 0

    If @ConsiderNull_ApplicationData Is Null
        Set @ConsiderNull_ApplicationData = 0

    if @Name Is NOT NULL 
    Begin
        Exec AzMan_SP_Check_Dup_Scope @Return output, @AppId, @ID, @NameHash
    End
    
    if @Return = 0 
    Begin               
        set @iScopeNameLen = DATALENGTH(@Name)
        
            Update [dbo].[AzMan_AzScope]
            Set
                 [Name] = IsNull(@Name, [Name]) 
                ,[NameHash] = IsNull(@NameHash, [NameHash]) 
                ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End
                ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End
            Where
                 ([ID] = @ID) 
                 
            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            If @RowCount <> 1
            Begin
                Set @Return = @Error
            End

    End              
    
    IF @SaclIsOn = 1
        BEGIN
            -- get info for auditing
            SELECT @ObjectGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope
                WHERE scope.ID = @ID

            -- TODO Should we truncate the name for scopes?        
            -- generate an audit
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    4,  -- 0 for scope
                    @Name,
                    @ObjectGuid,
                    N'The shallow properties of the scope may have been modified'
        END
Done:        
    Set NoCount Off

    Return(@Return)

GO

Create Procedure [AzMan_SPU_AzOperation]

-- Update an existing record in [AzMan_AzOperation] table

(
  @Return [int] output
, @ID [int]     
, @AppId [int]                          
, @ConsiderNull_Description bit = 0
, @ConsiderNull_ApplicationData bit = 0
, @OperationID [int] = Null                 
, @ConsiderNull_OperationID bit = 0
, @Name [nvarchar](64) = Null               
, @Description [nvarchar](1024) = Null      
, @ApplicationData [ntext] = Null           
)

As
    Set NoCount On

    DECLARE @RowCount INT, @Error INT
    DECLARE @ObjectGuid uniqueidentifier
    Declare @AccessAtObjType [tinyint]
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    Set @Return = 0 
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End 

    
    If @ConsiderNull_Description Is Null
        Set @ConsiderNull_Description = 0

    If @ConsiderNull_ApplicationData Is Null
        Set @ConsiderNull_ApplicationData = 0

    If @ConsiderNull_OperationID Is Null
        Set @ConsiderNull_OperationID = 0
    
    If @Name Is Not NULL
    Begin   
        Exec AzMan_SP_Check_Dup_Operation @Return output, @AppId, @ID, @Name
    End
    
    if @Return = 0  
    Begin   
        Update [dbo].[AzMan_AzOperation]
            Set
                [Name] = IsNull(@Name, [Name]) 
                ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End
                ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End
                ,[OperationID] = Case @ConsiderNull_OperationID When 0 Then IsNull(@OperationID, [OperationID]) When 1 Then @OperationID End

            Where
                       ([ID] = @ID)
                     
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        If @RowCount <> 1
        Begin
            Set @Return = @Error
        End
                 
    End
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @ObjectGuid = op.ObjectGuid FROM [dbo].[AzMan_AzOperation] op
                WHERE op.ID = @ID
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    2,  -- 2 for operation
                    @Name,
                    @ObjectGuid,
                    N'The shallow properties of the operation may have been modified'
        END
Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPU_AzApplicationGroup]

-- Update an existing record in [AzMan_AzApplicationGroup] table

(
  @Return [int] output
, @ID [int] 
, @ParentType [tinyint]
, @ParentID   [int]
, @GroupType [tinyint] = Null 
, @ConsiderNull_GroupType bit = 0
, @ConsiderNull_GroupDescription bit = 0
, @Name [nvarchar](64) = Null 
, @Description [nvarchar](1024) = Null 
)

As

DECLARE @RowCount INT, @Error INT
DECLARE @ObjectGuid uniqueidentifier
Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0
Set @Return = 0

Set NoCount On

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End
    
If @ConsiderNull_GroupType Is Null
    Set @ConsiderNull_GroupType = 0
    
    if @Name IS NOT NULL    
    Begin
        Exec AzMan_SP_Check_Dup_Group @Return output, @ParentID, @ParentType, @ID, @Name
    End     
    
    if @Return = 0
    Begin

        Update [dbo].[AzMan_AzApplicationGroup]

        Set
            [Name] = IsNull(@Name, [Name]) 
            ,[GroupType] = 
                Case @ConsiderNull_GroupType 
                    When 0 Then IsNull(@GroupType, [GroupType]) 
                    When 1 Then @GroupType 
                End
            ,[Description] = 
                Case @ConsiderNull_GroupDescription 
                    When 0 Then IsNull(@Description, [Description]) 
                    When 1 Then @Description 
                End
        Where
                 ([ID] = @ID)
                 
            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            If @RowCount <> 1
            Begin
                Set @Return = @Error
            End
    End
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @ObjectGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup
                WHERE appGroup.ID = @ID
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    5,  -- 5 for application group
                    @Name,
                    @ObjectGuid,
                    N'The shallow properties of the application group may have been modified'
        END
Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPU_AzTask]

-- Update an existing record in  table

(
  @Return [int] output
, @ID [int] 
, @ParentID   [int]
, @ParentType [tinyint]
, @ConsiderNull_Description bit = 0
, @IsRoleDefinition [bit] = Null 
, @ConsiderNull_IsRoleDefinition bit = NULL
, @ConsiderNull_ApplicationData bit = NULL
, @Name [nvarchar](64) = Null 
, @Description [nvarchar](1024) = Null 
, @ApplicationData [ntext] = Null           
)

As
    DECLARE @ObjectGuid uniqueidentifier
    Set NoCount On
    
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

    Set @Return = 0

    If @ConsiderNull_Description Is Null
        Set @ConsiderNull_Description = 0

    if @ConsiderNull_IsRoleDefinition is NULL
        Set @ConsiderNull_IsRoleDefinition = 0
        
    If @ConsiderNull_ApplicationData Is Null
        Set @ConsiderNull_ApplicationData = 0

    if @Name Is Not NULL
    Begin
        Exec AzMan_SP_Check_Dup_Task @Return output, @ParentID, @ParentType, @ID, @Name
    End     
    
    if @Return = 0      
    Begin 
        Update [dbo].[AzMan_AzTask]

        Set
             [Name] = IsNull(@Name, [Name]) 
            ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End
            ,[IsRoleDefinition] = Case @ConsiderNull_IsRoleDefinition When 0 Then IsNull(@IsRoleDefinition, [IsRoleDefinition]) When 1 Then @IsRoleDefinition End
            ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End

        Where
                 ([ID] = @ID)
                 
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        If @RowCount <> 1
        Begin
            Set @Return = @Error
        End
                 
    End
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @ObjectGuid = task.ObjectGuid FROM [dbo].[AzMan_AzTask] task
                WHERE task.ID = @ID
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    3,  -- 3 for task
                    @Name,
                    @ObjectGuid,
                    N'The shallow properties of the task may have been modified'
        END
Done:
    Set NoCount Off

    Return(@Return)
    
GO

Create Procedure [AzMan_SPU_AzRoleAssignment]

-- Update an existing record in the table

(
  @Return [int] output
, @ID [int] 
, @ParentID   [int]
, @ParentType [tinyint]
, @ConsiderNull_Description bit = 0
, @ConsiderNull_ApplicationData bit = NULL
, @Name [nvarchar](64) = Null 
, @Description [nvarchar](1024) = Null 
, @ApplicationData [ntext] = Null
)

As

Set NoCount On

DECLARE @RowCount INT, @Error INT
DECLARE @ObjectGuid uniqueidentifier
Declare @AccessAtObjType [tinyint]
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

    Set @Return = 0

    If @ConsiderNull_Description Is Null
        Set @ConsiderNull_Description = 0
        
    If @ConsiderNull_ApplicationData Is Null
        Set @ConsiderNull_ApplicationData = 0
        

    IF @Name Is Not NULL
    Begin
            Exec AzMan_SP_Check_Dup_RoleAssignment @Return output, @ParentID, @ParentType, @ID, @Name
    End

    if @Return = 0
    Begin
        Update [dbo].[AzMan_AzRoleAssignment]

        Set
             [Name] = IsNull(@Name, [Name]) 
            ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End
            ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End            
        Where
                 ([ID] = @ID)
                 
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        If @RowCount <> 1
        Begin
            Set @Return = @Error
        End
                 
    End              
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @ObjectGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role
                WHERE role.ID = @ID
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    6,  -- 6 for role
                    @Name,
                    @ObjectGuid,
                    N'The shallow properties of the role assignment may have been modified'
        END
Done:
Set NoCount Off

Return(@Return)

GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SPIU_AzApplicationGroup_LDAPQuery' and type = 'P')
    DROP PROCEDURE AzMan_SPIU_AzApplicationGroup_LDAPQuery
GO

Create Procedure [AzMan_SPIU_AzApplicationGroup_LDAPQuery]

-- Inserts or updates a record in [AzMan_LDAPQuery] table
(
  @Return [int] output
, @GroupId [int] = Null     -- ID Of Application Group
, @ConsiderNull_LdapQuery bit = 0
, @LdapQuery [ntext] = Null -- LDAP Query
)

As

Set NoCount On

DECLARE @RowCount INT, @Error INT
DECLARE @Name nvarchar(512)
DECLARE @ID [int] 
DECLARE @ObjectGuid uniqueidentifier
Declare @ExistingLdapQueryID [int]
Declare @AccessAtObjType [tinyint]
Set @ExistingLdapQueryID = Null
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0
    
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

Set @Return = 0

Select @ExistingLdapQueryID = [LdapQueryID] From [dbo].[AzMan_AzApplicationGroup] Where [ID] = @GroupId  
SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

if @Error=0 
Begin 
  if @RowCount = 0
  Begin
  -- Parent Group was not found
  Set @Return = 1
  Return(1)
  End
End
else
Begin
  Return @Error
End

If @ExistingLdapQueryID Is Null
    Begin
        Begin
    
            Insert Into [dbo].[AzMan_LDAPQuery]
            (
                  [GroupID]
                , [LdapQuery]
            )
    
            Values
            (
                  @GroupId
                , @LdapQuery
            )
            
            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            If @RowCount = 1
            Begin

                Set @ID = Cast(SCOPE_IDENTITY() As [int])
                
                -- Update the AzApplication Groups with the new ID
                if @ID <> 0
                Begin
                    Update [dbo].[AzMan_AzApplicationGroup] 
                        Set [LdapQueryID] = @ID
                    where [ID] = @GroupId                   
                End             
            End
            Else
            Begin
                Set @Return = @Error
            End
        End
    End
Else
    Begin

        If @ConsiderNull_LdapQuery Is Null
            Set @ConsiderNull_LdapQuery = 0

        Update [dbo].[AzMan_LDAPQuery]
        Set
          [GroupID] = @GroupId
        ,[LdapQuery] = Case @ConsiderNull_LdapQuery When 0 Then IsNull(@LdapQuery, [LdapQuery]) When 1 Then @LdapQuery End
        Where
            [ID] = @ExistingLdapQueryID

        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        
        if @RowCount <> 1 
            Set @ID = @ExistingLdapQueryID
        else
        Begin
            Set @Return = @Error
        End
    End
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @Name=appGroup.Name, @ObjectGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup
                WHERE appGroup.ID = @GroupId
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    5,  -- 5 for group
                    @Name,
                    @ObjectGuid,
                    N'The LDAP query of the application may have been modified'
        END
Done:
Set NoCount Off

Return(@Return)

GO


Create Procedure [AzMan_SPIU_Bizrule]
(
  @Return [int] output,
  @ParentId [int] 
, @ParentType [tinyint] 
, @BizRuleImportedPath [nvarchar](512) = Null   -- for [AzMan_BizRule].[BizRuleImportedPath] column
, @ConsiderNull_BizRuleImportedPath bit = 0
, @BizRule [ntext] = Null                       -- for [AzMan_BizRule].[BizRule] column
, @ConsiderNull_BizRule bit = 0
, @BizRuleLanguage [nvarchar](64) = Null        -- for [AzMan_BizRule].[BizRuleLanguage] column
, @ConsiderNull_BizRuleLanguage bit = 0
)

As
DECLARE @RowCount INT, @Error INT
DECLARE @parentName nvarchar(512)
DECLARE @parentGuid uniqueidentifier
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set @Return = 0

Set NoCount On

Declare @ExistingBizruleID [int]
Declare @AccessAtObjType [tinyint]
Set @ExistingBizruleID = Null

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End


Set @Return = 0

if @ParentType = 3 -- task
Begin
    Select @ExistingBizruleID = [BizRuleID] 
    From [dbo].[AzMan_BizRule_To_Task]
    Where [TaskID] = @ParentId  
End

else if @ParentType = 5 -- group
Begin
    Select @ExistingBizruleID = [BizRuleID] 
    From [dbo].[AzMan_BizRule_To_Group]
    Where [GroupID] = @ParentId  
End
    
SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

If @ExistingBizruleID Is Null or @ExistingBizruleID = 0 
    Begin
        Begin
    
            Insert Into [dbo].[AzMan_BizRule]
            (
                  [ParentId]
                , [ParentType]
                , [BizRuleImportedPath] 
                , [BizRule] 
                , [BizRuleLanguage]
            )
    
            Values
            (
                  @ParentId
                 ,@ParentType
                 ,@BizRuleImportedPath 
                 ,@BizRule 
                 ,@BizRuleLanguage
            )

            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            If @RowCount = 1
            Begin
                Set @ExistingBizruleID = Cast(SCOPE_IDENTITY() As [int])
                
                -- Update the AzApplication Groups or Task with the new ID
            
                if @ExistingBizruleID <> 0
                
                    if @ParentType = 3 -- task
                    Begin
                        insert [dbo].[AzMan_BizRule_To_Task] 
                        (
                            [TaskID] ,
                            [BizRuleID]
                        )
                        Values
                        (
                            @ParentId ,
                            @ExistingBizruleID
                        )
                    End

                    else if @ParentType = 5 -- group
                    Begin
                        insert [dbo].[AzMan_BizRule_To_Group] 
                        (
                            [GroupID] ,
                            [BizRuleID]
                        )
                        Values
                        (
                            @ParentId ,
                            @ExistingBizruleID
                        )
                    End
            End         
            Else
            Begin
                Set @Return = @Error
            End
                    
        End
    End
Else
    Begin

        If @ConsiderNull_BizRuleImportedPath Is Null
            set @ConsiderNull_BizRuleImportedPath = 0 
            
        If @ConsiderNull_BizRule Is Null
            set @ConsiderNull_BizRule = 0
            
        If @ConsiderNull_BizRuleLanguage Is Null
            set @ConsiderNull_BizRuleLanguage = 0 

        Update [dbo].[AzMan_BizRule]
        Set
          [ParentId]   = @ParentId
        , [ParentType] = @ParentType
        , [BizRuleImportedPath] = Case @ConsiderNull_BizRuleImportedPath When 0 Then IsNull(@BizRuleImportedPath, [BizRuleImportedPath]) When 1 Then @BizRuleImportedPath End
        , [BizRule] = Case @ConsiderNull_BizRule When 0 Then IsNull(@BizRule, [BizRule]) When 1 Then @BizRule End
        , [BizRuleLanguage] = Case @ConsiderNull_BizRuleLanguage When 0 Then IsNull(@BizRuleLanguage, [BizRuleLanguage]) When 1 Then @BizRuleLanguage End

        Where
            [ID] = @ExistingBizruleID
            
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
                            
        if @RowCount = 0 
        Begin
            if @Error = 0
            Begin
                Set @Return = -1168 -- Error updating the Record
            End
            Else
            Begin
                Set @Return = @Error 
            End
            
        End
    End
    
    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            -- get info for auditing
            IF @ParentType = 3 -- task
                BEGIN
                    SELECT @parentName=task.Name, @parentGuid = task.ObjectGuid 
                        FROM [dbo].[AzMan_AzTask] task WHERE task.ID = @ParentId
                END
            ELSE IF @ParentType = 5 -- app group
                BEGIN
                    SELECT @parentName=appGroup.Name, @parentGuid = appGroup.ObjectGuid 
                        FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @ParentId
                END
            
            EXEC [AzMan_SP_GenerateGenericAudit]
                    @Return,
                    @ParentType,
                    @parentName,
                    @parentGuid,
                    N'The bizrule of the object may have been modified'
        END
Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure dbo.[AzMan_SPIU_AzApplicationGroup_Bizrule]
(
  @Return [int] output
, @GroupId [int] 
, @ConsiderNull_BizRuleImportedPath bit = 0
, @ConsiderNull_BizRule bit = 0
, @ConsiderNull_BizRuleLanguage bit = 0
, @BizRuleLanguage [nvarchar](64) = Null        -- for [AzMan_BizRule].[BizRuleLanguage] column
, @BizRuleImportedPath [nvarchar](512) = Null   -- for [AzMan_BizRule].[BizRuleImportedPath] column
, @BizRule [ntext] = Null                       -- for [AzMan_BizRule].[BizRule] column

)
As

    Set @Return = 0
    exec AzMan_SPIU_Bizrule   @Return output, @GroupId, 5
            , @BizRuleImportedPath 
            , @ConsiderNull_BizRuleImportedPath 
            , @BizRule 
            , @ConsiderNull_BizRule 
            , @BizRuleLanguage 
            , @ConsiderNull_BizRuleLanguage 

Return @Return

Go

Create Procedure dbo.[AzMan_SPIU_AzTask_Bizrule]
(
  @Return [int] output
, @TaskId [int] 
, @ConsiderNull_BizRuleImportedPath bit = 0
, @ConsiderNull_BizRule bit = 0
, @ConsiderNull_BizRuleLanguage bit = 0
, @BizRuleLanguage [nvarchar](64) = Null        -- for [AzMan_BizRule].[BizRuleLanguage] column
, @BizRuleImportedPath [nvarchar](512) = Null   -- for [AzMan_BizRule].[BizRuleImportedPath] column
, @BizRule [ntext] = Null                       -- for [AzMan_BizRule].[BizRule] column

)
As

Set @Return = 0
    exec AzMan_SPIU_Bizrule   @Return output, @TaskId,  3
            , @BizRuleImportedPath 
            , @ConsiderNull_BizRuleImportedPath 
            , @BizRule 
            , @ConsiderNull_BizRule 
            , @BizRuleLanguage 
            , @ConsiderNull_BizRuleLanguage 

Return @Return

Go


Create Procedure [AzMan_SPI_AzApplicationGroup_Single_SidMember]

(
  @Return [int] output,
  @GroupId [int]            -- ID Of Application Group
, @IsMember [bit]           = 0 
, @SidMember varbinary(85)
, @SaclIsOn [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @parentName nvarchar(512)
DECLARE @parentGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    INSERT INTO [AzMan_Group_SIDMember] 
        (MemberSID, Member, GroupID) 
    VALUES 
        (@SidMember, @IsMember, @GroupId)
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1 --Generic Error
        End 
    End
    
    -- get the info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @parentName = appGroup.Name, @parentGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup
                WHERE appGroup.ID = @GroupId

            -- generate an audit
            IF @IsMember = 1
                EXEC [AzMan_SP_GenerateMemberAudit]
                        @Return,
                        4,  -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN
                        5,  -- 5 for group
                        @parentName,
                        @parentGuid,
                        N'',
                        @SidMember,
                        1,  -- 1 for member
                        N'' -- no other info
            ELSE
                EXEC [AzMan_SP_GenerateMemberAudit]
                        @Return,
                        4,  -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN
                        5,  -- 5 for group
                        @parentName,
                        @parentGuid,
                        N'',
                        @SidMember,
                        0,  -- 0 for non-member
                        N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzApplicationGroup_Single_SidMember]

(
  @Return [int] output,
  @GroupId [int]            -- ID Of Application Group
, @IsMember [bit] = 1 
, @SidMember varbinary(85)
, @SaclIsOn [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @parentName nvarchar(512)
DECLARE @parentGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    Delete From [AzMan_Group_SIDMember] 
    where MemberSID    = @SidMember and
          Member   = @IsMember and
          GroupID = @GroupId

    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --REcord not found
        End 
    End
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @parentName = appGroup.Name, @parentGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup
                WHERE appGroup.ID = @GroupId

            -- generate an audit
            IF @IsMember = 1
                EXEC [AzMan_SP_GenerateMemberAudit]
                        @Return,
                        5,  -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE
                        5,  -- 5 for group
                        @parentName,
                        @parentGuid,
                        N'',
                        @SidMember,
                        1,  -- 1 for member
                        N'' -- no other info
            ELSE
                EXEC [AzMan_SP_GenerateMemberAudit]
                        @Return,
                        5,  -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE
                        5,  -- 5 for group
                        @parentName,
                        @parentGuid,
                        N'',
                        @SidMember,
                        0,  -- 0 for non-member
                        N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal]
(
  @Return [int] output
, @GroupId [int]            -- ID Of Application Group
, @IsMember [bit] = 1
, @SidMembers varbinary (4000)
)
As
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set NoCount On

-- SidMembers are aggregated binary data in the following format:
--   The first 4 bytes is a delete/add flag (0/1); the following 4 bytes is the size of the SID, 
--   followed by the actual SID. The over-usage of these pieces of data is for ease of parsing
--   Using string to represent such encoding, the following example which encodes 3 SIDs 
--   of length 24, 36, and 48 in turn, and the second one is a delete
--   00010024NNNNNNNNN00000036NNNNNNNNNN00010048NNNNNNNNNNNNNN
-- Insert each one of them 

    Declare @AccessAtObjType [tinyint]
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

DECLARE @DataLength int
DECLARE @SidLength int
DECLARE @SidMember varbinary(85)
DECLARE @Pos int
DECLARE @isAdd int
SET @DataLength = DATALENGTH(@SidMembers)

Set @Return = 0
Set @Pos = 1

WHILE @DataLength - @Pos > 8
    BEGIN
        SET @isAdd = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int)
        SET @Pos = @Pos + 1
        
        SET @SidLength = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int)
        SET @Pos = @Pos + 1

        -- make sure that we the SidLength is not lying to us!
        IF @SidLength >= 12 AND @SidLength < 85 AND @DataLength - @Pos >= @SidLength - 1
            BEGIN
                SET @SidMember = CAST(SUBSTRING(@SidMembers, @Pos, @SidLength) AS varbinary)
                SET @Pos = @Pos + @SidLength        

                -- if NNNN=0, then it means to delete
                IF @isAdd <> 0
                    BEGIN
                        Exec AzMan_SPI_AzApplicationGroup_Single_SidMember @Return output, @GroupId, @IsMember, @SidMember, @SaclIsOn
                        IF @Return <> 0
                            Break
                    End 
                ELSE
                    BEGIN
                        Exec AzMan_SPD_AzApplicationGroup_Single_SidMember @Return output, @GroupId, @IsMember ,@SidMember, @SaclIsOn
                        IF @Return <> 0
                            Break
                    End
            END
        ELSE
            SET @Pos = @DataLength
    END

Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_SidMembers]

(
  @Return [int] output
, @GroupId [int]            -- ID Of Application Group
, @SidMembers varbinary (4000)
)
As
    Exec AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal @Return output, @GroupId, 1 , @SidMembers
    Return(@Return)
go


Create Procedure AzMan_SPI_AzApplicationGroup_Multi_SidNonMembers

(
  @Return [int] output ,    
  @GroupId [int]            -- ID Of Application Group
, @SidMembers varbinary (4000)
)
As
    Exec AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal @Return output, @GroupId, 0 , @SidMembers
    Return(@Return)
go


Create Procedure [AzMan_SPI_AzApplicationGroup_Single_AppMember]
(
  @Return [int] output,
  @GroupId [int]            -- ID Of Application Group
, @ChildID [int] 
, @IsMember [bit]           = 1 
, @SaclIsOn [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @groupName nvarchar(512)
DECLARE @groupGuid uniqueidentifier
DECLARE @refGroupName nvarchar(512)
DECLARE @refGroupGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    INSERT INTO [AzMan_Group_AppMember] 
        (ChildID, Member, GroupID) 
    VALUES 
        (@ChildID, @IsMember, @GroupId)
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1 --Generic Error
        End 
    End
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @groupName = appGroup.Name, @groupGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup
                WHERE appGroup.ID = @GroupId
            SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup
                WHERE refGroup.ID = @ChildID
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    2,  -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN
                    5,  -- 5 for application group
                    @groupName,
                    @groupGuid,
                    5,  -- 5 for application group
                    @refGroupName,
                    @refGroupGuid,
                    N'' -- no other info
        END
Set NoCount Off

Return @Return

GO

Create Procedure [AzMan_SPD_AzApplicationGroup_Single_AppMember]

(
  @Return [int] output,
  @GroupId [int]            -- ID Of Application Group
, @ChildID [int] 
, @IsMember [bit] = 1 
, @SaclIsOn [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @groupName nvarchar(512)
DECLARE @groupGuid uniqueidentifier
DECLARE @refGroupName nvarchar(512)
DECLARE @refGroupGuid uniqueidentifier
Set @Return = 0

Set NoCount On

    Delete From [AzMan_Group_AppMember] 
    where ChildID    = @ChildID and
          Member   = @IsMember and
          GroupID = @GroupId
          
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End 
    End
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @groupName = appGroup.Name, @groupGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup
                WHERE appGroup.ID = @GroupId
            SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup
                WHERE refGroup.ID = @ChildID
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    3,  -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE
                    5,  -- 5 for application group
                    @groupName,
                    @groupGuid,
                    5,  -- 5 for application group
                    @refGroupName,
                    @refGroupGuid,
                    N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal]

(
  @Return [int] output,
  @GroupId [int]            -- ID Of Application Group
, @SepChar [char] (1) = "|"
, @IsMember [bit] = 1 
, @AppMemberIDs [nvarchar] (4000)
)
As
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set NoCount On

-- First parse the SidMembers string
-- Insert each one of them 

    Declare @AccessAtObjType [tinyint]
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End


DECLARE @AppMember varchar(100), @Pos int
DECLARE @iAppMemberID int
DECLARE @equal char
DECLARE @addOrDelete nvarchar(10)
DECLARE @isAdd int
SET @equal = '='


    Set @Return = 0

    SET @AppMemberIDs = LTRIM(RTRIM(@AppMemberIDs))+ @SepChar
    
    SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1)

    IF REPLACE(@AppMemberIDs, @SepChar, '') <> ''
    BEGIN
        WHILE @Pos > 0
        BEGIN
            SET @AppMember = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1)))
            Set @iAppMemberID = CAST(@AppMember as int)
            
            -- remove the left part (the id)
            SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos)
            
            -- now move to the pipe separator
            SET @Pos = CHARINDEX(@SepChar, @AppMemberIDs, 1)
            SET @addOrDelete = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1)))
            
            Set @isAdd = CAST(@addOrDelete as int)
            
            
            IF @iAppMemberID > 0
            BEGIN
                
                -- if NNNN=0, then it means to delete
                IF @isAdd <> 0
                BEGIN
                    Exec AzMan_SPI_AzApplicationGroup_Single_AppMember @Return output, @GroupId, @iAppMemberID , @IsMember, @SaclIsOn

                    if @Return <> 0
                    Begin
                        Break
                    End
                End                 
                else
                BEGIN
                    Exec AzMan_SPD_AzApplicationGroup_Single_AppMember @Return output, @GroupId, @iAppMemberID , @IsMember, @SaclIsOn
                    if @Return <> 0
                    Begin
                        Break
                    End
                End                 
                
            END
            SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos)
            SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1)
        END
    END 

Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppMembers]

(
  @Return [int] output
, @GroupId [int]            -- ID Of Application Group
, @SepChar [char] (1) = "|"
, @AppMemberIDs [nvarchar] (4000)
)
As

    Exec AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal @Return output, @GroupId, @SepChar, 1 , @AppMemberIDs

    Return(@Return)
go

Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppNonMembers]
(
  @Return [int] output
, @GroupId [int]            -- ID Of Application Group
, @SepChar [char] (1) = "|"
, @AppMemberIDs [nvarchar] (4000)
)
As

    Exec AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal @Return output, @GroupId, @SepChar, 0 , @AppMemberIDs

    Return(@Return)
go


Create Procedure [AzMan_SPI_AzRoleAssignment_Single_SidMember]
(
  @Return [int] output,
  @RoleId [int]             -- ID Of Role
, @SidMember varbinary (85)
, @SaclIsOn [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @roleName nvarchar(512)
DECLARE @roleGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    INSERT INTO [AzMan_Role_SIDMember] 
        (MemberSID,  RoleID) 
    VALUES 
        (@SidMember,@RoleId)
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount = 0
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1 -- General Error
        End
    End
    
    -- get the info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role
                WHERE Role.ID = @RoleId

            -- generate an audit
            EXEC [AzMan_SP_GenerateMemberAudit]
                    @Return,
                    4,  -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN
                    6,  -- 6 for role
                    @roleName,
                    @roleGuid,
                    N'',
                    @SidMember,
                    1,  -- 1 for member
                    N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzRoleAssignment_Single_SidMember]
(
  @Return [int] output,
  @RoleId [int]             -- ID Of RoleAssignment
, @SidMember varbinary(85)
, @SaclIsOn [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @roleName nvarchar(512)
DECLARE @roleGuid uniqueidentifier
DECLARE @userName nvarchar(512)

    Set NoCount On
    Set @Return = 0

    Delete From [AzMan_Role_SIDMember] 
    where MemberSID    = @SidMember and
          RoleID = @RoleId
          
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End
    End
    
    -- get the info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role
                WHERE Role.ID = @RoleId
                
            -- We can't lookup names from SID, but XP can do that
            SET @userName = ''

            -- generate an audit
            EXEC [AzMan_SP_GenerateMemberAudit]
                    @Return,
                    5,  -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE
                    6,  -- 6 for role
                    @roleName,
                    @roleGuid,
                    N'',
                    @SidMember,
                    1,  -- 1 for member
                    N'' -- no other info
        END
          
Set NoCount Off

Return(@Return)

GO


Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_SidMembers]
(
  @Return [int] output
, @RoleId [int]             -- ID Of Role Assignment
, @SidMembers varbinary (4000)
)
As
DECLARE @SaclIsOn [bit]
Set @SaclIsOn = 0

Set NoCount On

-- First parse the SidMembers string
-- Insert each one of them 
           
    Declare @AccessAtObjType [tinyint]           
	Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output
	
	-- Require Admin Access
	if @Return <> 1 
	Begin
		if (@Return >= 2)
		Begin
		    Set @Return = -5 
		End
		goto Done
	End
DECLARE @DataLength int
DECLARE @SidLength int
DECLARE @Sid varbinary(85)
DECLARE @Pos int
DECLARE @isAdd int
SET @DataLength = DATALENGTH(@SidMembers)
            
Set @Return = 0
Set @Pos = 1

WHILE @DataLength - @Pos > 8
    BEGIN
        SET @isAdd = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int)
        SET @Pos = @Pos + 1
		
        SET @SidLength = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int)
        SET @Pos = @Pos + 1
        
        -- make sure that we the SidLength is not lying to us!
        IF @SidLength >= 12 AND @SidLength < 85 AND @DataLength - @Pos >= @SidLength - 1
            BEGIN
                SET @Sid = CAST(SUBSTRING(@SidMembers, @Pos, @SidLength) as varbinary)
                SET @Pos = @Pos + @SidLength		

			    -- if NNNN=0, then it means to delete
                IF @isAdd <> 0
                    BEGIN
                        Exec AzMan_SPI_AzRoleAssignment_Single_SidMember @Return output, @RoleId, @Sid, @SaclIsOn
					    IF @Return <> 0
                            Break
                    End	
				ELSE
				    BEGIN
                        Exec AzMan_SPD_AzRoleAssignment_Single_SidMember @Return output, @RoleId, @Sid, @SaclIsOn
                        IF @Return <> 0
                            Break
                    End
            END
        ELSE
            BEGIN
                SET @Pos = @DataLength
            END
    END

Done:
Set NoCount Off

Return(@Return)

GO


Create Procedure [AzMan_SPI_AzRoleAssignment_Single_AppMember]
(
  @Return [int] output,
  @RoleId [int]             -- ID Of Role Assignment
, @ChildID [int]
, @SaclIsOn [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @roleName nvarchar(512)
DECLARE @roleGuid uniqueidentifier
DECLARE @refGroupName nvarchar(512)
DECLARE @refGroupGuid uniqueidentifier

Set @Return = 0

Set NoCount On

    INSERT INTO [AzMan_Role_AppMember] 
        (ChildID, RoleID) 
    VALUES 
        (@ChildID, @RoleId)
        
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1 
        End 
    End
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role
                WHERE role.ID = @RoleId
            SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup
                WHERE refGroup.ID = @ChildID
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    2,  -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN
                    6,  -- 6 for role
                    @roleName,
                    @roleGuid,
                    5,  -- 5 for application group
                    @refGroupName,
                    @refGroupGuid,
                    N'' -- no other info
        END 
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzRoleAssignment_Single_AppMember]
(
  @Return [int] output,
  @RoleId [int]             -- ID Of Role Assignment
, @ChildID [int]
, @SaclIsOn [bit]
)
As

DECLARE @RowCount INT, @Error INT
DECLARE @roleName nvarchar(512)
DECLARE @roleGuid uniqueidentifier
DECLARE @refGroupName nvarchar(512)
DECLARE @refGroupGuid uniqueidentifier
Set @Return = 0

Set NoCount On

    Delete From [AzMan_Role_AppMember] 
    where ChildID    = @ChildID and
          RoleID = @RoleId
          
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End 
    End
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role
                WHERE role.ID = @RoleId
            SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup
                WHERE refGroup.ID = @ChildID
                
            -- generate an audit
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    3,  -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE
                    6,  -- 6 for role
                    @roleName,
                    @roleGuid,
                    5,  -- 5 for application group
                    @refGroupName,
                    @refGroupGuid,
                    N'' -- no other info
        END
        
Set NoCount Off

Return(@Return)

GO


Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_AppMembers]
(
  @Return [int] output
, @RoleId [int]             -- ID Of Role Assignment
, @SepChar [char] (1) = "|"
, @AppMemberIDs [nvarchar] (4000)
)
As

    Declare @AccessAtObjType [tinyint]
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0

    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output
    
    -- Require Admin Access
    if @Return <> 1 
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End


Set @Return = 0
DECLARE @equal char
DECLARE @addOrDelete nvarchar(10)
DECLARE @isAdd int
SET @equal = '='

Set NoCount On

-- First parse the SidMembers string
-- Insert each one of them 

DECLARE @AppMember varchar(100), @Pos int
DECLARE @iAppMemberID int


    SET @AppMemberIDs = LTRIM(RTRIM(@AppMemberIDs))+ @SepChar
    
    SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1)

    IF REPLACE(@AppMemberIDs, @SepChar, '') <> ''
    BEGIN
        WHILE @Pos > 0
        BEGIN
            SET @AppMember = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1)))
            Set @iAppMemberID = CAST(@AppMember as int)
            
            -- remove the left part (the id)
            SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos)
            
            -- now move to the pipe separator
            SET @Pos = CHARINDEX(@SepChar, @AppMemberIDs, 1)
            SET @addOrDelete = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1)))
            
            Set @isAdd = CAST(@addOrDelete as int)
            
            IF @iAppMemberID > 0
            BEGIN
                IF @isAdd <> 0
                BEGIN
                    Exec AzMan_SPI_AzRoleAssignment_Single_AppMember @Return output, @RoleId, @iAppMemberID, @SaclIsOn
                    if @Return <> 0
                    Begin
                        Break
                    End
                End
                ELSE
                BEGIN
                    Exec AzMan_SPD_AzRoleAssignment_Single_AppMember @Return output, @RoleId, @iAppMemberID, @SaclIsOn 
                    if @Return <> 0
                    Begin
                        Break
                    End
                End
            END
            SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos)
            SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1)
        END
    END 

Done:
Set NoCount Off

Return(@Return)

GO


Create Procedure [spDrop_AzMan_Table]
as
    drop table [AzMan_Role_To_Operation_Link]
    drop table [AzMan_Role_To_Task_Link]
    drop table [AzMan_Task_To_Task_Link]
    drop table [AzMan_Task_To_Operation_Link]
    drop table [AzMan_AzTask]
    drop table [AzMan_AzOperation]
    drop table [AzMan_LDAPQuery]
    drop table [AzMan_BizRule]
    drop table [AzMan_Group_SIDMember]
    drop table [AzMan_Group_AppMember]
    drop table [AzMan_AzApplicationGroup]
    drop table [AzMan_Role_SIDMember]
    drop table [AzMan_Role_AppMember]
    drop table [AzMan_AzRoleAssignment]
    drop table [AzMan_AzScope_Name] 
    drop table [AzMan_AzScope]
    drop table [AzMan_AzApplication]
    drop table [AzMan_AzAuthorizationStore]
Return(0)
GO 

----------------------------Select queries----------------------------------------------


Create Procedure [AzMan_SPS_Get_AzAuthorizationStoreByName]
-- Retrieve specific records from the [AzMan_AzAuthorizationStore] table depending on the input parameters you supply.
(
    @Return [int] output,
    @Name [nvarchar] (512)
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    DEclare @ID INT

    select @ID=ID from [AzMan_AzAuthorizationStore] where Name = @Name

    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

    if @Error <> 0 
    Begin
        Set @Return = @Error
    End 
    else
    Begin 
        If @RowCount = 0
        Begin
            Set @Return = -1168 --Record not found
        End
    End     

    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 0, @SaclIsOn output

    if @Return >= 1 
    Begin
            
        Select
             [ID]
            ,[DomainTimeout]
            ,[ScriptEngineTimeout]
            ,[MaxScriptEngines]
            ,[ApplyStoreSacl]
            ,[GenerateAudits]
            ,[MajorVersion]
            ,[MinorVersion]
            ,[ObjectGuid]            
            ,[TargetMachine]            
            ,[Description]
            ,[ApplicationData]
            --,[ChildUpdateTimeStamp]
        From [AzMan_AzAuthorizationStore]
        where Name = @Name 
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0
            Begin
                Set @Return = -1168 --Record not found
            End
        End     
        
    End     
End

Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzApplications]
(
     @Return [int] output,
     @StoreID int
)
as 
Begin

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@StoreID, 0, 0, @SaclIsOn output
    
    if @Return <= 0
        goto Done
    Else if @Return = 1 or @Return = 2
    Begin
        Select
        [ID], 
        [ObjectGuid] ,
        IsNull([ApplyStoreSacl], 0),
        IsNull([GenerateAudits], 0), 
        IsNull([AuthzInterfaceClsId], 0), 
        IsNull([ApplicationVersion], N''),
        [Name],
        IsNull([Description], N''),                
        [ApplicationData]
        --[ChildUpdateTimeStamp] 
        From [AzMan_AzApplication]
        where StoreID = @StoreID  

        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
        
    End
    Else if @Return = 3 -- Delegated user
    Begin

        -- Get all the child app where the current user has access
        Select
            [ID], 
            [ObjectGuid] ,
            [ApplyStoreSacl],
            [GenerateAudits], 
            [AuthzInterfaceClsId], 
            [ApplicationVersion],
            [Name],            
            [Description],
            [ApplicationData]
            --[ChildUpdateTimeStamp] 
        From [AzMan_AzApplication]
        where StoreID = @StoreID  and
            ID in ( 
                select ObjectID from [dbo].[Azman_SQLRole]
                where [dbo].[Azman_SQLRole].[ObjectType] = 1 and 
                        is_member([dbo].[Azman_SQLRole].[SQLRoleName]) = 1 ) 
    
    
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
    
    End 
        
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Get_AzApplication]
(
     @Return [int] output,
     @ID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 1, 0, @SaclIsOn output

    if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select
            [StoreID],
            [ApplyStoreSacl],
            [GenerateAudits], 
            [AuthzInterfaceClsId], 
            [ObjectGuid],
            [ApplicationVersion],
            [Name],
            [Description],
            [ApplicationData]
        From [AzMan_AzApplication]
        where ID = @ID 
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0
            Begin
                Set @Return = -1168 --Record not found
            End
        End     
    End     
        
End

Return(@Return)

GO


Create Procedure [AzMan_SPS_Enum_AzScope]
(
     @Return [int] output,
     @AppID int
)
as 
Begin

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the App level
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppID, 1, 0, @SaclIsOn output
    
    if @Return <= 0
        goto Done
    Else if @Return = 1 or @Return = 2
    Begin
        Select
            [ID], 
            [NameLen],
            IsNull([HasSpecificUsers], 0) AS HasSpecificUsers,
            [NameHash],
            [ObjectGuid] ,
            [Description],
            [Name],
            [ApplicationData]
        From [AzMan_AzScope]
        where AppID = @AppID  
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
    end
    Else if @Return = 3 -- Delegated user
    Begin
    
        Select
            [ID], 
            [NameLen],
            IsNull([HasSpecificUsers], 0) AS HasSpecificUsers,
            [NameHash],
            [ObjectGuid] ,
            [Description],
            [Name],            
            [ApplicationData]
        From [AzMan_AzScope]
        where AppID = @AppID  and 
            ID in ( 
                select ObjectID from [dbo].[Azman_SQLRole]
                where [dbo].[Azman_SQLRole].[ObjectType] = 4 and 
                        is_member([dbo].[Azman_SQLRole].[SQLRoleName]) = 1 ) 
    
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
    End
    
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzApplicationGroup]
(
     @Return   int output,
     @ParentID int
    ,@ParentType tinyint
)
as 
Begin

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the parent
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output
    
    if @Return <= 0
        goto Done
    -- The user either has admin, reader or delegated uset at the parent
    -- So he can see the groups
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin
    
        if @ParentType = 0
        Begin
            Select
                [ID], 
                [GroupType]  ,
                [ObjectGuid] ,
                [Name]       ,

                ISNULL ( [Description] , N'' ) 
            From [AzMan_AzApplicationGroup] 
            where (StoreID = @ParentID  ) and ParentType = @ParentType

        End
        else if @ParentType = 1
        Begin
            Select
                [ID], 
                [GroupType], 
                [ObjectGuid],
                [Name],
                ISNULL ( [Description] , N'' ) 
            From [AzMan_AzApplicationGroup] 
            where (AppID = @ParentID  ) and ParentType = @ParentType

        End         
        else if @ParentType = 4
        Begin
            Select
                [ID], 
                [GroupType],
                [ObjectGuid],
                [Name],
                ISNULL ( [Description] , N'' ) 
            From [AzMan_AzApplicationGroup] 
            where (ScopeID = @ParentID  ) and ParentType = @ParentType
        End         
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
        
    End     

End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzTask]
(
     @Return   int output,  
     @ParentID int
    ,@ParentType tinyint
)
as 
Begin

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the parent
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output
    
    if @Return <= 0
        goto Done
    -- The user either has admin, reader or delegated uset at the parent
    -- So he can see the Task
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        if @ParentType = 1
        Begin
            Select
                [ID], 
                [IsRoleDefinition],                
                [ObjectGuid] ,
                [Name]       ,
                [Description],
                [ApplicationData]
            From [AzMan_AzTask] 
            where AppID = @ParentID  
        End else if @ParentType = 4
        Begin
            Select
                [ID], 
                [IsRoleDefinition],                
                [ObjectGuid] ,
                [Name]       ,
                [Description],
                [ApplicationData]
            From [AzMan_AzTask] 
            where ScopeID = @ParentID  
        End else 
        Begin
            Set @Return = -1
            goto Done
        End
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
        
    End     
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzTask_Operations]
(
     @Return   int output,
     @TaskID int
)
as 
Begin

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the Task
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 0, @SaclIsOn output
    
    if @Return <= 0
        goto Done
    
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see the task
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin
        Select
            [ObjectGuid]
        From [AzMan_Task_To_Operation_Link] INNER JOIN AzMan_AzOperation ON [AzMan_Task_To_Operation_Link].[OperationID] = AzMan_AzOperation.ID
        where TaskID = @TaskID  
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
        
    End     
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzTask_Tasks]
(
     @Return   int output,
     @TaskID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the Task
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 0, @SaclIsOn output
    
    if @Return <= 0
        goto Done
    
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see the task
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select
            [ObjectGuid]
        From [AzMan_Task_To_Task_Link] INNER JOIN AzMan_AzTask ON [AzMan_Task_To_Task_Link].[ChildID] = AzMan_AzTask.ID
        where [AzMan_Task_To_Task_Link].[TaskID] = @TaskID  
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
        
    End     
End

Done:
Return(@Return)

GO


Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_Tasks]
(
     @Return   int output,
     @RoleID int
)
as 
Begin

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the Role 
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    
    -- The user either has admin, reader or delegated uset at the parent
    -- So he can see the Role
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select
        [ObjectGuid]
        From [AzMan_Role_To_Task_Link] INNER JOIN AzMan_AzTask ON [TaskID] = AzMan_AzTask.ID
        where [RoleID]  = @RoleID  
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
        
    End     

End

Done:
Return (@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_Operations]
(
     @Return   int output,
     @RoleID int
)
as 
Begin

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the Role 
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see the role
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin
        Select
            [ObjectGuid]
        From [AzMan_Role_To_Operation_Link] 
        INNER JOIN AzMan_AzOperation ON [AzMan_Role_To_Operation_Link].OperationID = AzMan_AzOperation.ID
        where [RoleID]  = @RoleID  
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
        
    End     
End

Done:
Return(@Return)


GO

Create Procedure [AzMan_SPS_Enum_AzRoleAssignment]
(
     @Return   int output,
     @ParentID int
    ,@ParentType tinyint
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the parent
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin
        if @ParentType = 1
        Begin
            Select
                [ID], 
                [ObjectGuid] ,
                [Name],
                [Description],
                [ApplicationData]
            From [AzMan_AzRoleAssignment] 
            where AppID = @ParentID  and ParentType = @ParentType
        End
        else if @ParentType = 4
        Begin
            Select
                [ID], 
                [ObjectGuid] ,
                [Name],
                [Description],
                [ApplicationData]
            From [AzMan_AzRoleAssignment] 
            where ScopeID = @ParentID  and ParentType = @ParentType
        End 
        else
        Begin
            Set @Return = -1
            goto Done
        End
                
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
    End     
    
End

Done:
Return(@Return)

GO

Create Procedure AzMan_SPS_Get_AzApplicationGroup
(
     @Return   int output,
     @ID int
)
as 
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 0, @SaclIsOn output
    
    if @Return <= 0
        Begin
            goto Done
        End
    Else if @Return = 1 or @Return = 2 or @Return = 3
        BEGIN
            Begin
                Select
                    [GroupType],
                    [ObjectGuid] ,
                    [Name],
                    IsNull([Description], N'')
                From [AzMan_AzApplicationGroup] 
                where [ID] = @ID

            End 
                
            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            if @Error <> 0 
                Set @Return = @Error
            else
                Set @Return = 0
        END

Done:
    Return(@Return)

GO

Create Procedure [AzMan_SPS_Get_AzApplicationGroup_BizruleInfo]
(
     @Return   int output,
     @ID int
)
as 
Begin

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin
        Select 
            [BizRuleLanguage],
            [BizRuleImportedPath] ,
            [BizRule]
        From 
            [AzMan_BizRule]
        where ParentId = @ID  and  ParentType = 5 and ID in 
         ( Select [BizRuleID] From [AzMan_BizRule_To_Group] where [GroupID] = @ID)
           
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0
            Begin
                Set @Return = -1168 --Record not found
            End
        End     
    End     
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Get_AzTask_BizruleInfo]
(
     @Return   int output,
     @ID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Set @Return = 0

        Select 
            [BizRuleLanguage],         
            [BizRuleImportedPath] ,
            [BizRule]
        From 
            [AzMan_BizRule]
        where ParentId = @ID  and  ParentType = 3 and ID in 
         ( Select [BizRuleID] From [AzMan_BizRule_To_Task] where [TaskID] = @ID)
           
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0

            Begin
                Set @Return = -1168 --Record not found
            End
        End     
    End     
End

Done:
Return(@Return)

GO


Create Procedure [AzMan_SPS_Get_AzApplicationGroup_LDAPQuery]
(
     @Return   int output,
     @GroupID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Set @Return = 0
        Select 
            [LdapQuery]
        From 
            [AzMan_LDAPQuery]
        where GroupID = @GroupID   and ID  in 
            ( Select [LdapQueryID] From [AzMan_AzApplicationGroup] where ID = @GroupID  )
                
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0

            Begin
                Set @Return = -1168 --Record not found
            End
        End     
    End     
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_SIDMembers]
(
     @Return   int output,
     @GroupID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the Group
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin
        
        Select [MemberSID]
        From [AzMan_Group_SIDMember]
        where GroupID = @GroupID  and [Member] = 1
        
            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            if @Error <> 0 
            Begin
                Set @Return = @Error
            End
            else
            Begin
                Set @Return = 0
            End
        
    End     
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_SIDNonMembers]
(
     @Return   int output,
     @GroupID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]

    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the Group
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select [MemberSID]
        From [AzMan_Group_SIDMember]
        where GroupID = @GroupID  and [Member] = 0
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
        
    End     
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_AppMembers]
(
     @Return   int output,
     @GroupID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the Group
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select [ObjectGuid]
        From AzMan_AzApplicationGroup 
        where ID in ( Select ChildID from AzMan_Group_AppMember where GroupID = @GroupID and [Member] = 1 )     
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
    End 
        
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_AppNonMembers]
(
     @Return   int output,
     @GroupID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the Group
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin
        Select [ObjectGuid]
        From AzMan_AzApplicationGroup 
        where ID in ( Select ChildID from AzMan_Group_AppMember where GroupID = @GroupID and [Member] = 0 )     

            SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
            if @Error <> 0 
            Begin
                Set @Return = @Error
            End
            else
            Begin
                Set @Return = 0
            End
    End 
        
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_SIDMembers]
(
     @Return   int output,
     @RoleID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the Role
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select [MemberSID]
        From [AzMan_Role_SIDMember]
        where RoleID = @RoleID

        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
    End 
        
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_AppMembers]
(
     @Return   int output,
     @RoleID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the Role
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select [ObjectGuid]
        From AzMan_AzApplicationGroup where 
        ID IN ( select ChildID from [AzMan_Role_AppMember] where RoleID = @RoleID)
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
    End 
End

Done:
Return(@Return)

go

Create Procedure [AzMan_SPS_Get_AzScope]
(
     @Return   int output,
     @ScopeID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ScopeID, 4, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the App
    -- So he can see this object 
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select
        [AppID],
        [NameLen],
        IsNull([HasSpecificUsers], 0) AS HasSpecificUsers,
        [NameHash],
        [ObjectGuid] ,
        [Description],
        [Name],
        [ApplicationData]
        From [AzMan_AzScope]
        where ID = @ScopeID 
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0
            Begin
                Set @Return = -1168 --Record not found
            End
        End     
    End     
        
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Enum_AzOperation]
(
     @Return   int output,
     @AppID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at the Application
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppID, 1, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the App
    -- So he can see the operations
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select
        [ID], 
        [OperationID],
        [ObjectGuid] ,
        [Name],
        [Description],
        [ApplicationData]
        From [AzMan_AzOperation]
        where AppID = @AppID  

        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
        if @Error <> 0 
        Begin
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = 0
        End
    End     
        
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Get_AzOperation]
(
     @Return   int output,
     @ID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at object 
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see the operation
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select
        [OperationID],        
        [ObjectGuid] ,
        [Name]       ,
        [Description],
        [ApplicationData]
        From [AzMan_AzOperation]
        where ID = @ID
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0
            Begin
                Set @Return = -1168 --Record not found
            End
        End     
    End
End

Done:
Return (@Return)

GO

Create Procedure [AzMan_SPS_Get_AzTask]
(
     @Return   int output,
     @ID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at object 
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see the object
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select
            [IsRoleDefinition],
            [ObjectGuid] ,
            [Name],
            [Description],
            [ApplicationData]
        From [AzMan_AzTask]
        where ID = @ID
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0
            Begin
                Set @Return = -1168 --Record not found
            End
        End     
        
    End     
End

Done:
Return(@Return)

GO

Create Procedure [AzMan_SPS_Get_AzRoleAssignment]
(
     @Return   int output,
     @ID int
)
as 
Begin
    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- we don't care about SACL (0 for the second last parameter)
    -- Check access at object 
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 0, @SaclIsOn output
    
    if @Return <= 0
    Begin
        goto Done
    End
    -- The user either has admin, reader or delegated user at the parent
    -- So he can see the object
    Else if @Return = 1 or @Return = 2 or @Return = 3
    Begin

        Select
        [ObjectGuid] ,
        [Name]       ,
        [Description],
        [ApplicationData]
        From [AzMan_AzRoleAssignment]
        where ID = @ID
        
        SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  

        if @Error <> 0 
        Begin
            Set @Return = @Error
        End 
        else
        Begin 
            If @RowCount = 0
            Begin
                Set @Return = -1168 --Record not found
            End
        End     
    End
    
End

Done:
Return (@Return)


GO


-- Delete Queries

Create Procedure [AzMan_SPD_AzOperation]

-- Delete a specific record from table [AzMan_AzOperation]

(
 @Return   int output,
 @ID [int] 
,@AppId [int] = Null 
)

As

Set NoCount On

    DECLARE @RowCount INT, @Error INT
    DECLARE @parentName nvarchar(512)
    DECLARE @parentGuid uniqueidentifier

    DECLARE @childName nvarchar(512)
    DECLARE @childGuid uniqueidentifier
    Declare @AccessAtObjType [tinyint]
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 1, @SaclIsOn output
    
    if @Return <> 1
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

    Set @Return = 0

    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @parentName = App.Name, @parentGuid = App.ObjectGuid FROM [dbo].[AzMan_AzApplication] App
                    WHERE App.ID = @AppId
            SELECT @childName = Op.Name, @childGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op
                    WHERE Op.ID = @ID
        END
            
    Delete From [dbo].[AzMan_AzOperation]

    Where
        ((@ID Is Null) Or ([ID] = @ID))
    And ((@AppId Is Null) Or ([AppID] = @AppId))

    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End
    End

    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    1,  -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE
                    1,  -- 1 for application
                    @parentName,
                    @parentGuid,
                    2,  -- 2 for Operation
                    @childName,
                    @childGuid,
                    N'' -- no other info
        END
Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzScope]
-- Delete a specific record from table [AzMan_AzScope]

(
 @Return   int output,
 @ID [int]              
,@AppId [int] = Null 
)


As
DECLARE @parentName nvarchar(512)
DECLARE @parentGuid uniqueidentifier

DECLARE @childName nvarchar(512)
DECLARE @childGuid uniqueidentifier
    
Set NoCount On

    DECLARE @RowCount INT, @Error INT
    Declare @AccessAtObjType [tinyint]
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 4, 1, @SaclIsOn output
    
    if @Return <> 1
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

    Set @Return = 0

    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @parentName = App.Name, @parentGuid = App.ObjectGuid FROM [dbo].[AzMan_AzApplication] App
                    WHERE App.ID = @AppId
            SELECT @childName = scope.Name, @childGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope
                    WHERE scope.ID = @ID
        END
            
    Delete From [dbo].[AzMan_AzScope]

    Where
        ((@ID Is Null) Or ([ID] = @ID))
    And ((@AppId Is Null) Or ([AppID] = @AppId))
    
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End 
    End

    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateObjectAudit]
                @Return,
                1,  -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE
                1,  -- 1 for application
                @parentName,
                @parentGuid,
                4,  -- 4 for scope
                @childName,
                @childGuid,
                N'' -- no other info
        END

Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzApplication]

-- Delete a specific record from table [AzMan_AzApplication]

(
 @Return   int output,
 @ID [int] -- for [AzMan_AzApplication].[ID] column
,@StoreId [int] = Null 
)

As
    Set NoCount On

    DECLARE @RowCount INT, @Error INT
    DECLARE @parentName nvarchar(512)
    DECLARE @parentGuid uniqueidentifier

    DECLARE @childName nvarchar(512)
    DECLARE @childGuid uniqueidentifier
    Declare @AccessAtObjType [tinyint]    
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 1, 1, @SaclIsOn output
    
    if @Return <> 1
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End
    
    Set @Return = 0

    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store
                    WHERE store.ID = @StoreId
            SELECT @childName = app.Name, @childGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app
                    WHERE app.ID = @ID
        END
        
    Delete From [dbo].[AzMan_AzApplication]

    Where
        ((@ID Is Null) Or ([ID] = @ID))
    And ((@StoreId Is Null) Or ([StoreID] = @StoreId))

    
    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End 
    End
    
    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    1,  -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE
                    0,  -- 0 for store
                    @parentName,
                    @parentGuid,
                    1,  -- 1 for application
                    @childName,
                    @childGuid,
                    N'' -- no other info
        END
Done:
    Set NoCount Off
            
    Return(@Return)

GO

Create Procedure [AzMan_SPD_AzAuthorizationStore]
-- Delete a specific record from table [AzMan_AzAuthorizationStore]

(
 @Return   int output,
 @ID [int]              
)

As

Set NoCount On

    DECLARE @RowCount INT, @Error INT
    DECLARE @parentName nvarchar(512)
    DECLARE @parentGuid uniqueidentifier
    Declare @AccessAtObjType [tinyint]    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output
    
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store
                    WHERE store.ID = @ID
        END
    
    if @Return <> 1
        Begin
            if (@Return >= 2)
                Set @Return = -5
        End
    ELSE
        Begin
            Set @Return = 0
            Delete From [dbo].[AzMan_AzAuthorizationStore]
                Where ((@ID Is Null) Or ([ID] = @ID))
        End

    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateObjectAudit]
                @Return,
                1,  -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE
                0,  -- 0 for store
                @parentName,
                @parentGuid,
                0,  -- 0 for store
                @parentName,
                @parentGuid,
                N'' -- no other info
        END
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzApplicationGroup]
-- Delete a specific record from table [AzMan_AzApplicationGroup]
(
 @Return   int output,
 @ID [int] 
,@ParentId [int] = Null 
)

As

    Set NoCount On

    DECLARE @RowCount INT, @Error INT
    DECLARE @parentName nvarchar(512)
    DECLARE @parentGuid uniqueidentifier

    DECLARE @childName nvarchar(512)
    DECLARE @childGuid uniqueidentifier
    DECLARE @ParentType tinyint
    Declare @AccessAtObjType [tinyint]    
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 1, @SaclIsOn output
    
    if @Return <> 1
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End

    Set @Return = 0

    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @ParentType = appGroup.ParentType, 
                    @childName = appGroup.Name, 
                    @childGuid = appGroup.ObjectGuid 
                    FROM [dbo].[AzMan_AzApplicationGroup] appGroup
                    WHERE appGroup.ID = @ID
            IF @ParentType = 0  -- store
                SELECT  @parentName = store.Name, 
                        @parentGuid = store.ObjectGuid 
                        FROM [dbo].[AzMan_AzAuthorizationStore] store
                        WHERE store.ID = @ParentId
            ELSE IF @ParentType = 1  -- app
                SELECT  @parentName = app.Name, 
                        @parentGuid = app.ObjectGuid 
                        FROM [dbo].[AzMan_AzApplication] app
                        WHERE app.ID = @ParentId
            ELSE IF @ParentType = 4  -- scope
                SELECT  @parentName = scope.Name, 
                        @parentGuid = scope.ObjectGuid 
                        FROM [dbo].[AzMan_AzScope] scope
                        WHERE scope.ID = @ParentId
        END
    Delete From [dbo].[AzMan_AzApplicationGroup]
    Where
        ([ID] = @ID)

    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End 
    End

    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    1,  -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE
                    @ParentType,
                    @parentName,
                    @parentGuid,
                    5,  -- 5 for group
                    @childName,
                    @childGuid,
                    N'' -- no other info
        END
Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzTask]
-- Delete a specific record from table [AzMan_AzTask]
(
 @Return   int output,
 @ID [int] 
,@ParentId [int] = Null 
)

As
    Set NoCount On

    DECLARE @RowCount INT, @Error INT
    DECLARE @parentName nvarchar(512)
    DECLARE @parentGuid uniqueidentifier

    DECLARE @childName nvarchar(512)
    DECLARE @childGuid uniqueidentifier
    DECLARE @ParentType tinyint
    Declare @AccessAtObjType [tinyint]    
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 1, @SaclIsOn output
    
    if @Return <> 1
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End
    
    
    Set @Return = 0 
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @ParentType = task.ParentType, 
                    @childName = task.Name, 
                    @childGuid = task.ObjectGuid 
                    FROM [dbo].[AzMan_AzTask] task
                    WHERE task.ID = @ID
            IF @ParentType = 1  -- app
                SELECT  @parentName = app.Name, 
                        @parentGuid = app.ObjectGuid 
                        FROM [dbo].[AzMan_AzApplication] app
                        WHERE app.ID = @ParentId
            ELSE IF @ParentType = 4  -- scope
                SELECT  @parentName = scope.Name, 
                        @parentGuid = scope.ObjectGuid 
                        FROM [dbo].[AzMan_AzScope] scope
                        WHERE scope.ID = @ParentId
        END
        
    Delete From [dbo].[AzMan_AzTask]

    Where ([ID] = @ID)

    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End 
    End
    
    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    1,  -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE
                    @ParentType,
                    @parentName,
                    @parentGuid,
                    3,  -- 3 for task
                    @childName,
                    @childGuid,
                    N'' -- no other info
        END
Done:
Set NoCount Off

Return(@Return)

GO

Create Procedure [AzMan_SPD_AzRoleAssignment]
-- Delete a specific record from table 
(
 @Return   int output,
 @ID [int] 
,@ParentId [int] = Null 
)
As

    Set NoCount On

    DECLARE @RowCount INT, @Error INT
    DECLARE @parentName nvarchar(512)
    DECLARE @parentGuid uniqueidentifier

    DECLARE @childName nvarchar(512)
    DECLARE @childGuid uniqueidentifier
    DECLARE @ParentType tinyint
    Declare @AccessAtObjType [tinyint]    
    
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    -- Check access at this object
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 1, @SaclIsOn output
    
    if @Return <> 1
    Begin
        if (@Return >= 2)
        Begin
            Set @Return = -5 
        End
        goto Done
    End
    
    Set @Return = 0 
    -- get info for auditing
    IF @SaclIsOn = 1
        BEGIN
            SELECT @ParentType = role.ParentType, 
                    @childName = role.Name, 
                    @childGuid = role.ObjectGuid 
                    FROM [dbo].[AzMan_AzRoleAssignment] role
                    WHERE role.ID = @ID
            IF @ParentType = 1  -- app
                SELECT  @parentName = app.Name, 
                        @parentGuid = app.ObjectGuid 
                        FROM [dbo].[AzMan_AzApplication] app
                        WHERE app.ID = @ParentId
            ELSE IF @ParentType = 4  -- scope
                SELECT  @parentName = scope.Name, 
                        @parentGuid = scope.ObjectGuid 
                        FROM [dbo].[AzMan_AzScope] scope
                        WHERE scope.ID = @ParentId
        END
        
    Delete From [dbo].[AzMan_AzRoleAssignment]
    Where ([ID] = @ID)

    SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT  
    If @RowCount <> 1
    Begin
        if @Error <> 0 
        Begin   
            Set @Return = @Error
        End
        else
        Begin
            Set @Return = -1168 --Record not found
        End 
    End
    
    -- generate an audit
    IF @SaclIsOn = 1
        BEGIN
            EXEC [AzMan_SP_GenerateObjectAudit]
                    @Return,
                    1,  -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE
                    @ParentType,
                    @parentName,
                    @parentGuid,
                    6,  -- 6 for role
                    @childName,
                    @childGuid,
                    N'' -- no other info
        END
Done:
Set NoCount Off

Return(@Return)

GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp
GO

-- query the timestamps of a store
CREATE PROCEDURE AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp
(
@ReturnCode int output,
@storeID int
)
AS 
SELECT @ReturnCode = 0
 
SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzAuthorizationStore] 
WHERE [ID] = @storeID

Return(@@RowCount)

GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPS_Enum_AzApplicationUpdateTimeStamp' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Enum_AzApplicationUpdateTimeStamp
GO

-- query the timestamps of applications
CREATE PROCEDURE AzMan_SPS_Enum_AzApplicationUpdateTimeStamp
(
@ReturnCode int output,
@storeID int
)
AS 
SELECT @ReturnCode = 0

SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzApplication] 
WHERE [StoreID] = @storeID

Return(@@RowCount)

GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPS_Enum_AzScopeUpdateTimeStamp' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Enum_AzScopeUpdateTimeStamp
GO

-- query the timestamps of scopes
CREATE PROCEDURE AzMan_SPS_Enum_AzScopeUpdateTimeStamp
(
@ReturnCode int output,
@appID int
)
AS 
SELECT @ReturnCode = 0

SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzScope] 
WHERE [AppID] = @appID

Return(@@RowCount)

GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp
GO

-- query the timestamps of application groups
CREATE PROCEDURE AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp
(
@ReturnCode int output,
@parentID int,
@parentType tinyint
)
AS 
SELECT @ReturnCode = 0

IF (@parentType = 0)
    SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] 
    WHERE [StoreID] = @parentID
IF (@parentType = 1)
    SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] 
    WHERE [AppID] = @parentID
IF (@parentType = 4)
    SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] 
    WHERE [ScopeID] = @parentID

Return(@@RowCount)

GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPS_Enum_AzOperationUpdateTimeStamp' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Enum_AzOperationUpdateTimeStamp
GO

-- query the timestamps of operations
CREATE PROCEDURE AzMan_SPS_Enum_AzOperationUpdateTimeStamp
(
@ReturnCode int output,
@appID int
)
AS 
SELECT @ReturnCode = 0

SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzOperation] 
WHERE [AppID] = @appID

Return(@@RowCount)

GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp
GO

-- query the timestamps of roles
CREATE PROCEDURE AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp
(
@ReturnCode int output,
@parentID int,
@parentType tinyint
)
AS 
SELECT @ReturnCode = 0

IF (@parentType = 1)

    SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzRoleAssignment] 
    WHERE [AppID] = @parentID

ELSE
    SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzRoleAssignment] 
    WHERE [ScopeID] = @parentID

Return(@@RowCount)


GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPS_Enum_AzTaskUpdateTimeStamp' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Enum_AzTaskUpdateTimeStamp
GO

-- query the timestamps of tasks
CREATE PROCEDURE AzMan_SPS_Enum_AzTaskUpdateTimeStamp
(
@ReturnCode int output,
@parentID int,
@parentType tinyint
)
AS 
SELECT @ReturnCode = 0

IF (@parentType = 1)

    SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzTask] 
    WHERE [AppID] = @parentID

ELSE
    SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzTask] 
    WHERE [ScopeID] = @parentID

Return(@@RowCount)

GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPD_SQLRole' and type = 'P')
    DROP PROCEDURE AzMan_SPD_SQLRole
GO

CREATE PROCEDURE AzMan_SPD_SQLRole
(
@Return             [int] output,
@SQLRoleName        [nvarchar] (64)     
)
AS
    DECLARE @Ret    [int]
    DECLARE @member [nvarchar] (64)
    
    DECLARE roleMember_cursor CURSOR
    FOR 
    (
        select u.name from sysusers u, sysusers g, sysmembers m
            where g.name = @SQLRoleName
                and g.uid = m.groupuid
                and g.issqlrole = 1
                and u.uid = m.memberuid
    )
    OPEN roleMember_cursor
    FETCH NEXT FROM roleMember_cursor INTO @member
    WHILE @@FETCH_STATUS = 0
    BEGIN
      EXEC @Ret = sp_droprolemember @SQLRoleName, @member
      FETCH NEXT FROM roleMember_cursor INTO @member
    END
    Close roleMember_cursor
    DEALLOCATE roleMember_cursor
    
    Set @Return = -1
    
    Exec @Ret = sp_droprole @SQLRoleName
    
    if @Ret <> 0 
    Begin
        Set @Return = -1 
    End
    Else
    Begin
        Set @Return = 0 
    End
    
    Return @Return  

GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPD_All_SQLRole_ForObject' and type = 'P')
    DROP PROCEDURE AzMan_SPD_All_SQLRole_ForObject
GO

CREATE PROCEDURE AzMan_SPD_All_SQLRole_ForObject
(
@Return     [int] output,
@ID         [int],
@ObjectType [tinyint]
)
AS
    DECLARE @uid    [int]
    DECLARE @SQLRoleName [nvarchar] (64)

    Set @Return = 0
    
    SELECT @uid = 0
    
    Select @uid=[uid], @SQLRoleName = [SQLRoleName] 
    From [dbo].[Azman_SQLRole] 
    where 
      [ObjectID]    = @ID and
      [ObjectType]  = @ObjectType and
      [RoleType]    = 1
    
    IF @uid <> 0
    Begin
        Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName
    End
    
    SELECT @uid = 0 
    Select @uid=[uid], @SQLRoleName = [SQLRoleName] 
    From [dbo].[Azman_SQLRole] 
    where 
      [ObjectID]    = @ID and
      [ObjectType]  = @ObjectType and
      [RoleType]    = 2
    
    IF @uid <> 0
    Begin
        Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName
    End
    
    set @uid = 0
    Select @uid=[uid], @SQLRoleName = [SQLRoleName] 
    From [dbo].[Azman_SQLRole] 
    where 
      [ObjectID]    = @ID and
      [ObjectType]  = @ObjectType and
      [RoleType]    = 3

    IF @uid <> 0
    Begin
        Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName
    End

    if @Return = 0 
    Begin
        DELETE Azman_SQLRole WHERE [ObjectID] = @ID AND [ObjectType] = @ObjectType
        Set @Return = 0
    End

Done:
    Return @Return
GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPD_SQLRole_ForObject' and type = 'P')
    DROP PROCEDURE AzMan_SPD_SQLRole_ForObject
GO

CREATE PROCEDURE AzMan_SPD_SQLRole_ForObject
(
@Return     [int] output,
@ID         [int],
@ObjectType [tinyint],
@DeleteFlag [int]       -- bitwise pattern. 0x0001 for deleting only self, 0x0002 for deleting only children
)
AS
    SET NOCOUNT ON
    
    DECLARE @SQLRoleName [nvarchar] (64)
    Declare @AccessAtObjType [tinyint]    
    DECLARE @SaclIsOn [bit]
    Declare @DbName [nvarchar] (255)
    Set @SaclIsOn = 0
    
    Set @Return = -1

    -- such role deletion audit will be generated by the object deletion.
    -- so we don't care about SACL (second last parameter) here
    Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, @ObjectType, 0, @SaclIsOn output
    
    if @Return <> 1 
    Begin
        -- if the object is deleted we will ignore as we still want to delete all the roles for the object
        if @Return = -1168
        Begin
            Set @Return = 0
        End
        Else
        Begin
            if (@Return >= 2)
            Begin
                Set @Return = -5 
            End
            goto Done
        End
    End
    
    -- our deletion flag will switch to delete all because we only need
    -- to make sure that the acting container object's roles are not deleted
    -- so that the user still has access
    -- if we are instructed to delete sub-container's roles
    if (@DeleteFlag & 2) <> 0
        begin
            -- for applications or stores, we also need to delete the sub-container's roles
            DECLARE @locReturn int -- we have to press on for this action. No rollback
            IF @ObjectType = 0
                BEGIN
                    DECLARE @AppID int
                    DECLARE app_cursor CURSOR
                    FOR 
                    (
                        select App.ID FROM AzMan_AzApplication App WHERE App.StoreID = @ID
                    )
                    OPEN app_cursor
                    FETCH NEXT FROM app_cursor INTO @AppID
                    WHILE @@FETCH_STATUS = 0
                        BEGIN
                            -- now call recursively to delete the app's roles
                            EXEC AzMan_SPD_SQLRole_ForObject @locReturn output, @AppID, 1, 3
                            FETCH NEXT FROM app_cursor INTO @AppID
                        END
                    Close app_cursor
                    DEALLOCATE app_cursor
	            END
            ELSE IF @ObjectType = 1
	            BEGIN
                    DECLARE @ScopeID int
                    DECLARE scope_cursor CURSOR
                    FOR 
                    (
                        select Scope.ID FROM AzMan_AzScope Scope WHERE Scope.AppID = @ID
                    )
                    OPEN scope_cursor
                    FETCH NEXT FROM scope_cursor INTO @ScopeID
                    WHILE @@FETCH_STATUS = 0
                        BEGIN
                            -- now call recursively to delete the app's roles
                            EXEC AzMan_SPD_SQLRole_ForObject @locReturn output, @ScopeID, 4, 3
                            FETCH NEXT FROM scope_cursor INTO @ScopeID
                        END
                    Close scope_cursor
                    DEALLOCATE scope_cursor
                END
        end

    -- if we are instructed to delete the self roles
    if (@DeleteFlag & 1) <> 0
        begin
            If Is_Member('db_owner') = 1 or Is_Member('db_securityadmin') = 1
            Begin
                exec AzMan_SPD_All_SQLRole_ForObject @Return output , @ID, @ObjectType
            End
            else
            begin
                Set @DbName = db_name()
                Exec master.dbo.xp_AzManDeleteRole @Return output, @ID, @ObjectType, @DbName 
            End
        end

Done:
    SET NOCOUNT OFF
    Return @Return
    
GO

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'AzMan_SPS_Get_ObjectSecurityOption' and type = 'P')
    DROP PROCEDURE AzMan_SPS_Get_ObjectSecurityOption
GO

CREATE PROCEDURE AzMan_SPS_Get_ObjectSecurityOption
(
@Return [int] output,
@AccessAtObjType [tinyint] output,
@ID [int],
@ObjectType [tinyint],
@UserType [int] output
)
AS
    DECLARE @SaclIsOn [bit]
    Set @SaclIsOn = 0
    
    SET @Return = -5
    SET @UserType = 0   -- illegal users
    
    IF @ObjectType = 0 OR @ObjectType = 1 OR @ObjectType = 4
        BEGIN
            -- no need to know that SACL (Second last parameter)
	        Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, @ObjectType, 0, @SaclIsOn output
	        IF @Return >= 1 AND @Return <= 3
	            BEGIN
	                SET @UserType = @Return
	                SET @Return = 0
	            END
	    END
	    
	RETURN @Return
	
GO

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzMan_SP_Grant_Permission' and type = 'P')
    DROP PROCEDURE AzMan_SP_Grant_Permission
GO

CREATE PROCEDURE AzMan_SP_Grant_Permission
AS
    grant execute on AzMan_SP_GetSQLRole                to  public
    grant execute on AzMan_SPI_SQLRole                  to public
    --AzMan_SPI_Add_User_To_SQLRole
    grant execute on AzMan_SPI_Add_User_To_Role         to public
    --AzMan_SPD_User_From_SQLRole
    grant execute on AzMan_SPD_User_From_Role           to public
    --AzMan_SP_Get_Object_Path_For_Container
    --AzMan_SP_Get_Object_Path
    --AzMan_SP_AccessCheck_For_Container
    --AzMan_SP_AccessCheck
    grant execute on AzMan_SPS_Get_StoreIDByName              to public
    --AzMan_SP_Check_Dup_Task
    --AzMan_SP_Check_Dup_RoleAssignment
    --AzMan_SP_Check_Dup_Application
    --AzMan_SP_Check_Dup_Scope
    --AzMan_SP_Check_Dup_Operation
    --AzMan_SP_Check_Dup_Group_For_Given_Parent
    --AzMan_SP_Check_Dup_Group
    grant execute on AzMan_SPI_AzAuthorizationStore     to public
    grant execute on AzMan_SPI_AzApplication            to public
    grant execute on AzMan_SPU_AzApplication            to public
    grant execute on AzMan_SPI_AzScope                  to public
    grant execute on AzMan_SPI_AzOperation              to public
    grant execute on AzMan_SPI_AzApplicationGroup       to public   
    grant execute on AzMan_SPI_AzTask                   to public
    --AzMan_SPI_AzTask_Single_Operation
    --AzMan_SPD_AzTask_Single_Operation
    grant execute on AzMan_SPI_AzTask_Multi_Operations  to public
    --AzMan_SPI_AzRoleAssignment_Single_Operation
    --AzMan_SPD_AzRoleAssignment_Single_Operation
    grant execute on AzMan_SPI_AzRoleAssignment_Multi_Operations    to public
    --AzMan_SPI_AzTask_Single_Task
    --AzMan_SPD_AzTask_Single_Task
    grant execute on AzMan_SPI_AzTask_Multi_Tasks       to public
    --AzMan_SPI_AzRoleAssignment_Single_Task
    --AzMan_SPD_AzRoleAssignment_Single_Task
    grant execute on AzMan_SPI_AzRoleAssignment_Multi_Tasks to public
    grant execute on AzMan_SPI_AzRoleAssignment             to public
    grant execute on AzMan_SPU_AzAuthorizationStore         to public
    grant execute on AzMan_SPU_AzScope                      to public
    grant execute on AzMan_SPU_AzOperation                  to public
    grant execute on AzMan_SPU_AzApplicationGroup           to public
    grant execute on AzMan_SPU_AzTask                       to public
    grant execute on AzMan_SPU_AzRoleAssignment             to public
    grant execute on AzMan_SPIU_AzApplicationGroup_LDAPQuery to public
    grant execute on AzMan_SPIU_Bizrule                      to public
    grant execute on AzMan_SPIU_AzApplicationGroup_Bizrule   to public
    grant execute on AzMan_SPIU_AzTask_Bizrule               to public  
    --AzMan_SPI_AzApplicationGroup_Single_SidMember
    --AzMan_SPD_AzApplicationGroup_Single_SidMember
    grant execute on AzMan_SPI_AzApplicationGroup_Multi_SidMembers  to public
    grant execute on AzMan_SPI_AzApplicationGroup_Multi_SidNonMembers   to public
    --AzMan_SPI_AzApplicationGroup_Single_AppMember
    --AzMan_SPD_AzApplicationGroup_Single_AppMember
    grant execute on AzMan_SPI_AzApplicationGroup_Multi_AppMembers  to public
    grant execute on AzMan_SPI_AzApplicationGroup_Multi_AppNonMembers   to public
    --AzMan_SPI_AzRoleAssignment_Single_SidMember
    --AzMan_SPD_AzRoleAssignment_Single_SidMember
    grant execute on AzMan_SPI_AzRoleAssignment_Multi_SidMembers    to public
    -- AzMan_SPI_AzRoleAssignment_Single_AppMember
    -- AzMan_SPD_AzRoleAssignment_Single_AppMember
    grant execute on AzMan_SPI_AzRoleAssignment_Multi_AppMembers    to public
    -- spDrop_AzMan_Table
    grant execute on AzMan_SPS_Get_AzAuthorizationStoreByName       to public
    grant execute on AzMan_SPS_Enum_AzApplications                  to public
    grant execute on AzMan_SPS_Get_AzApplication                    to public
    --AzMan_SPS_Get_AzApplication_AppData
    --AzMan_SPS_Get_AzScope_AppData
    --AzMan_SPS_Get_AzAuthorizationStore_AppData
    grant execute on AzMan_SPS_Enum_AzScope                         to public
    grant execute on AzMan_SPS_Enum_AzApplicationGroup              to public
    grant execute on AzMan_SPS_Enum_AzTask                          to public
    grant execute on AzMan_SPS_Enum_AzTask_Operations               to public
    grant execute on AzMan_SPS_Enum_AzTask_Tasks                    to public   
    grant execute on AzMan_SPS_Enum_AzRoleAssignment_Tasks          to public
    grant execute on AzMan_SPS_Enum_AzRoleAssignment_Operations     to public
    grant execute on AzMan_SPS_Enum_AzRoleAssignment                to public
    grant execute on AzMan_SPS_Get_AzApplicationGroup               to public
    grant execute on AzMan_SPS_Get_AzApplicationGroup_BizruleInfo   to public
    grant execute on AzMan_SPS_Get_AzTask_BizruleInfo               to public   
    grant execute on AzMan_SPS_Get_AzApplicationGroup_LDAPQuery     to public
    grant execute on AzMan_SPS_Enum_AzApplicationGroup_SIDMembers   to public
    grant execute on AzMan_SPS_Enum_AzApplicationGroup_SIDNonMembers to public
    grant execute on AzMan_SPS_Enum_AzApplicationGroup_AppMembers   to public
    grant execute on AzMan_SPS_Enum_AzApplicationGroup_AppNonMembers    to public
    grant execute on AzMan_SPS_Enum_AzRoleAssignment_SIDMembers     to public
    grant execute on AzMan_SPS_Enum_AzRoleAssignment_AppMembers     to public
    grant execute on AzMan_SPS_Get_AzScope                          to public
    grant execute on AzMan_SPS_Enum_AzOperation                     to public
    grant execute on AzMan_SPS_Get_AzOperation                      to public
    grant execute on AzMan_SPS_Get_AzTask                           to public
    grant execute on AzMan_SPS_Get_AzRoleAssignment                 to public
    grant execute on AzMan_SPD_AzOperation                          to public
    grant execute on AzMan_SPD_AzScope                              to public
    grant execute on AzMan_SPD_AzApplication                        to public
    grant execute on AzMan_SPD_AzAuthorizationStore                 to public
    grant execute on AzMan_SPD_AzApplicationGroup                   to public
    grant execute on AzMan_SPD_AzTask                               to public
    grant execute on AzMan_SPD_AzRoleAssignment                     to public
    grant execute on AzMan_SPD_SQLRole_ForObject                    to public
    grant execute on AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp to public
    grant execute on AzMan_SPS_Enum_AzApplicationUpdateTimeStamp to public
    grant execute on AzMan_SPS_Enum_AzScopeUpdateTimeStamp to public
    grant execute on AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp to public
    grant execute on AzMan_SPS_Enum_AzOperationUpdateTimeStamp to public
    grant execute on AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp to public
    grant execute on AzMan_SPS_Enum_AzTaskUpdateTimeStamp to public
    grant execute on AzMan_SP_GenerateObjectAudit                   to public
    grant execute on AzMan_SP_GenerateMemberAudit                   to public
    grant execute on AzMan_SP_GenerateGenericAudit                  to public
    grant execute on AzMan_SPS_Get_ObjectSecurityOption             to public
    grant execute on AzMan_SPS_Get_DBOwners                         to public
    grant execute on AzMan_SPS_Get_Role_For_Object                  to public
    grant execute on AzMan_SP_GetRoleMemberCount                    to public
    
    grant execute on AzMan_SPI_SQLRole_From_XP                      to dbo
    grant execute on AzMan_SPD_All_SQLRole_ForObject                to dbo
    grant execute on AzMan_SPD_User_From_SQLRole_From_XP            to dbo
    grant execute on AzMan_SPI_Add_User_To_SQLRole_From_XP          to dbo
    grant execute on AzMan_SPU_SqlRoleUpdated                       to public
    grant execute on AzMan_SPI_Create_SqlRole_For_Object            to public
    
GO  


IF not EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AzGenerateAudit' and type = 'X')
    exec sp_addextendedproc 'AzGenerateAudit',                  'AzSqlExt.dll'
GO

IF not EXISTS (SELECT name FROM sysobjects
        WHERE name = 'xp_AzManAddUserToRole' and type = 'X')
    exec sp_addextendedproc 'xp_AzManAddUserToRole',            'AzSqlExt.dll'
GO

IF not EXISTS (SELECT name FROM sysobjects
        WHERE name = 'xp_AzManRemoveUserFromRole' and type = 'X')
    exec sp_addextendedproc 'xp_AzManRemoveUserFromRole',       'AzSqlExt.dll'
GO

IF not EXISTS (SELECT name FROM sysobjects
        WHERE name = 'xp_AzManDeleteRole' and type = 'X')
    exec sp_addextendedproc 'xp_AzManDeleteRole',               'AzSqlExt.dll'
GO

IF not EXISTS (SELECT name FROM sysobjects
        WHERE name = 'xp_AzManAddRole' and type = 'X')
    exec sp_addextendedproc 'xp_AzManAddRole',                  'AzSqlExt.dll'
GO

grant execute on AzGenerateAudit                to  public
grant execute on xp_AzManAddUserToRole          to  public
grant execute on xp_AzManRemoveUserFromRole     to  public
grant execute on xp_AzManDeleteRole             to  public
grant execute on xp_AzManAddRole                to  public
MSFT	A)W d,X Lx@l4`		(


TH

t<|,Pl2$K0TOQ4"Q3H@4" ]`@@(4"]=x@\4"k@Tx(4"tl&@4" u@(4"u @4"|@(4"h}@<	4"	h @L
(4"
8@|
 4"P@
4(4"0h@H
PL4"

@
hP4"@:4"L@D4"@h4"@@`x<4"L@PF4"D@$-4"(@ <(4"@@|\!4"tX@|(4"p@ "4"ؚ@8P4"$@T!4"p@hX'4"ܜ@@4"̞@T(44"@H44"h@(h,4"80@$4" H@$4"!0`@ $&!"ģ h!!#ģ '!$!%"%Lx!%"&L"0%"'L8"@ !(LbX"0HHxx8hP `(@X0@:>20FF킛jO0EŕJ Bld0{'Mk~SHx^m@kۦ5,`$E.}VEjL<FDXN6yXM_/}`"
bA4]C 8LC
ŅӘ.lJ6mI85LOV^aMDě^NtHmF٤UwsB	s
xhjI|Cmj`+ H!@%Oqln^q}J.@Y'l%UPEz@ٙ%DXf4sM;$1}dUZ
O+_իv^DAH[M̌`	H2H%e&	?NF[V(
OKKm]O
_h]M'nS<
(ADSo:=T}^ERw}PjItHDpMPsCpO@qOSH
ciB*yYWKito-\QKC<7̮w]:HpNܡMZ><x 0-stdole2.tlbWWW/D.x (D2.|0P"@*.$+h0/!-1`1( \'$8&##",+-<-0(L)8!`(d"(0d# &<#lT'l!l,h&L0 /)$*"p+(.th/P/10&-`*81H%x")21,'H*&+X!H+t)'*$8"0(H 1<$(
AZROLESLibWW8E5IAzAuthorizationStoreWWW DescriptionWppbstrDescription2ApplicationDataWpbstrApplicationData
7)DomainTimeoutWWWplPropWWЪScriptEngineTimeoutWMaxScriptEngines-GenerateAuditsWW.pbPropWW(Writable]vpfPropWWmGetPropertyW^lPropIdWvarReservedW5pvarProp4'SetPropertyWIvarPropWAddPropertyItemWDeletePropertyItemWW:PolicyAdministrators
RpvarAdminsWW
"PolicyReadersWWWpvarReadersWzAddPolicyAdministratorWW	VbstrAdminWWWRDeletePolicyAdministratorWWWAddPolicyReaderW
bstrReaderWW`JDeletePolicyReaderWW
NInitializeWWlFlagsWW
;bstrPolicyURLWWW(UpdateCacheWxDeleteWWd8IAzApplicationsWdzItemIndexWWW
pvarObtPtrWWd0vCountWWWplCountWdxA_NewEnum	ppEnumPtrWWWnApplicationsppAppCollectionW8uIAzApplicationWWTName	spbstrNameWWWAuthzInterfaceClsidWp	pbstrPropWWWVersionWQApplyStoreSaclWW,	8IAzScopesWWW2ScopesWWppScopeCollectionWWW8IAzScopep8IAzApplicationGroupskWApplicationGroupsWWWppGroupCollectionWWWX8KIAzApplicationGroupWX\TypeX	LdapQueryWWWX
2AAppMembersWWXT
AppNonMembersWWWXtMembersWX
NonMembersWWXTSpAddAppMember3bstrPropXmDeleteAppMemberWXAddAppNonMemberWXKDeleteAppNonMemberWWX	rAddMemberWWWXHDeleteMemberXl4AddNonMemberXc"DeleteNonMemberWX\SubmitWWX
AddMemberNameWWWXFDeleteMemberNameXAddNonMemberNameXHKDeleteNonMemberNameWX$MembersNameWXV@NonMembersNameWWaOpenApplicationGroup
bstrGroupNameWWWVppGroupWF4CreateApplicationGroupWWDeleteApplicationGroupWW8mIAzRolesRolesWWWppRoleCollection 8^.IAzRoleW w;AddTaskW 
BDeleteTaskWW ڑAddOperation ?DeleteOperationW 
~VOperationsWW LTasksWWWSOpenRolebstrRoleName[ppRoleWW
XCreateRoleWW
KDeleteRoleWW48IAzTasksuMppTaskCollection8pIAzTaskWpMBizRuleW	BizRuleLanguageWBizRuleImportedPathW1IsRoleDefinitionObstrOpWW(bstrTaskOpenTask_bstrTaskNameppTaskWW
CreateTaskWW
ϦCanBeDelegatedWWPQBizrulesWritablepPolicyAdministratorsNamed	qPolicyReadersNameWWW$jAddPolicyAdministratorNameWWcDeletePolicyAdministratorNameWWWAddPolicyReaderNameW<>DeletePolicyReaderNameWW	DaOpenScopeWWW
+bstrScopeNameWWWppScopeWѓCreateScopeW|	ZDeleteScopeWL4
8IAzOperationsWWWBppOperationCollectionWWW8IAzOperationtOperationIDW
OpenOperationWWW
|bstrOperationNameWWW`a9ppOperationW(CreateOperationW48IAzClientContextDAccessCheckWbstrObjectNameWW
YvarScopeNamesWWWt
n#varOperationsWWWVvarParameterNamesWWW 	IvarParameterValuesWWvarInterfaceNamesWWW	-varInterfaceFlagsWWW
rvarInterfacesWWW
pvarResultsW
GetBusinessRuleStringWWWXgpbstrBusinessRuleStringWUserDnWW
UserSamCompatWWWH
<UserDisplayWx
UserGuid,
UserCanonicalWWWUserUpnW
1UserDnsSamCompatGetRoles
pvarRoleNamesWWW2RoleForAccessCheckWW pInitializeClientContextFromTokenAyullTokenHandleWWppClientContextWInitializeClientContextFromNameW 
0ClientNameWW
~DomainNameWW3DelegatedPolicyUserspvarDelegatedPolicyUsers#GAddDelegatedPolicyUserWWLbstrDelegatedPolicyUserW`
DeleteDelegatedPolicyUserWWW$ InitializeClientContextFromStringSid	iSidStringWWW\|lOptionsDelegatedPolicyUsersName>AddDelegatedPolicyUserNameWWsDeleteDelegatedPolicyUserNameWWW%OpenApplicationW4
KbstrApplicationNameW(
ڃppApplicationWWWCreateApplicationWWWL
DeleteApplicationWWW

TargetMachineWWW|
gpbstrTargetMachineWW opbApplyStoreSacl CloseApplication|OrlFlagWWWx8IAzAuthorizationStore2WW8lIAzApplication2W@08}mIAzClientContext2WWW@ZGetAssignedScopesPageWWWSPageSizeD
BpvarCursorWW ]pvarScopeNamesWW@;AddRolesvarRoles@AddApplicationGroupsdvarApplicationGroups@
fAddStringSidsWWWP	
varStringSidsWWW@X3LDAPQueryDNWpbstrLDAPQueryDND!InitializeClientContextFromToken2WWWlulTokenHandleLowPartl~ulTokenHandleHighPartWWWInitializeClientContext2IdentifyingStringWWWxJEOpenApplication2xCreateApplication2WW8IAzAuthorizationStore3WW2IsUpdateNeededWW$PpbIsUpdateNeeded`BizruleGroupSupportedWWW?pbSupportedWUpgradeStoresFunctionalLevel8lFunctionalLevel!IsFunctionalLevelUpgradeSupportedWWWGetSchemaVersionOplMajorVersionWWplMinorVersionWW$8mIAzApplication3WScopeExistsWdpbExistWl4	8IAzScope2WWW	8hIAzRoleDefinitionsWWl$
RoleDefinitionsW@ppRoleDefinitionsWWW4
8IAzRoleDefinitionWWW8)IAzRoleAssignmentsWW4pVRoleAssignmentsW
|bRecursiveWW~ppRoleAssignmentsWWW4AddRoleDefinitionWWWhIbstrRoleDefinitionWW4DuDeleteRoleDefinitionl8CreateRoleDefinition4bstrRoleDefinitionNameWWlKuOpenRoleDefinitionWW
8IAzRoleAssignmentWWW0ScopeWWWl	CreateRoleAssignmentObstrRoleAssignmentNameWW
ۮppRoleAssignmentl	]OpenRoleAssignmentWWl]DeleteRoleAssignment
OpenScope2WW&ppScope2TCreateScope2$JDeleteScope2BizRulesEnabledWP	7pbEnabledWWW`	
8
IAzOperation2WWW	h8IAzTask2(
8IAzApplicationGroup2
 8~mIAzClientContext3WWW
\pAccessCheck2
]lOperationWWh#AplResult
IsInRoleAssignmentWW<	
ިpbIsInRoleWW
<
<7GetOperationsWWW
(O]GetTasks
88YIAzBizRuleParameters
RAddParameter

bstrParameterNameWWWl:varParameterValueWWW

AddParametersWWW
nGetParameterValueWWWpvarParameterValueWW
@ϱRemoveWW|]varParameterName
	RemoveAllWWW
QBizRuleParametersWWWppBizRuleParamWWT8IAzBizRuleInterfacesTfAddInterface6bstrInterfaceNameWWWh4lInterfaceFlagWWvarInterfaceT
´AddInterfacesWWWT&GetInterfaceValueWWW
XBizRuleInterfacesWWWppBizRuleInterfacesW
$	(`GetGroupsWWW	[ulOptionsWWWrpGroupArrayW
XSids=pStringSidArrayW80gIAzBizRuleContextWWWTٍBusinessRuleResultWW+BusinessRuleStringWWGetParameter@8IAzPrincipalLocatorW84IAzNameResolverWV3NameFromSidWHٹbstrSidW_pSidType 
%9NamesFromSidsWWWvSidsWWWl
XpvSidTypesWWpvNamesWTNameResolver%ppNameResolverWW`8rIAzObjectPickerWH
8,wireHWND
8_RemotableHandle
cfContext|8Z__MIDL_IWinTypes_0009WWWJhInprocW,ZhRemoteW
luWWW
5GetPrincipalsWWW
4#hParentWndWW8	lbstrTitleWWWD!ZpvSidsWWtSObjectPickerzppObjectPickerWWt8|AzAuthorizationStore8^AzBizRuleContext<`
8ucAzPrincipalLocatorWW8tagAZ_PROP_CONSTANTS0`AZ_PROP_NAME0\AZ_PROP_DESCRIPTIONW0-EAZ_PROP_WRITABLE0
AZ_PROP_APPLICATION_DATA0AZ_PROP_CHILD_CREATE0fYAZ_MAX_APPLICATION_NAME_LENGTHWW0=AZ_MAX_OPERATION_NAME_LENGTH09mAZ_MAX_TASK_NAME_LENGTHW0WAZ_MAX_SCOPE_NAME_LENGTH
0AZ_MAX_GROUP_NAME_LENGTH 0_AZ_MAX_ROLE_NAME_LENGTHW@0$AZ_MAX_NAME_LENGTHWW02AZ_MAX_DESCRIPTION_LENGTHWWW0~bAZ_MAX_APPLICATION_DATA_LENGTHWW0AZ_SUBMIT_FLAG_ABORT0\|AZ_SUBMIT_FLAG_FLUSH0"hAZ_MAX_POLICY_URL_LENGTH!0IAZ_AZSTORE_FLAG_CREATEWW#!0DAZ_AZSTORE_FLAG_MANAGE_STORE_ONLYWWWp0AZ_AZSTORE_FLAG_BATCH_UPDATE8!0ߏAZ_AZSTORE_FLAG_AUDIT_IS_CRITICALWWW"0pgAZ_AZSTORE_FORCE_APPLICATION_CLOSEWW80AZ_AZSTORE_NT6_FUNCTION_LEVELWWW *0AZ_AZSTORE_FLAG_MANAGE_ONLY_PASSIVE_SUBMITWW%0AZ_PROP_AZSTORE_DOMAIN_TIMEOUTWW!0AZ_AZSTORE_DEFAULT_DOMAIN_TIMEOUTWWW%0DAZ_PROP_AZSTORE_SCRIPT_ENGINE_TIMEOUTWWW0EAZ_AZSTORE_MIN_DOMAIN_TIMEOUTWWW$$0<AZ_AZSTORE_MIN_SCRIPT_ENGINE_TIMEOUT!(0 AZ_AZSTORE_DEFAULT_SCRIPT_ENGINE_TIMEOUT"0.AZ_PROP_AZSTORE_MAX_SCRIPT_ENGINESWW%0 3AZ_AZSTORE_DEFAULT_MAX_SCRIPT_ENGINESWWW#0fAZ_PROP_AZSTORE_MAJOR_VERSIONWWW!0AZ_PROP_AZSTORE_MINOR_VERSIONWWW0qAZ_PROP_AZSTORE_TARGET_MACHINEWWh$0RAZ_PROP_AZTORE_IS_ADAM_INSTANCEW	0vAZ_PROP_OPERATION_IDh!0FAZ_PROP_TASK_OPERATIONSW0AZ_PROP_TASK_BIZRULE0wAZ_PROP_TASK_BIZRULE_LANGUAGEWWWL0AZ_PROP_TASK_TASKSWW"0jAZ_PROP_TASK_BIZRULE_IMPORTED_PATHWW,'0AZ_PROP_TASK_IS_ROLE_DEFINITIONW\0AZ_MAX_TASK_BIZRULE_LENGTHWWx%#0pAZ_MAX_TASK_BIZRULE_LANGUAGE_LENGTHWP(0AZ_MAX_TASK_BIZRULE_IMPORTED_PATH_LENGTH
0tAZ_MAX_BIZRULE_STRINGWWWL0AZ_PROP_GROUP_TYPEWWX"0AZ_GROUPTYPE_LDAP_QUERYWh0KAZ_GROUPTYPE_BASICWW$0\AZ_GROUPTYPE_BIZRULE00AZ_PROP_GROUP_APP_MEMBERSWWW0JAZ_PROP_GROUP_APP_NON_MEMBERSWWW 0rAZ_PROP_GROUP_LDAP_QUERYp0QAZ_MAX_GROUP_LDAP_QUERY_LENGTHWW
0vAZ_PROP_GROUP_MEMBERSWWW0mAZ_PROP_GROUP_NON_MEMBERSWWWT0M;AZ_PROP_GROUP_MEMBERS_NAMEWW0iAZ_PROP_GROUP_NON_MEMBERS_NAMEWW%03AZ_PROP_GROUP_BIZRULEWWW0AZ_PROP_GROUP_BIZRULE_LANGUAGEWW #05AZ_PROP_GROUP_BIZRULE_IMPORTED_PATHW0`AZ_MAX_GROUP_BIZRULE_LENGTHW $0CAZ_MAX_GROUP_BIZRULE_LANGUAGE_LENGTH)0*AZ_MAX_GROUP_BIZRULE_IMPORTED_PATH_LENGTHWWW*0AZ_PROP_ROLE_APP_MEMBERS0dAZ_PROP_ROLE_MEMBERS0!0AZ_PROP_ROLE_OPERATIONSW"0AZ_PROP_ROLE_TASKSWW )0.AZ_PROP_ROLE_MEMBERS_NAMEWWW<0]AZ_PROP_SCOPE_BIZRULES_WRITABLEW(0[AZ_PROP_SCOPE_CAN_BE_DELEGATEDWW 0,AZ_PROP_CLIENT_CONTEXT_USER_DNWW&0AZ_PROP_CLIENT_CONTEXT_USER_SAM_COMPATWWD,#0=AZ_PROP_CLIENT_CONTEXT_USER_DISPLAYW 0AZ_PROP_CLIENT_CONTEXT_USER_GUID<.%0AAZ_PROP_CLIENT_CONTEXT_USER_CANONICALWWW#0AZ_PROP_CLIENT_CONTEXT_USER_UPNW**0TAZ_PROP_CLIENT_CONTEXT_USER_DNS_SAM_COMPATWW,0AZ_PROP_CLIENT_CONTEXT_ROLE_FOR_ACCESS_CHECK!$0SAZ_PROP_CLIENT_CONTEXT_LDAP_QUERY_DN$)0G>AZ_PROP_APPLICATION_AUTHZ_INTERFACE_CLSIDWWW0U}AZ_PROP_APPLICATION_VERSIONW,!0eAZ_MAX_APPLICATION_VERSION_LENGTHWWW,0AZ_PROP_APPLICATION_NAME&#0EAZ_PROP_APPLICATION_BIZRULE_ENABLEDW8 0
AZ_PROP_APPLY_STORE_SACL@(0AZ_PROP_GENERATE_AUDITSW\-0.AZ_PROP_POLICY_ADMINSWWWl.0AZ_PROP_POLICY_READERSWW %0}AZ_PROP_DELEGATED_POLICY_USERSWW-0]5AZ_PROP_POLICY_ADMINS_NAMEWW$0<AZ_PROP_POLICY_READERS_NAMEWd #0AZ_PROP_DELEGATED_POLICY_USERS_NAMEWL 0lAZ_CLIENT_CONTEXT_SKIP_GROUP)!0AZ_CLIENT_CONTEXT_SKIP_LDAP_QUERYWWW+%08AZ_CLIENT_CONTEXT_GET_GROUP_RECURSIVEWWW-0BAZ_CLIENT_CONTEXT_GET_GROUPS_STORE_LEVEL_ONLYWWWazroles 1.0 Type LibraryWWIAzAuthorizationStore InterfaceWWWIAzApplications InterfaceWIAzApplication InterfaceWWIAzScopes InterfaceWWWIAzScope InterfaceIAzApplicationGroups InterfaceIAzApplicationGroup InterfaceWIAzRoles InterfaceIAzRole InterfaceWIAzTasks InterfaceIAzTask InterfaceWIAzOperations InterfaceWWWIAzOperation InterfaceIAzClientContext Interface IAzAuthorizationStore2 InterfaceWWIAzApplication2 InterfaceWIAzClientContext2 InterfaceWWW IAzAuthorizationStore3 InterfaceWWIAzApplication3 InterfaceWIAzScope2 InterfaceWWWIAzRoleDefinitions InterfaceWWIAzRoleDefinition InterfaceWWWIAzRoleAssignments InterfaceWWIAzRoleAssignment InterfaceWWWIAzOperation2 InterfaceWWWIAzTask2 ClassIAzApplicationGroup2 InterfaceIAzClientContext3 InterfaceWWWIAzBizRuleParameters InterfaceIAzBizRuleInterfaces InterfaceIAzBizRuleContext InterfaceWWWIAzPrincipalLocator InterfaceWIAzNameResolver InterfaceWIAzObjectPicker InterfaceWAzAuthorizationStore ClassAzBizRuleContext ClassAzPrincipalLocator ClassWW@@@
@

d (,8@PXXhp L(0@H@X`px@4l@
T(0@H
`H
xWW$LDT
$ D!$$LD
$(D!$,LD
$0D!$4LD
$8D!$<LD	
$	@D!$
DLD4
$HD!
$LLD\
<
Pl	D

<Td	<Xd	<\d	$`LDP
$dLD
0hT	0lT	0pT	0tT	<xd	l$|D	$D	$TD0
<t	DP
<t	DP
0T	$TD`
<t	Dx
< t	D x
0!T	!8"l	"l1$#LD#D
0$T	$0%T	%$&LD&`
$'LD(
$(D!'$)LD)P
$*LD*
0+T	+0,T	,0-T	-0.T	.$/LD/D
00T	001T	102T	2``````````
`
``
``````````````````` `!`"`#`$`%`&`'`'`)`*`+`,`-`.`/`0`1`2`<<ppHp0h4Tt$`$hD88 Ll4X$Hl DhL<l,Pt@| Dt4X<lx0\D
$ LD4
$$LD\
 H0T4$LD
$ D!$$LDT
$(D!$,LD
$0D!$4LD
$8D!$<LD	
$	@D!$
DLD4
$HD!
$LLD
4
$
PD!$TLD\
<Xl	D
<\d	$`LDP
$dLD
0hT	0lT	0pT	0tT	$xTDH
<|t	D
<t	D
0T	$TD$

<t	D
 

<t	D
 

0T	
$TD`

< t	D 8P
<!t	D!8P
0"T	"8$#TD#`
<$t	D$x
<%t	D%x
0&T	&$'TD' 	
<(t	D(	

<)t	D)	

0*T	*	<+t	D+8
<,d	,<-d	-8.l	.l1X/	T/18
$0LD0D
01T	102T	2H3	D3 8
$4LD4P
$5LD5
06T	607T	708T	809T	9$:LD:D
0;T	;0<T	<``````````
`
````````````````````` `!`"`#`$`%`&`'`(`)`*`+`,`-`.`/`0`1`2`3`4`5`6`7`8`9`:`;`<`<<pp$$88Hp0h4l	x

		$dd	`		
4
d$h Ll4X$Hl DhX<l8h4X$`,hL	0	`				 
P



x0\D
$ LD4
$$LD\
 H0T$LD
$ D!$$LDT
$(D!$,LD
$0D!$4LD\
<8l	D
<<d	<	@d		<
Dd	
$HLDP
$LLD
0
PT	
0TT	0XT	0\T	$`TD`
<dt	Dx
<ht	Dx
0lT	$pTD 	
<tt	D	

<xt	D	

0|T		$TD`

<t	D8P
<t	D8P
0T	88l	l1$LD\
$LD\
$ LD P
$!LD!
0"T	"0#T	#0$T	$0%T	%`````````	`
```
``````````````````` `!`"`#`$`%`<<ppHp0h4`		
4
	$dd	| Ll$Hl8t4dT \(X Px0\D
$ LD4
$$LD\
 H0T$LD
$ D!$$LD
$(D!$,LD
$0D!$4LD
$8LD
$<LD
$	@LD	
$
DLDT
$HD!
0LT	0
PT	
0TT	0XT	0\T	0`T	0dT	0hT	$lLD\
<pl	D
<td	<xd	<|d	8l	l10T	0T	0T	0T	$LD
$LD
`````````	`
`
``
```````````````````44DD\t<< @XpHp,D$Hl Dh@p0TD|<`x0\D
$ LD4
$$LD\
 H0T$LD
$ D!$$LDT
$(D!$,LD
$0D!04T	08T	0<T	0	@T		0
DT	
0HT	0LT	0
PT	
$TLD\
<Xl	D
<\d	$`LD
$dLD
$hLD
$lLD
<pd	<td	8xl	l10|T	0T	$LD
`````````	`
```
``````````````<<ppP	d	|		@XHp\		,$Hl8h(X|<`4dx0\D
$ LD4
$$LD\
 H0TL$LD
$ D!$$LDT
$(D!$,LD
$0D!$4LD
$8D!$<LD	
$	@D!$
DLD
$HD!
$LLD
\
$
PD!$TLD
$XLD
0\T	
0`T	
0dT	0hT	$lLD\
<pl	D
<td	<xd	<|d	8l	l1``````````
`
```````````````<<pp







		|		P	d	Hp$Hl Dh@p$`x0\D
$ LD4
$$LD\
 H0T$LD
$ D!$$LDT
$(D!$,LD
$0D!$4LD
$8D!$<LD\
<	@l	D	
<
Dd	
8Hl	l1`````````	`
``<<pp`
`
Hp$Hl D`	D	8Tp
$ L	DH
$$LD
$(LD
$,LD
$0LD
$4LD
$8LD
$<LD
<	@l	D	
8
Dt	T
1(
$HLD
$LD!`````````	`
```$lpDD8\<x<t	D
<t	D
``$@<H	Dh
<t	Dh
``lHHP	D Pd|
0TT	$XD	$\D	$`D!$dLDP
``````,88Hx$L	D
$L	D
$D	 0\	D 
0d	`````<l$HlL0\	D
0d	D
0 d	D
$$D	$(TD\
0,d	D\
00d	D\
$4D	$8TD
0	<d	D	(L
0
@d	D
(L
$DD	($HLD
 
$
LD!`````````	`
````@pPh0`8\(P$TD\
0d	D\
0d	D\
$D	$TD
0d	D(L
0d	D(L
$D	(````````@pPh$T,x0\D
$ LD4
$$LD\
 H0T<t	D
$D	0$D	0$TD\
````P@<`x0\D
$ LD4
$$LD\
 H0T$D	0$D	0$TD\
$TD
````P@$Hl<<Lt	D
`<<t	D
`$LD
$D!$LD
$D!$LD
$D!<t	D
```````





$HlHh|	D
<ll	D	
0pd	D$

0td	D`

$xTD 
$|TD8
<l	D
$LD
````````$@ptH,h0T	0 T	p0$\	D
$(D	<,4	$0LD4
``````t(X 0`<d	 < d	<$t	 $(D	,4	$0LD4
``````8T(X <x$D!$ D!$$LDH
0(\	D
````Hhh$HlH$TDP 
$ TD!
``x !$x<t	D 
< t	D8 L d 
`` <xT	Dp!!L d !
$ LD
``h!T($X$@@ X!($$@@0!D!4444444@4@4	4@
4@44
4444444444 44d4:4e444ȯ4f4x 4g!4h"4i#4j$4%4,&4-'4.(4/)40*41+4,4@-4.4/404142434445464748494:4;4<4=4>4?4@@4A4B4C4D4E4F4XG4YH4I4J4K4L4M4N4O4P4Q4 R4!S4T4"U4#V4W4X4Y4Z4[4\4]4^4_4`4a4@@@@@@@@@	@
@@@
@@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@x"""""#<#d#####$<$h$$$$$ %H%x%%%&8&h&&&&,'\''''(@(`((((( )L)t))))*@*`*****$+H+p++++,D,l,,,,-<-\----.<.l....0/h////(0L0|0000181`11112D2(<Pdx,@Th|0DXl 4H\p$8L`t(<Pdx,@Th|0DXl)1
B}8f[΂@t~:FILEREGISTRYTYPELIBMUIMUIen-US00000000 0$0(0,0004080<0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x0|00000000000000000000000000000000011111111 1$1(1,1014181<1@1D1H1L1P1T1X1\1`1d1h1l1p1t1x1|11111111111111111111111111111111122222222 2$2(2,2024282<2@2D2H2L2P2T2X2\2`2d2h2l2p2t2x2|22222222222222222222222222222222233333333 3$3(3,3034383<3@3D3H3L3P3T3X3\3`3d3h3l3p3t3x3|33333333333333333333333333333333344444444 4$4(4,4044484<4@4D4H4L4P4T4X4\4`4d4h4l4p4t4x4|44444444444444444444444444444444455555555 5$5(5,5054585<5@5D5H5L5P5T5X5\5`5d5h5l5p5t5x5|55555555555555555555555555555555566666666 6$6(6,6064686<6@6D6H6L6P6T6X6\6`6d6h6l6p6t6x6|66666666666666666666666666666666677777777 7$7(7,7074787<7@7D7H7L7P7T7X7\7`7d7h7l7p7t7x7|77777777777777777777777777777777788888888 8$8(8,8084888<8@8D8H8L8P8T8X8\8`8d8h8l8p8t8x8|88888888888888888888888888888888899999999 9$9(9,9094989<9@9D9H9L9P9T9X9\9`9d9h9l9p9t9x9|999999999999999999999999999999999:::::::: :$:(:,:0:4:8:<:@:D:H:L:P:T:X:\:`:d:h:l:p:t:x:|:::::::::::::::::::::::::::::::::;;;;;;;; ;$;(;,;0;4;8;<;@;D;H;L;P;T;X;\;`;d;h;l;p;t;x;|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<< <$<(<,<0<4<8<<<@<D<H<L<P<T<X<\<`<d<h<l<p<t<x<|<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<======== =$=(=,=0=4=8=<=@=D=H=L=P=T=X=\=`=d=h=l=p=t=x=|=================================>>>>>>>> >$>(>,>0>4>8><>@>D>H>L>P>T>X>\>`>d>h>l>p>t>x>|>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>???????? ?$?(?,?0?4?8?<?@?D?H?L?P?T?X?\?`?d?h?l?p?t?x?|????????????????????????????????? p00000000 0$0(0,0004080<0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x0|00000000000000000000000000000000011111111 1$1(1,1014181<1@1D1H1L1P1T1X1\1`1d1h1l1p1t1x1|11111111111111111111111111111111122222222 2$2(2,2024282<2@2D2H2L2P2T2X2\2`2d2h2l2p2t2x2|22222222222222222222222222222222233333333 3$3(3,3034383<3@3D3H3L3P3T3X3\3`3d3h3l3p3t3x3|33333333333333333333333333333333344444444 4$4(4,4044484<4@4D4H4L4P4T4X4\4`4d4h4l4p4t4x4|44444444444444444444444444444444455555555 5$5(5,5054585<5@5D5H5L5P5T5X5\5`5d5h5l5p5t5x5|55555555555555555555555555555555566666666 6$6(6,6064686<6@6D6H6L6P6T6X6\6`6d6h6l6p6t6x6|666666666666666666666777777(7,747H7L7P7T7X7\7`7d7h7p7t7x7|7777777777777777777777777777777788888888 8$8(8,8084888<8@8D8H8L8P8T8X8\8`8d8h8l8p8t8x8|88888888888888888888888888888888899999999 9$9(9,9094989<9@9D9H9L9P9T9X9\9`9d9h9l9p9t9x9|999999999999999999999999999999999:::::::: :$:(:,:0:4:8:<:@:D:H:L:P:T:X:\:`:d:h:l:p:t:x:|:::::::::::::::::::::::::::::::::;;;;;;;; ;$;(;,;0;4;8;<;@;D;H;L;P;T;X;\;`;d;h;l;p;t;x;|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<@<L<X<d<<<<<<<<<<==== =(=0=8=@=H=P=X=`=d=h=l=p=t=x=|============ >,>8>D>`>l>x>>>>>>>>>? ?,?8?D?`?l???????0 0,0P0\000000011111,1014181<1D1L1d1h1t1x11111111111111111111$2(20282P22222222222222222q5w5{55555555555555555555566666 6%6*6/64696>6Q6V6[6`6e6j6o6t666666666666666666666667777777$7)7.73787A7F7K7P7U7Z7_7d7i7n7s7x7}7777777777778	8$8888p99R:::;;
<7<<<=======>:>>?"?=?J?V?p??
000J0o000001r11122J3o33/4m44444444	5c5555556667!7G77889991:R::::;;;;;&<7<a<<<<<)=@=N=\=j=x=>l>>>>?N?b?n?|???0001K1}1122a44444566Y6o66666667M7b777778 8j8z88888889J9P9W9^9m9999&:9:@:O::::;	;;O;f;;;;<;<f<<<<&=t=====>><>j>>>>>>???L?z???????x$030I0O0|000000999:#:F:f:::::;Z;v;<S<h<u<<<<<='=4===g======>->a>~>>>?/?h??????"080X0k000001J1u111112,2J2t222=3Z334\4444555&5?5_5k5555555K6Y66666677!7k7777788"8S8d88888	9S9999::1:y:::
;4;;;;;;<<3<K<\<k<u<}<<]=n=w=====>>">+>1>K>`>>>>>>>>>>?
??,?1?F?M?k???00:0000000
141Y111;222!34$4444445556[667L7e7778/8N8k888888U999:a::;/;b;;<*<><U<<<<===l>>/?0y00<111112&222223;3A3J3Q3]3c3l3s33334$4:4E444-5C55555}66667778!8R8a888999;;;;<h<u<<8=V=====u>>>*?O???70001112:2Z2|2222333333333444444444Y5m5555:6e6m66666,747G7{777
868=8}88889%969Q9}999999::K::::?<\<<<<<=:=E=~====>>J>U>>>>>?%?a?l?????60A0v0000000$1(1,1014181<1@1D1H1L1P1T1X1\1c1s111111222222223	3;3s3y3333333354444444455545p555566"6/666666688889
9+:Z:g::::;-;T;;;;;<W<b<m<<<<<<<<#=4=@=Z=l=|====(>Q>o>>???!?=?O?_?x???0Q0[0f0q0~0001G1V1[1a1h1111Z2233{333333334-444:4X44444555555555Z6a666677=7H7^777788)88889&9:::: ;O;`;;;;;;;<<'<4<?<W<d<o<y<<<<<<<=/=W=======
>D>k>y>>>>>>?@?p??? 000`0000#1P111
22M2U2222223C3Y3y33334E4445E5556(6@6S6}666667D7K7m77778	848:8A8L88889959999999:D:h:x:~::::;";7;O;s;;;;<!<C<R<g<<<<<<%=1=[=j=s===>>9>c>y>>>?E????0#070c0w00000000-11111	292i2222)3Y33334k44445I5y55536E6i666667)7S7e7777)8i888)9i999999:9:U:y::::::	;%;I;e;;;;;;;<5<Y<u<<<<<<=)=E=i======>>9>U>y>>>>??R?X?????@ 0 0K0a0n000151;1A1c1p1111152c2i2o222223+34333334C4U4y4445X5o5556646S6^6s666666737>7S7f777777818D8p8z8888999C9N9c9v99999:%:C:N:c:v::::;;:;S;^;s;;;;;%<6<Z<{<<<<<<==3=F========>&>n>>>>>>>?0?:?i?????P00r0000001A1N1g1o111112,2?2U2\2|2222333,3\33334L4|444	5W55556!6C6N6l666667D7f7m7~77777 8;8B8S8a8|88889"979H9Y9m99
:#:1:D:Z:a::::;	;;;1;\;;;;<L<|<<<=<=l===>>;>c>u>>>>9?y???`70~0000001{111111-282N2t222222<3N3z333334,4S4]4m4s444445575D5555556696l6t66666667727Z7777*8L8Z8m888888'9-999B9V9|999:<:l:::;);^;f;;;;;<+<S<e<<<<<	=I===	>I>>>?C?R?d??????p@0/0S0b0k0{00000011'1>1E1K111111111222T2e2v2|2222223!393U3y3333344444451585s55555555B6]6n6{66666667R7s777777788L8m88888
9!9(9c9w9}99999:-:::D:h::::::
;;$;H;j;;;;;;<<.<R<<<<<<<<=&=<=k=======,>\>>>>>#?5?[??????0C0U0{00000,1\11112L2|2223Y33333394y44495y555)6w66667,7;7D7777788s8~8888899;9l9t9999999:%:T:::::::;L;|;;;<%<K<s<<<<<=3=E=k=====)>i>>>>>??)?L?c?r????	0I0000G1111112&2=2]22222233-333=3K3u333 4*40464O4]4{444555515<5l5{5556(6N6U6f6666667'7>77777187899999:*:0:6:::::::::;.;H;_;i;;;<<I<R<<<<<<=+=:=M=d=k===>>?>U>b>{>>>>>&?0?]?f???)0Z0c0z00000000K1d1p1{111111111y2	33U3^3C44444667(7888`8~888899&9/9E9N9Z9d9q9~999999996:a:l:::i;t;;;;;;;;'<<<\<<<<
='=;=V=\====->G>[>v>|>
???=?f?z?????i0o0y0000001112%2Z2`2222222)3D3`3f33333333,4\444445<5i555	666m6s6y6666666:7@7F7i7y777778<8Z8f8888889a99999+:7:X:::::;(;=;P;q;|;;;;;;<%<+<4<W<z<<==+=====%>S>r>>>>>>?(?T?o??????00&040O0^0r0x0000011]1r1111111122222233-3S3d3o333334&4C4V4l4444444*5B5L5u555555
66L6]6g6666667<7M7W77777
8"8,8=8C8J8Q8|8888889,9Z9u9999999::-:3:::\::::::::*;E;O;`;f;m;t;;;;;
<%</<@<F<M<T<p<~<023*334\444445>5X555556f66667Z77778988889N9f999:R::::";:;;;;&<Z<r<<<=^======>W>e>>>>>?"?/?F???70H0Q0g0x000000A1M1Z1q111b2s2|22222233M3Y3f333334#4<4k4w444445$5A5Z555556666B6_6x66666G7i77788(8E8`8n888889:9T99999#:E:::::;!;<;J;f;;;;;;;<:<c<i<~<<<<<=9=?=T={=====>>*>Q>z>>>>>>%?>?R?Y?`?????`00%0,0k0000000031M1S1Z1a1\2v2|222213C333w445,555`6r6777!8L9i9::f000001&1C1f111112&2F2c222223#3F3f333334&4C4f444445&5F5c555556#6F6f666667&7C7f777778&8F8c888889#9F9f99999:&:C:f:::::;;;V<h<<<<,=L=u=====>s>~>>>>*?4?I???? E0R0^0p00-1M1v111112t22222"3,3A33333.4N4w444445u55555"6,6A66666.7N7w777778u88888"9,9A99999.:N:w:::::;u;;;;;"<,<A<<<<<.=N=w=====>u>>>>>"?,?A?????0.0N0w000001u11111"2,2A2222.363T3333384>4M4{444565H55556686Z666667,7B7n777778S9c9s9999N:\:i:|::;;2;8;J;P;;;;;;l<<=D>>>>>>???@x30e0s0000;112Q2W223%3+353E3X3q3z33333333364D4]4f444444455 595?5N5q5{5555556$6`6f6u66666666667<7X7{7777777788Q88888888888899"909>9C9L9Q9^9c9n9999999999999:+:>:C:S:X:h:m:}:::::::::::::::::::::;;*;A;X;o;;;;;<h<<<<<<=.=G========>>>>>>?C?_?f?m?v?????P00s0011111V2l2{2223!313i3333324~444444>5f55555"666A7G7^7h777778
8-868n88888$9*9K9V9999::C::::
;,;2;=;u;{;;;;-<3<m<{<<<<=+=1=B=P=V=u======>>9>p>v>>`L001224h778
90;:;W;;/<k<{<<<<<<\==>)>3>>-??????pi0000.112L2p2222L3T3k3z333344
5555556T6Z667787]7m77777
888&99999:-:Q:Z:m:::::::;);j;;;;;;;<<0<B<k<<<<<<==J=Q=X=a=h=m======U>>>>?>?V?u?????80"0.0I0T0d000000000%1*1D1U111111$2)2C2^2j2222222(303R3~33333414P4X4n44444425Z55556606R6\6666666777[7777778898K8`8~8888889D9I9i9|99999 :%:D:i:|:::::";H;M;g;;;;;;"<H<M<g<<<<<<<="=G=m=r=====>$>)>j>>>>>>>?>?^?c????0Y000000
11.1d111112232=2|2253v33334;4s4444445:5A5H5O5V5]5{5556.6?6R6a666667(7h7y777788+8U8\8888	999S99999:!:2:>:M:Y::::::=;W;f;|;;;;;;</<Y<j<<<<(=@=U=c=t====>1>c>p>>>>9?@?X?y???0Q00@11,292Q2b222222r3{3333334Y4{4444425G5k5{55556*6k666666707D7q7738>8888888899939=9999999B:a::::::
;';2;`;;<<=>=i>>>>]?d??0h2223*3333\44445M5Y5x55555
6666I6Z667:7~7777777(8888
99.989I9X999#:i:n:s:::;;n<<<<=="=?=F=P=`=w=========
>>>S>|>>!?+?3???0&0,0R0l0z000014181<1@1D1H1L1P1T1~12\3}33333444%4.4L4c4v44455>5X5e55555666;77Q8W8k888888W99:D:X::;;,<F<a<z<<<<<=F=h==>K>Z>k>t>|>>>>>>??'?N????0 0-060L0u0000,1n1112J2222$3a3333344<4\4b4~4446%7^777q88888888899&909z999W::::;;;;<(=G=====>\>>> ?'?5?L?S?]?e????????
0A0K0S0000Z111111222#2.2`2k2t22226333444?4R44444455E5S5}555556;6E6M666T7o7y7777778(808J88888899A99999:k:::::::;.;9;A;j;t;|;;;;<)<<<<<W=m====~>>>>>>??N?W?0000<1E111]2222	334455_555,66677*8<8r88888`999$:-:l:u:::::;Q;;;;;;;;
<<==!=<=t=.>`>g>>?00-1111K2h2|222w3}333333444J4T4445
5"5J5e55(6.6G6M6666667<7C7R7_7{777798B8W8]8r88:j;;;<<<<<====>>>>K?S???01122;2P2V2k222c3i3333333Q445555.6666&7M7i7777777*8E8R8\8888889E99:J::::;;;<<<<<>V>^>>>>??L?v??? 0001/1K1k111112
2-2T2j222222
3/3v333	44(4:4S4445565O5m5555566"6P666677^8p8I9e9\:v::::;O;U;;:<R<n<u<<<<=W===>>>>Z>a>z>>>1???T?e?x?~???000y0000001112(2a2l2~23,3>3Z3b3z33334#424Q444445555U6b66666*7v77M888999L:R:m::::;;;;;U=[===>>C??@h00(030A00<1f12222Z3u33K4i444445555576E7777>8899:::::<@<<b==>>>q?Pa000111122d2r22222222m3334T4_444455;5N5V555555556@6l6t6E778869{99999999:P:[:f:s:!;==?`1"123*5555555555566g666667~77778$818a8889K999991:e:|:::;;;;;M<d<k<<<<<^=f====>>E>]>t>>>>??'?V?c??ph0224344666777778 8;8f88@99:::,:=:J:[:{::;&;L;;;;;<<7<?<E<`<<<<<<=Z=g=u==>>>>>?+?Z?d?l??0f000000111111112D2S2u222222333344'4-4>4v44445*5/5=5N5|55556'646>6]6}666747I7f777777858L8c8p8z8888p999%:,:B:V:e:::::c;m;y;;;;;;;<4<B<Y<k<<<=0=M=^====>%>M>>>>K?c?t????0"070l00001	11-1<1K1d1{12n2223:3l333
4A4W4o4444=5N5\55555d6l6667A7L777778-8C8H8R8|88888889>9c9o99:::/:U:[:z::::;7;<;Y;^;;;;;E<c<?=W=p=}====4>w>>P?d????	001P1111*2a2k2u2|22222222$3D3y3333333	4N4l4y4444505F5r55555626\6z666666	77%7F7o7777778
8>8e8888899:9n99999*:9:k:::::
;;U;r;;;;;;<8<M<b<<<<<<#=L=`==>*>?>K>T>m>>>>?9?N?]?k?????0.0:0F0O0d0{0000000
11P1[1i111112"242c2y22222233'383D3O3[333334#4445 525n555566?6T66667)7;7G7P7l7x777777888'8f8U9^999::)::::K;V;;;;;;;;;;<1<?<H<j<<<-=`=n=v===
>G>O>Y>>>>>?>?K?V?g?,y000000011/1?1^1j1v1~11111:22233S3u3333334(4D4S4_44444445$5@55555656:6H6V6^6y666666667'777E7N7l7s777777788.858B8p8z88888889Z999999::.:7:L:h:::::$;/;N;j;o;};;;;;;
<_<v<<<<=0=D=n=======>>>>>?,?;?B?q???0!0+0P0b0p00000001H1T1`1p11111112o2222;4E4S4[4r4|444415<5m55556#6T666617r777777778
8!828D8u888888f9999:f:x:::;;P;;;;;;;/<^<p<<<<0=<=C=========>&>1>;>L>>>>>>?D?I?\?p?w???????000D0S0`0p000071O1V1b1p1x11111111<222222	3'3?3K3333464>4W45_56677H7Q7777
8<8d88888G9e9990:I:_:|:::::;J;[;a;n;z;;;;;0<Y<c<x<~<<<<<=&=6=@===>>(>3>i>w>>>>>>>
?D?Z?????R00001+191111	2x2}22333B3O3]3b34|4444R5i55566%6H6z66667777
848J8u888899*9Q9e999999:.:Q:V::::;.;:;I;i;;<?<K<{<<==n=====>+>:>_>m>>>>>>>??'?F?Z????? 0000011112I2U22222323;3I3Z3i3q33333344"444<4M4Y4l4z444444445(5K5T5b5s5555555566:6H6R6j6x666666647>7w7777778
88]8m888899-9>9K9w999992:E:0;X;j;p;~;;;;;;;7<a<p<<<<<<<<<=S=m====>+>9>>>>>>>8?C?a?o?}?p
22!2223/3D3Z3333355<6/7788888	9p9999:::::%;2;`;;;<<<<<<D====>R>> d0-11111	22-2>2v22'333337.7K777:8889]999.:w:;
;E;N;;;;
<%<<<>3>>?0,00W1I2222223:3p3y33334G4T4b4{4444444444D5M5k5|555556&606666666666666'7W7]7j77777-848:8J8Y8g8m8888899$939:9@99::::::;2;[;b;m;; <'<x<<<<<=F=a=j=>>>?E?\?c???@u001112.272g2m222223433333$4D45/5w555556]6i6666<788B8}899A99L:::;;;M<<<<='=W=i=w====>>#>>P000T1v11111102333344464=44455>5O5x55556-6}6667S7g777(828<8F8888	9"989H9Z9a9999999::(:=:K:U:m:v:::::::::+;1;^;|;;;0<_<}<<=@=Z======>G>j>>>`.000O111B2w22O3u33333334%4/4B4n4|4444444455#5O5]5e5555636O666666727T7]7j7|7777R8a8}88889S999	::):5:H:j:::::::;
;; ;<;i;;;<<:<D<N<<<<<<<<<<<<,=@=P======>>>=>]>j>q>w>>>>>>>>>??!?C?H?N?T?[??p0!0a00000"1n111*2Q2x2223?3|33333D4N4V4440555>6667k7u7}777777778"8_8f888889]9k9999,:9::::::;';:;;;;J<<<<=*=9=E======>U>>>>?F?v?}???
0!000000	1/1=1112v222223%3]3n3345*545V5o55556Q66667/7[7b777778:8W8c8}888888969H9]9k999:.;N;<<<(=>========@>R>>?8?B?_???30001.141?1Q1]1}111111	2R223K3I4|445&5k5y55	66696I66/7X77C8t888889999:A:l:::::
;;`<v<<<:===U>k>>>>>?N???0`000121N1d1111122D2`2	303E3d3&4544455K5t55c6767k7u777B8r888889&99::%;;;s;;;;<-<<<<V=m=======R>a>s>>>>#??S0000011B1w1110222233L3h3{3333044484<4@4D4H4L4P4T445,5K5t5x5|55555555u6667;7Q7778!8G8]888949C99999>:K:Q:e:q:::::;;2;O;y;;;;\<<=v>>>?t??0L11111222223"35333S4i4y444455+5N556)6@666	7 7U7778S8a889%929X9q9999999::@:T:h:w:::::\;g;;;; <*<S<]<<<<<<<
=U=}===>)>U>>>>>>>>??=?G?L?o? ?0I0N0g0m0}00000000101<1E1N1S1Z1_1r11111111262N2b22222-3b3r3334-474`4j44444445b5555566%6K6b6j6y666707:7c7m7777777$8+8P88889$9?9Q9m99999:#:: ;);Z;p;;;;;;;*</<5<;<@<R<p<<<<<<<!=====A>N>>>>>?[???????0'0L0S0x0000
11D1d1111122#2=2P2]2s222222
3-373M3d3p3334"4*48456"626666677 7y777778288888909R999::M:S:b:{::::;$;/;9;[;;M<S<\<c<z<<<<<</=M=^=====>5>X>>>>>>?;?Q????00I00000&1112223
3v333344144444a55556K6Y6666717\7j7778)8K8s88888X9{999999::k::::::;-;U;_;w;;;;<<6<<=!=3=P=====>&>;>N>g>>>>>>>?"??00&010Q0d0y00000031111D2R2393Q3Y3a3{333304t4444
5R555555
66/6<6n7|789"9-99:!:|:::::;;6;@;c;j;;;;<1<q<<<<=<=K=a=w===C>}>>$?6?m??X0000000011
1111%1+11171=1C1I1O1U1`1d1h1l1p1t1x1|11111111111111113333333344
4444%4+41474=4C4I4O4U4[4a4g4m4s4y4444444444444444444444444444455555555 5$5(5,5:56666666666666677777#7)7/757;7A7L7P7T7X7\7`7d7h7l7p7t7x7|7777777777777^8c8i8o8u8{88888888888888888888899999999999999::
::: :$:(:,:0:4:8:<:@:D:H:L:P:T:j:::::;;;;;#;);4;8;<;@;D;H;L;P;T;X;j;;;;;;	<<:<Y<<<<=0=^={====->P>[>a>i>p>w>>>>>>>>>>>>>????&?8?_?w??? 0/0[0g0z000000000)1B1I1O1W1]1c1q111111111122 2&23292?2K2Q2`2i2o2w2}222222233.383W3w3|33333344$4A4J4P4q4y444444445	55"5.5?5G5Z5f5n55556616U7m7778J8r88888"9C9t999999::::::::::::::::;;;;$;0;9;>;D;N;X;h;x;~;;;;;;;;;;;;;;;<<<<<(<3<8<=<C<M<W<g<p<~<<<<<<<<2=9=`=====[>g>{>>>?8?n???0@0
00=0Q0W01$131<1E1Z1o1~11111111222!2.2<2F2P2Z2d2n2x22222222222222333"3,363@3J3W3e3r3333333333334
44$424?4M4W4a4k4u44444N5T5Z5`5~555556*6O6j6666!7L7o777 8^88888G9b9}9999:4:W:z::::;9;l;;;<<<?<b<<<<<=&=A=\=w====>&>K>p>>>>4????@0U0p000191d11112;2h22223)3W3|3333"4P4u44445)5?5Z5u55555"6=6G6h666667J7m7777848W8888889)9\99999':1:A:Q:a:q::::::::
;;';H;R;b;r;;;;+<P<k<<<<<6=i======>3>N>b>f>k>>>>>>>>>>>?(?H?T?\???????P00@0P0\0d00000011141P1`1l1t111111,2<2H2h2t2|2222222333,303<3D3l333333334$4,484@4X4p4444444455(505T5d5p55555556,606L6P6\6|6666666667 7,7L7X7x77777778(848T8\8h8888888899$9,949@9`9h9t999999999:: :,:L:X:x::::::::;; ;(;\;l;x;;;;;;<<(<0<d<t<<<<<<<=$=0=8=l=|========>,><>H>P>p>>>>>>>>??0?L?\?h?p???????`00(000P0l0|000000110181@1H1P1l1|11111111112202l2|2222223303l3|333333333344D4T4`4h44444444455,545@5`5h5t55555555660686D6d6l6x66666667$707P7X7d7l777777778 8<8L8X8x8888888899 9(9H9d9t99999999::4:<:H:P:p::::::::; ;0;<;\;d;p;x;;;;;;;<H<\<l<|<<<<<<<<<(=0=8=D=L========>>>>(>0>t>>>>>>>>?,?8?X?t?x???????????????????p,00,00080<0T0X0`0d0l0p0x0|00000000000001111,101<1\1h1p11111111112242@2H2`2p22222222223(303<3\3h3p3333333333344<4H4P4h4x444444444555L5\5h5555555566$6(6D6H6d6h6t6|66666667 7,7L7X7x77777777770888@8L8T88888888899 9,9L9T9\9d9l9t9|999999999: :(:0:8:D:d:l:t:|::::::::;;;$;,;`;h;p;|;;;;;;<<<<(<H<P<X<`<l<<<<<<<<<=$=D=L=d=h=p=|==============>>>>,>0>P>`>>>>>>???$?,?4?<?P?X?`?h?|??????????? 0000 0$0,00080<0@000000 0$0(0,0004080D0H0L0P0T0X0\0h0l0p00000000000000000000001111111 1$1(1,1014181<1@1D1H1L1P1T1X1\1`1d1h1l1p1t1x1|111111111111111111122 2$2@2D2`2d22222222233 3$3@3D3`3d33333333344 4$4@4D4`4d44444444455 5$5@5D5`5d55555555556P6X6`6h6p6t6|6666666666666666666677(7<7d7|77777788(8<8P8d888888 949H9p99999999::,:D:L:p:::::::;;;;$;(;4;8;D;H;p;x;;;;;;;;;;;;;;;;;;<<<<< <(<,<0<<<L<\<l<|<<<<<<<==,=<=L=l========>>D>T>d>>>>>>>>>??,?0?8?<?@?D?H?L?h?l?p?????????????000<0@0P0T0\0d0h0p0x0|000000000000000001111,101@1D1T1X1h1l1|1111111111111111122222 2(20242<2D2H2P2X2\2d2l2p222222222222222222333 3$3,34383H3L3\3`3p3t3|33333333333333333444$4(484<4D4L4P4X4`4d4l4t4x44444444444444445555(5,545<5@5P5T5\5d5h5p5x5|5555555555555555556666$6,606@6D6L6T6X6h6l6|666666666787X7x774l000000 0$0(0,00080<0@0D0H0L0P0X0\0`0d0h0l0p0t0x0|0000000000000000000000

Hacked By AnonymousFox1.0, Coded By AnonymousFox