MZ@ !L!This program cannot be run in DOS mode. $]<<<"[<<ˏ="]<"Y<"X<"\<"E<"_<"Z`>>0?p??@@@@AAABPBB C`CCDF@GGGHH@IIIJKKLpMNO P@QQRS@TTUX@XpXXXY0Y`YYYZ@Z[_`0`````` aPaaaab@bpbb0cpccc0d`ddd0ee@f0g0h i@npnnno0o`ooo pppp0qqq0rprrr0spsss0ttu`uuvPw x`xx@yyyzzz{|}~`@Ѓ0` @І0` P@ЉPЊPЋ@Ќ  PpВ0ГPp@0pPЙЧ@p PP  @@``````p@p0 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@p@p@p@p@p@p@p@p@p@p@p@p@p@p  @!P"##P$%%&@''p(p) **P+P,--0.0//`0122@3345 66789999:0:P=====>@> ?@?p??BB0EE0FF@S@TUPV`Z`___``arpvwwy zz{ |0@p 0PP`@ `@P#EI`P Si llpmnyyy0zz0{p||}}~P~`@`` `00p @ @    !p"@# $$p%&@--.@.../p/`0p22236`KLL0MN0OO P@P`P0QPQpQQQR`SSST@WW`^^^^_`abpkkkoo`@@ @ p`Н`0p0PP`P `@ pP```p@ 0Pp 0@P`p ` @`p0 !"$&`'( ))*@++`,,0-0/1@12`79<>P>>pABB`C@D0H`HpHHHHHHHHHII I0I@IPI`IpIIIIIIIIIJJ@JpJJJJK K0K@KPK`KpKKKKKLL L0LpLiij j0jPjCPT$tztn=L9o<{Oyzstring too longinvalid string position>(Invalid parameter passed to C runtime function. FFF+ _,d* _,d* _,d` 7 ʩWLDAP32.dllnetutils.dllDSROLE.dlldfscli.dlllogoncli.dllSecur32.dllMPR.dllSHLWAPI.dllbad allocationCLSIDAppIDSMDBValForceRemoveNoRemoveDeleteComponent CategoriesFileTypeInterfaceHardwareMimeSAMSECURITYSYSTEMSoftwareTypeLib{'Mk~F}PjItH D% OqlnF^DAH[M̌FsM; $^q}J. 8LC ŅӘ}^ERw + H!SHx^m@kۦ5F1}dUZ O+_իv$E.}VE_h]M'nS<ٙ%DXfhjI|Cmj`@Y'I85UwsB s 킛jO0EF.lJ6mDXN6yŕJ BlFF?NF[VH2H%e&OKKm]OOV^aMDě^NtjL@?Bp?P==B@`@@p@P` p0 P  0 PP@p 0 0 @`` P@ `P pЧ@p P`p%P$#`p%P$'`p%P$*P`@%P$- `@%P$`0`@%P$@3`@%P$ 6`p%P$90@@ @   ` p ` p ` PЙ@`p PГPp@0pВ0pP@@ @  `pPp0 @ ` 0  P 0 P 0 z{|}~`@@`pnn@npno0o`ooso ppp0qqprrps0ttu`uuvPw x`xx@yyyzzpq0rr0ss Pp0  0 ` pp 0@  ` 0 @ 0g0h i0@  0 P @  @p @f`p0```_```` aPaaaab@bpbb0cpccc0d`ddd0ee @pP 0 p  0  [@`@pXXX@XXY`YY0YYZ@Zp @p   `@ p 0` ppp  ` P@`@0Ѓ0` І@ЉЊЋ@Ќ PP@@@ 0  0P @  p` P  P0p   pPp p ` @` P `@`P @ @0JKKLpMNO P@QQRS78 0p0 p@   @ P p`P P  P `  p`@@@0UT@@55`55 6P66667@7p78889P99P:;;<<=== >`>>0?p??@@@@AAABPBB C`CC@GGGDH@IIF9:P;;P<<HI@TpApApApApApApA%P$*p`  @!P"#%`  @!&@'p(`  @!p) *P+`  @!P,-0.`  @!0//1`  @!223`  @!456`  @!789=0:pApApApApApApA%P$#pApApApApApApA%P$'pApApApApApApA%P$-pApApApApApApA%P$`0pApApApApApApA%P$@3pApApApApApApA%P$ 6pApApApApApApA%P$9 `0@p 0P9@-yPVw`0&nUwp/p% !pm|/$l@Tpvp $p lp|p@Sr.@#i0{p"``P@p ` p pМ`pМP`pМP0PpМ`0НppМ`90p0p`@pМ90p0p`@@@pМММpp`@ М0P90p0p`@ppМММ90p0p`@pМММ90p0p`@pМ@ pМ @ @`p`90p0p`@pApApМММ90p0p`@P`pМММ  `pA0-0/p`,p,@+p+)p*(p )&p`'"p$ p!ppA0-pSqlDatabase::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 ???????????????????????????????????????????????? ???????  !"#??????  !"#?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????)p)*p)p)**)*\Required CategoriesCLSID\\Implemented Categories.tlbAPPIDModuleModule_RawREGISTRYHKCRHKCUHKLMHKUHKPDHKDDHKCCHKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSHKEY_PERFORMANCE_DATAHKEY_DYN_DATAHKEY_CURRENT_CONFIGLQXQdQpQxQQQQQQ R$RPRlRAPI-MS-Win-Core-LocalRegistry-L1-1-0.dllRegDeleteKeyExWadvapi32.dllRegDeleteKeyW]:HpNܡMZ>o-\QKC<7̮wYW Ki0@:>2H2H%e&?NF[VH ciB*yMPsCpO@qOS}PjItH DsM; $1}dUZ O+_իvٙ%DXf%UPEz@^DAH[M̌^q}J. @Y'OKKm]O(ADSo:=_h]M'nS<}^ERw + H! HmF٤M_/}`" bA4]CjL iteratorp+p)`*p)+*p)@++p) *p))p),p))p)*p)`+p)+p)+p)@*p)P***0+p)p*P+p))*p) +`)*p))vt=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 [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=%s Leave CAzClientContext::GetBusinessRuleString: return HRESULT value=0x%lx pbstrBusinessRuleString=NULL 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 too longP'P'P'P'P'P'P'P'H ciB*yMPsCpO@qOSCAzBizRuleContext ~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 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: 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. xpa@@@@ lPAzpGroupInit: 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    t @ 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))0Xdz 0Ihа4 L||||AzScopeGetProperty: 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 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] Failed to create log entry: StringCchVPrintfA failureError Message: WideCharToMultiByte failed AzManSQLProvider::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. SqlCreateObject receives NULL sqlPersistContext. 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. 3)6{O>`3)6{O>`s.O \Pz@5RSDSɔD CSazroles.pdb`CLLM7MsMMM-N_NNNN-ObOOOPQPyPPP,QuQQ RARiRRRR1SaSSSS+TkTTT U?UqUUUV9VvVVVW7WkWWWX;XoXXX Y?YsYYYZCZuZZ [G[[[[\G\y\\\-]i]]]^P^p^^^^_7_a___`9`a````%aPaaab?bqbbbb2cgcccdddCeeeUfffgegggg.hYhhhiGiyiiV5,Xy  $hi258Y^̡DxT|d ̡Td̡D Tdl̡D@TDdHL PT,X<\L`̡T8d<̡DTdİȰ̡D T,<L\ l$|(,̹߳hiY̹ThjY̹ih jY1̋UEVt%Wh~7j VEtWY_6EtVԶY^]3@t;t t33@;t t3̋V>t6[&f^̋US3VVSj^^^ ^^^^hPqu9]t[MQff;u+hjZY3ɋ QҼFYYuhHh@YY uӋ^[]̋VW39~t v谵Y~9~ t v 蟵Y~ 9~t v莵Y~9~t v}Y~~9>t6jdP>9~t vNY_^̋UE3VWt 3AЋOuu3F_^]̋VN,MVڴY^̋US3VW9uj_{u @}f93Qff;u+hjZq3ɋ Q4CYYu W֋(hjC3YYtFF FFF,uMsQ#t5at%Q3C tQ_^[]̋UQESVW3ΉUt'RjYtMu ؋utu3F_^[]̋SVW^;tS0jhPZ!tzVYxt pQs"jpjp jp3HPt.ujjjl3LPt3 A_^[̋UQE SVW3ɋمf9_9 tS0j[ShPt;u 3ҍNff;u+3ɉEh Q螸YYus33QfEPuSVu QwpPt2jjjlwLPt 3ҋ tSEYvu_^[]̋VW39~t0vXPjvjdQRf_^̋UjhLdP(SVWP3PD$8dF3ɋىL$\$D$ L$(L$,L$0D$$,L$@NQXω|$uWh[M_3^y]̋U(P3ʼnEeE܃eSVWM3MP$ ؉]\j_Fup$f;tft f33hj EEYYt 3GG3}}؅Ep MEhjMQhPuEup PȋE@#EEftp3Bf;Gt=vEMɃt;u HEhj ؉F-YYt ``3FG؉F39OtvEtuCSQE3ɋMv6P臻M NMvuߋM}ut u33fL3 7u?t7VWvYu}SVpj_MEP ؉EtAuQM@?t7WYu@3M_^3[ʪ]̋UQP3ʼnEEVWw GVpjhPu&lOWr u@G3t׋Ptŋtp֋k#M_3^]̋Vn,cNtVj~ tv jdP4f ^̋UP3ʼnEeESVWP}g,Et'q֍EP#uދ}w tPt u9<tSdt7]t,ejq֍EPuw lPJƋM_^3[訨]̋UVWjuv DPu8tv lP_^]̋UQQSVWj^D$tu @j ^J@eAEff;Eu+Mt4VF;v @DsЋt hhJO h|J@tWhJthJOu3Qff;u+3hJfDKdhJS3_^[]̋VWjFPv DPIu8tv lPY_^̋VWjFPv Du8t v l_^̋U$P3ʼnESVWj_W3ۉ^CPhPPEPSRQTfE KE KE KE KE K= wHu=EX=GM=%BQMQP4uC PEPhJju w#M_^3[ ]̋UUSVWj3J_ff;u+3h4U> Q迥YYuj^VhJh QuuhPKVW8y &W<tVWhKh93WwY_^[]̋UVqjujmvLPv^ut3]̋UQE SVWhDK3PuM3|tWuWuup P3uujX M3PV_^[]̋UQQS]VW3MU;] ǃtWHtIHtHusF< ul?M W3>mMtQpVu I 0Pa_M3^] ̋UQP3ʼnEEV@ Pq֋M3^Β]̋UQP3ʼnEEV@ Pq֋M3^莒]̋UQP3ʼnEEVu@ u P1֋M3^I] jN;ى]/eC=,pփM螙̋UQP3ʼnEESKu:VW=,p֋}tjp,_^M3[x]̋UuMPu ] jN<ى]/eC=,pփMK 螘̋UQP3ʼnEVuu@>M W3>MtQpVu I P_M3^x] ̋UQP3ʼnEEV@Pq֋M3^.]̋UQP3ʼnEEV@Pq֋M3^]̋UQP3ʼnEEVu@u P1֋M3^詏] j-O蛗ى]\/eC=,p֋or̋UQP3ʼnEESKu:VW=,p֋}tjp$_^M3[]̋UuMOu ] jbO謖ى]L/eC=,p֍K q̋UQP3ʼnEVuu@>M W3>MMtQpVu I OA_M3^] ̋UVEtVY^]̋UV,EtVY^][r̋UV5EtV萇Y^]̋UVEtV`Y^]D̋UVuEtV0Y^]̋UV4EtVY^]õl$փ̃l$6s̃l$̃l$ṽl$̃l$t̃l$x̃l$vṽl$s̃l$ւ̃l$ր̃l$̃l$r̃l$Fr̃l$Fw̃l$~̃l$r̃l$ṽl$̃l$s̃l$̃l$w̃l$ũl$r̃l$~̃l$Vṽl$q̃l$fq̃l$6̃l$&}̃l$q̃l$Fr̃l$̃l$p̃l$}̃l$ũl$ṽl$̃l$v|̃l$F̃l$fp̃l$õl$Fṽl$̃l$Vṽl$r̃l$̃l$ũl$Fz̃l$ỹl$p̃l$̃l${̃l$f̃l$̃l$F̃l$ñl$F~̃l${̃l$~̃l$Vũl$q̃l${̃l$ñl$m̃l$~̃l$t̃l$ỹl$fx̃l$õl${̃l$F̃l$~̃l$&~̃l$fỹl$vq̃l$m̃l$}̃l$Vz̃l$q̃l$p̃l$v{̃l$vỹl$Fz̃l$vm̃l$l̃l$Fr̃l$q̃l$õl$õl$̃l$z̃l$}̃l$6x̃l$Fp̃l$fl̃l$m̃l$vl̃l$fp̃l$õl$Fz̃l$Fx̃l$Fq̃l$p̃l$ñl$ñl$̃l$&m̃l$k̃l$vl̃l$Ṽl$6ñl$f|̃l$fz̃l$ỹl$p̋U ]̋UuuuuQ y]̋U} t u um ]̋UE u@3]̋U@]k̋UuuuuQ@]̋U} t u@u]̋U`]̋UuuuuQ`I]̋U} t u`u=]̋U칀]k̋UuuuuQ]̋U} t uu]̋UQP3ʼnEV39F t9Fuu4N t$u(1u$u uuu uQN,V,M3^]$̋U칠]{̋UP3ʼnESV39F t9Fuu^ tnFWtM}uGE ȉE2~OMx-k ^C;uPu30 t7M Oy܋^ u3uu N(SV(_M^3[ ]Nk LE3̋UuuuuQ]̋UQP3ʼnE tVQp^M3詁]̋U P3ʼnEESVWuSt:2ۄu4'tWh+Q0օtSp֋M_^3[1]teEe1Ph)Q3EPh)SEM;EMEZjOى]uWZ3j }yYȉEË]3ωMu)Es VpAEKVHC̋UQP3ʼnEW}t/O tVQp^g Otj gM3_]̃!aIj(O@M؋]MQSp օE3M؋u@,AyE3ɉ}j Z 3 PyYEEt MphhмQj Vu}܃MÃM3]u܅uuSpLָM؋׉U9yƉuxxEԋ3PRSNVx|}WWWEE3PEԋN00SV0x2uEẺ}9t 6Ẻ6MԉFFMԋQSpPփMuUMBE UE;QJEuЉASpL3迅h$P39O t 9Ot3$5,VM @ƅW tff9Gu[f9G uUhP5=PP/PuG PGPw؅/EQ70PNV؅tPq֋E0Qh0*PxPG ,tH3W|EtPqEtPq֋PqEtPq֋ tu w VV3̋UQP3ʼnEVW} u@139N u utȋF V tRp3ɋM_3^@{]̋U} t uum]̋UQP3ʼnEVW=,p֋M_3^z]̋U P3ʼnESVuW] u @M#taWp։;3a3Eu U t't3wSuuօt(}ux wu@ }뎸WM_^3[y]39u9Auyu y Fu@̋UQP3ʼnEVu@t3&} tMuEVup$u ֋M3^ey]̋UQP3ʼnE} VW=,tpp֋M3_3^y]̃yt QA̋VqxF^̋UQP3ĉ$SVW=3ۅt@9tt5sj֋ =x sjօx ;rL$ _^[3w]̋UP3ʼnESV3ۉX\W`!0'\Ph)jSh 'XdpdQj9]t>8\`P0uNV NV`/8\`WP0uNV N V XX9a9]$j@tPWhP@VP PtPVP PhPVP P|XLPhSP`PWHX<u[X`SSSSSSSPSSSVTtVTu 9`uPHaHhPhP PtPhP PhPhP P{TTPhSPW<ulÅtVTuUSSSSSSS`PSSSVDtVDu 9`uPHnHtVtW@\\\Ë؅tVq֋M_^3[ht]̋U8P3ʼnEEVu ( SW38SPQ>u ;u zfft)Ƀ.t \uPfuޅuVPy^P}+Af=v@SEP+PS PqPxPu_[@M3^r]̋UP3ʼnES3VWPPT؅Q3SS8SjPO$W$9VPVhPPd3fEf9t*3S \t /t:uf90uދ+ssc3f=PSVtPyVM_^3[q]t̋UQP3ʼnE 3SVW=;sFt5sjօxVsj֋ 7x: ;rx) x50t5֋M_^3[p]̋;uA;BuA;Bu A ;B u3@3̋V~t 6F^̋UQQP3ʼnE=ʉMu E u @ SVW=3t9st\uM;=rb{97u4h397usWh)s ֋h} tWu0Q֋?u u_^[M3o]̋UQQP3ʼnEW}u @'SV53ۅ9^tM~u $uhFE9u:h3ۍF9uPh)v v֋hEtWu 0Q֋؃?uuUWu C^[M3_n] ̋UQP3ʼnESVW=3ۅt1+OtQp֋w S_փ$9uы=7tv S֡;r่OM_^3[n]̋UQP3ʼnEVWht&=h=tw j֍$?u=7tv j֡;rߋM3_3^m] ̋UjujeZf]̋UjujuZF]̋UQP3ʼnESWt<{t!V7w֋wW)gYu^Mc3_[l]jh ̋UQP3ʼnESW_;t7 t qg O(tVQp^GP#M_3[sl]̋UV2{EtVjfY^]3@@̃H̋A̋UQP3ʼnES]u@?VW3q(9>uVh+jWh+x Qr֋_^M3[wk]̋UQP3ʼnEEVhQhQPq ֋M3^'k]̸@̋Ul P3ʼnESVu W3Dž2jY3󫍍ƅtvPPOvuQp֋q53SPVu 4;u zPtW;tjj"^fP0u @EfEE=3fPhQP$#Ph QP9}tjWh8QPPq zM_^3[h]k̋UuU uM]̋UEt @] 3@3̋UVEtV`bY^]̋V>t 6&Y~tvfYf^̋VW3G~+x3;}/4aYV0aGFY;|Ջ_3^jhW̋UVuW~WNW_^]̋VV2Fxt P@Nu^̋UE euw M3W] ̋UQu EuPx E]P̋UjhPdPQ(!iP3ʼnESVWPEdeE }E3fPtu P8% HH)-?J3ۍQff;u+ʉj]QE=vP ]x3ۉ]tmft8W\uj0Zf9u3fP ff9uȋ3Rj_;t 8?3PSSPjPjS7@1뙍3ۍQff;u+t @+‹jEWE=vP &Ë3ۋugWWSPa ~sj0YǙ+};|&9~@~F~ wW 70ӋǃjY+ȋj0YG;|WjS0@9 3ۍQff;u+MPPjS7@x3Md Y_^[M3'Z] ̋UE]̋UQQuMhEEP`a̋UEt$ tt "tPthWh ]h@̋U dP3ʼnEVW}f?=u/Wx'M PxWx3M_3^5Y]̋UV+6ut+|3@3^]̋U(P3ʼnES]VWP3hQS7<9tQVVVQQVP7PQuXPVVVPPVDž8ttSt M_^3[W]̋UQ3ɍEQQQQQQQPQQQuMt3 3;E؋]̋V>t 6&^̋UQP3ʼnESV3W9^uE9^u@hSthdSPF SShtSthSPF~tSSu6~tu6pM_^3[V]̅~ Ɂ̋U W}q3f;u FSVuj'Z]f;Q3ɉf;twj'[f;u Pf;u^f;u PPEM؉ +]SV;~}+f7fKu}3f;u]3f; ;3f7rE | ~O tJ tEPM؉ +]SV;s7~}+f7fKu}3f;uE ;s 3f3 ^[_]̋Ujh,QdPQd"L`P3ĉ$`"SVWP3P$x"dD$M }L$ 3ɋىL$4\$(L$,L$0$"ML$8WQ h(WD$h`(FWt$$tL$W}tl3j\ZD$SPSVjxȅ&3ufH2W9t 4S̋Uh P3ʼnESVu W3҉jY3Dž2󫍍XƅtvPP&vu狽Qp֋5hP3VuK=uz/PtW;tjj"^fPux@fEE=3fPhQP Ph QP9}tt3jt+Wh8QSPAW5M_^3[I]L̋UuU uM]̋U,P3ʼnESV3hWh}Ej@f؅Y @f9uufjZjYfuh|YhS&P f;uwhYhSPf;u GPhYjYf;u1w0hYhSO=f u>hYhSOQ|ƅf fuuhZhSRO 0tPVff#@fftf#fjY+t5Ht+tHtjY+thpZ!hLZh$ZhZ hYhYhSN u4f P}YePV;~WhZhPINPM3;jZ f;u_Dt7P0hZhPMchZhZhPMAjZf;u thZjZf;u DPhZhZhPpM xPL@ ttVt tVËM_^3[E]̋Vt 躀;t3^3@^̋UP3ʼnESڋEVW33f90MuQMuQVMEQVPVupzt0t!t= t@ 3)uj@MEPjZAKy Mt@; w8;r*N9tEKt Stcku*MA;r 5P֋t Heap9;tKtGEPEPVEP3uju.ptt t~t>HeapuV5օt;t 3#We_^[M3C]̋U P3ʼnES]UEVWu W33tMuQMuQVMEQVPVupzt0t!t= tN A7EPj@MEEPjZbIy  Mt@; w8;r*o7tEIt Stcku*MA;r 5P֋t HeapE@EEE MQMQVMQPujuwptt t]~]t>HeapuV5օtSǍe_^[M3A]9}t\}?Pj@ȉ t}EPvVhZWQhZWQi3#YE3PD̋USVW}ډMu W37tEuPSuHpt3pt(p= tp EuPEPjjj Vu0ȋEtXuT@HtJ90uFQff;u+MSj@ȉtES@pQP $3ҋWBy W3ҋ}t u<}t u_^[]̋V3F-tCHt8bt+-tHtHt 3.&^̅u3 uytWftt܃uyufy̋UQSV3΅tW\$D$Ph)S3W+5L$ D$L$Qh)P0L$WSxL$zD$L$Qh)P0L$WSWbL$iD$L$Qh)P0DL$WS_L$Q!D$L$Qh)P0L$WSOmL$D$L$Qh)P0L$WSML$+\$D$Ph)S3lWuUBL$ID$L$Qh)P0$L$WuS葍L$D$L$Qh)P0L$WuShZL$cD$L$Qh)P0L$WuS iaL$hD$L$Qh)P0CL$WuSL$1D$L$Qh)P0L$WuSL$D$L$Qh)P0L$WuS%L$D$L$Qh)P0ufL$WuSRu?uUM P*t(s"tt~ 3hVSh`VjSg^[]̋UQQeeSVWuًSh`jf}uWr'3@PhEU&uHM EPjugt(s)tt~ E3}tu>I}t huVSh`Vjff7VSh8aVjPf_^[]̋USVWuuWhajejSU>uAUEM Pj')t(s"tt~ 3SVWhaVje_^[]̋UQQeeSVWuًShajd}uWr'3@PhEUuuHM EPjut(s)tt~ E3}tuG}t huVSh bVjd7VShhbVjd_^[]̋USVWuuWhbjcjSUuAUEM Pjv't(s"tt~ 3SVWhbVjc_^[]̋U0P3ʼnE3Uf} SVWMEԋ؉EEEucu M𥥥ZuCEPVNEPjZ'yQEPM W؅tr~U3ȉMtM;wE;r7it&E'̉MtjXStckȉMtDMUB;r/5P֋ȉMujXHeapȉM3ЉE9F3u34uMj 1^f;ΉMMuuJMEDME܋Et:u܍FEff;EuƉu+EuEtuB4uf}ukE@E;Frt_}ujRU}uj}ujR3QM؅t"et jX;i 3WEtPEt8Heapu5P֋Ǎe_^[M3]h0 R&كc{jY33ɈK {$MK(h cjs`YY3ɋEPhQhHch<3fQQQQDžPPQ8PPu hVuhcj_YYPVPh@'jjPxiWhTP9ׅyhcjN_YYS(RhTP9ׅyhXdbhdPj_ t tPyV$̋UQP3ʼnEVWhej^YYO(tQp֋O$tQp֍O蔣M_3^]̋UQP3ʼnEVh(ejA^} YYu@,Ex(t@(u hP1֋@VhXeVjf^M3^ ]̋UQP3ʼnEVhej]} YYu@,Ex$t@$u hP1֋@VheVj]M3^z]̋S3VWjc {YK,C(nh$fj!]YYK,赢cL_^[̋VWhPfj\LYYtjVjwL>Vw,Ţ@踢O _^̋͡Uu E3j|fpLj]̋Uu E3jfpLj]̋Uu E3jfpLjL]̋Uu E3jfpLj9]̋Uu E3jd$gpLj]̋Uu E3jdPgpLj]̋Uu E3je|gpLj]̋Uu E3jegpLja]̋Uu E3jfgpLj-]̋Uu E3jfhpLj]̋Uu E3h4hpLj{]̋Uu E3h`hpLjO]̋Uu E3jhpLj]̋UE3VWu uhu pLj_^]̋UVWE3PEu hu pLjD_^](̋UEMVWu 3Qu hpLjh`Pj_^](̋UEMVWu 3Qu ipLh Sjj_^](̋U$VWPu Et$ 3ҋLihpLjD$P_^]̋U$VWPu Et$ 3ҋ|ihpLjND$P_^]̋U$VWPu Et$ 3ҋihpLjD$P_^]̋U$VWPu Et$ 3ҋihpLjD$P_^]̋UVEuWju 3ҹ jhpLjd_^]̋UVEuWju 3ҹD$P_^]̋UVEuWju 3ҹphpLj_^]̋UVEuWju 3ҹphpLj_^]̋UVEuWju 3ҹphpLj_^]̋UVEuWju 3ҹ(qhpLjT_^]̋Uu E3h`qpLj]̋Uu E3hqpLj]̋UE3VWuqu u pHjh zjv_^]̋UE3VWu uqu pHjhyj_^]̋VWh0rjmJLYYtjVjwL?,Vw,<@/O _^D̋UQSVW}WhTrjJC, ȉEGpDhtRuI֋<t<#t(tt t~7,%j{LVKLBVCP3MVhrVjI_^[]̋UEru jPLRpP<]̋UEru jPLRpP)]̋UEru jPLRpP]̋UEsu jPLRpP]̋UE4su jPLRpP|]̋UEXsu jPLRpPi]̋UE|su h PLRpP]̋UEsu h PLRpP]̋UEsu h!PLRpP]̋UEsu h!PLRpP]̋UEtu hPLRpP ]̋UE(tu hPLRpP]̋UQeVu uW03MfEQh#LtPDRpHx Mf^]̋UVWjWuVHNDu8f} ND Dstt~W_^]̋UEptu hPLRpP]̋UEtu hPLRpP]̋UEtu jPLRpPn]̋UEtVWu PLuu RpP_^]̋UEMVWQPLu tu RpP_^](̋U$VWPu Et$ uPLhRpP~D$P_^]̋U$VWPu Et$ E 3GH_Lt$jh- hGPwPM+mVh4Vj'_^[]̋Uu UljrHrPRL芽]̋Uu UjrHrPRLw]̋Uu UjrHrPRL*]̋Uu UćjrHrPRL]̋Uu U܇jrHrPRLʼ]̋Uu UjrHrPRL跽]̋Uu U$jrHrPRL]̋Uu U@hrHrPRL8]̋Uu U`hrHrPRL ]̋UUVWu uu rHrPRL__^]̋UUEVWPu u rHrPRL_^](̋USVWu hj7$ jS}HuW`WPOL贜uJM订uE 3GL_Pt$jhqhGTwTMoeVhVjE_^[]̋Uu U(jrLrTRPʵ]̋Uu UDjrLrTRP跶]̋Uu U`jrLrTRPj]̋Uu UtjrLrTRPW]̋Uu UjrLrTRP ]̋Uu UjrLrTRP]̋Uu UȌh-rLrTRP觴]̋Uu Uh-rLrTRP蔵]̋Uu Uh.rLrTRPG]̋Uu Uh.rLrTRP4]̋Uu U8h0rLrTRP]̋Uu U\h0rLrTRPԴ]̋Uu Uh1rLrTRP9]̋Uu Uh1rLrTRP ]̋U$VWPu Ut$ h,rLrTRP蜨D$P_^]̋U$VWPu Ut$ ؍h/rLrTRPWx0j Y}39}vE4xG;}r3Vh8Vj_^[]̋VWhj8HYYt.jVWPOLt jwHVw(V@VO_^V̋UQVWhjYG(YȉEVxCE 3S]GH_Lt$jh hGPwPMV[VhؒVj_^]̋Uu U jrHrPRLZ]̋Uu U(jrHrPRLG]̋Uu UDjrHrPRL]̋Uu UXjrHrPRL]̋Uu UljrHrPRL蚦]̋Uu UjrHrPRL臧]̋Uu UjrHrPRL]̋UUēVWu uu rHrPRL菛_^]̋UEMVWu PLQu ܓpHjh`PpP_^](̋UEMVWu PLQu pHh SjpP衡_^](̋U$VWPu Ut$ hrHrPRL蜚D$P_^]̋U$VWPu Ut$ <hrHrPRLEPh@TVEx2t.MU苁M܃0jHu 3M芅h`x53ҋMUtVp֋M3ҋEAM;H s"} EtVpWh WjEP*jkT>}3hCj]43YY9wLt/SSW\OXRt VwLSwL9wTt wTwTO`tGOdt;w,@O b̋UP3ʼnEhSVWtAMQM.&u M!&u60hjTuue3!]EjhuN$-9_Lt wL!_LWTOPQu ruu!]!]z=Er3  r%衋tj XątStckEu/5j ։EHeapEME=r0  r".tj X蓡܅t Stcku#5j ֋؅thHeapt]E3PPPPPEPuSjuuu w\wXwDwTwP|Mt+sCttu~5* u3EFLh jWkYYuN$Et8Heapu5Pօt;Heapu5ShEuWhhWji0WhWjTǍe_^[M3]̋UP3ʼnEhSVWt_u ]KEuIKu M%#}WV0hjXuVW3lj}ȉEEP}}}}܉}؉}ԉ}Љ}EPhPEPxPjhuF,ȉE؅9~Tt vT~TV\NX?Nu j Xf9Eu\uMإ؅[}Ej^uEPW؅.OuTWEزPM؅tttہEPjZ菙y u3ۋˉMtD;5wÍ4_^[M3ڋ]|̋UtSVuWVu h j}3؉D$$\$D$ uD$D$ D$0PL$Pjh}WXOTEu E3f9tHG\D$PG`D$T~)D$PQEPu D$`PwHQuD$ jW[s"tt|$ ~ہ |$ t$t*>tQff;D$$u+u6苯V腯tWD$0PL$PhhJ}@u@VShhSjmV$\$D$@P3t$(D$,D$(Pjj |$ u 3D$~e<tW4؅D$0PjXfD$0D$0PD$\$~3ۉ]9Yt AP4@*EE3@Ëe3ہ}K @]E+~̃yt APj$T‰EM33fUЉ]]uЋURuUPjh.u @ȅy6E9Et*MuЋURuPjh.u @ȅx-uM]QVxLׅx}t E먋uMtVq֊P~̋UP3ʼnESVWhܸjZuees0YYt!jW袱WC4c4eEURPqL֋E9}tM!}M0QhPTPxjjKU|%EPqփeufPqփeS0EPEPuju h@.s4AI#MtQpWhWj螷M3_^[@u] ̋UVWhܸj}~0YYt#SjSMSF4[f4jhjj)3_^]j( U|Mh\j萶YYj3h`u`9|]Ẻ]PEEPE̹PEVjp4P05t+EPMMQpouE]PhPT>Vx+EUM0jz#3ۅÍx#EPMVpօuu,`@h`WhȹWjѵ${̋USVWhjM7YYjh`eEPuE3ۋHMt{3e} tEPEjtu OdtEPEjtu6duuM MT_u!EthTj蒴 C;]rE}tPh`VhVj˴_^[]̋UP3ʼnESVWhܺj'u3EEEw0YYt!jSlSG4IG4DEMQh@TP0EPq3UPPOEg!u5W0EPEPuju h~w4)=t#VhVjѳM3_^[sq] ̋USVW3PPPPjuPh؅~&Sj@t3PPSVjuPh7_^[]̋UQVFP0EPvkffY^]j?Uxى]?C=C<eC =,p֋g*x̋UQP3ʼnEES Ku=VW=,p֋}tj_^M3[p]̋UuM@Yu ] jqUwى]<CH;eC=,p֋m,w̋UE3ɃAA]̋UQP3ʼnEESKu=VW=,p֋}tj_^M3[n]̋UuMYu ] jUvى]:C:eC=,p֋ň v̋UQP3ʼnEESKu:VW=,p֋}tjpL_^M3[m]̋UuMXu ] jUuى] :C9C9eC =,p֋zűUQP3ʼnEES Ku=VW=,p֋}tj_^M3[l]̋UuMXu ] jVtى]L8Cx7eC=,p֋ t̋UQP3ʼnEESKu=VW=,p֋}tj_^M3[k]̋UuMpXu ] j9Vsى]6CT6eC=,p֋B s̋UQP3ʼnEESKu=VW=,p֋}tj_^M3[j]̋UuM@Xu ] jvVrE(6eX=,pEM[Xq̋UE3ɃAA]̋UQP3ʼnEESKu:VW=,p֋}tjp(_^M3[i]̋UuMXu ] jvVqE5eX=,pEM;8p̋UuMWu Q] jvV qE5eX=,pEM_p̋UuMWu ] jvVpE5eX=,pEM;8őUuMWu Q] jvV pEx5eX=,pEM_őUuMPWu ] jvVoEL5eX=,pEM;8n̋UuM Wu Q] jvV oE 5eX=,pEM_n̋UuMVu ] jvVnE4eX=,pEM;8m̋UuMVu Q] jV nى]4C84C3eC =,pփMDam̋UQP3ʼnEES Ku:VW=,p֋}tjpPR_^M3[He]̋UuMVu Q] jV mى]x3eC=,pփMol̋UQP3ʼnEESKu:VW=,p֋}tjp4b_^M3[Xd]̋UuMPVu a] jVlى]@3eC=,pփMk̋UuM Vu ] ̋UVEtV]Y^]̋UVEtV]Y^]̋UVEtVP]Y^]̋UVTEtV ]Y^]̋UV$EtV\Y^]̋UVEtV\Y^]̋UVEtV\Y^]jWjueN6N2i̋UVEtV0\Y^]̋UVEtV\Y^]̋UV$EtV[Y^]̋UVtEtV[Y^]̋UVEtVp[Y^]̋UVEtV@[Y^]̋UVdEtV[Y^]̋UVEtVZY^]̋UVEtVZY^]̋UVDEtVZY^]̋UQQVu WG;0uF9EuAp7G@GgG@GE"M _VD$P1u ;uuE0_^] ̋UuYY]jT7WgM] EE{t-hVM_eEjPMehDEPfM q^ yt{Cxt U z;u}suwUB9Xux 9u>~B9utytJB9XtOHytJA]Q;Suruw>CBCPMA9XuPC9uPCBJCBUK{ ;utNyuAVFNUyxu AxtlAxuQ@ANFAFAMV@;yuAVFoUyuAxuxuAvB;x56xuAQ@AFAFMV@GKts SiWEYHtIHEM dj^V3YtHtHtf@̋USVuW~u,w?Nv VVYt_^[]̋UUVrBxuPBFA;PupB;u0pr^]̋UUV2FFxuPBFA;PupB;Pup0Vr^]jkWzdى]u @#eejT}UYEEtQE3uMÃMu܋]}ut-N x3tjM33cjWcى]u @#eejT}bTYEEtQmE3uMÃMu܋]}ut-Nx3tjM33`bjWcى]u @#eejT}SYEEtQ7E3uMxÃMu܋]}ut*N3x3tjpLM33ajX^bى]u @#eejX}RYEEtQE3uM*ÃMu܋]}ut-N x3tjM33`j;Xaى]u @#eejT}FRYEEtQE3uMÃMu܋]}ut-Nx3tjM33D`joX`ى]u @#eejT}QYEEtQE3uMÃMu܋]}ut-Nx3tjM33_jX?`ى]u @#eej0}PYEEtQiE3uMIÃMu܋]}ut*Nbx3tjp(M33^jX_ى]u @#eej8}*PYEEtQ6E3uMÃMu܋]}ut*Nx3tjp(M33+^j Y^ى]u @#eej8}xOYEEtQE3uMÃMu܋]}ut*Nx3tjp(M33y]j?Y)^ى]u @#eej8}NYEEtQE3uM_ÃMu܋]}ut*NLx3tjp(M33\jsYw]ى]u @#eej8}NYEEtQE3uMÃMu܋]}ut*Nx3tjp(M33\jY\ى]u @#eej<}bMYEEtQjE3uMÃMu܋]}ut*Nx3tjp(M33c[jY\ى]u @#eej8}LYEEtQIE3uMuÃMu܋]}ut*N6x3tjp(M33ZjZa[ى]u @#eej8}KYEEtQE3uM'ÃMu܋]}ut*Nx3tjp(M33YjCZZى]u @#eejh}LKYEEtQ E3uMÃMu܋]}ut*N x3tjpPM33MYj4uZY}?F@Ph\Ej PEP؉]ąuPq!eMȃeSOE΋EЍEPȋE9tAOuEËEЋ]ċ}ẼMQrփ'SE"ttQpփ'W,XjTZXڋ}̋E ]Eȅ;ut3EuIG@Ph\Ej PEPEuPqփ#eu;PMNEE3PF90t ֋Nu3M3utVxEMu5NEEPMoMEutVx׍EEPMDMEPMLEEMPEPB@MMȉEuM uuEtVpր}hhj腐Y3YGE ÃM}̋] Qru#"t tQpփ#WUj [VMu @3j(uEEHGY]܅tYYK,cLe :C9C9=,p֋PjVQى]c{ j3YK(C$ cLhtj踊YYK(LcHeL8Cx7=,p֋FPj9VPى]c{ j3YK(C$cLhj9YYK(cHe6CT6=,p֋Oj[Pى]c{j3YC,!EDBC@C@CC@c E(6=,p֋HOj[Oى]c{j3YC,!EBKC@C@CC@c E5=,p֋Nj[Oى]c{j3YC,!EAC@C@CC@c E5=,p֋JNj[Nى]c{j3YC,!EAMC@C@CC@c E5=,p֋Mj[Nى]c{j3YC,!EAC@C@CC@c Ex5=,p֋LMj[Mى]c{j3YC,!E @OChԪj@C@CC@c !c8YYEL5=,p֋Lj[Mى]c{j3YC,!E|AC@C@CC@c E 5=,p֋CPN=fFGQu3jj}G̃l$F̃l$f̃l$&̃l$6̃l${̃l$F̃l$f̃l$ẽl$g̃l$Vd̃l$VL̃l$6B̃l$&;̃l$V8̃l$f?̃l$<̃l$V8̃l$̃l$6̃l$ṽl$ƍ̃l$Vp̃l$ẽl$fZ̃l$J̃l$?̃l$F<̃l$v;̃l$C̃l$Ṽl$Ɠ̃l$&̃l$ṽl$ṽl$p̃l$c̃l$6c̃l$Fãl$Ãl$&6̃l$<̃l$6<̃l$&:̃l$9̃l$Ƽ̃l$̃l$t̃l$Vb̃l$6`̃l$6X̃l$Ãl$=̃l$鶼̃l$閑̃l$6̃l$&x̃l$ñl$̃l$vd̃l$6ãl$F_̃l$v<̃l$9̃l$f5̃l$v6̃l$v5̃l$̃l$f̃l$6̃l$鶦̃l$õl$ỹl$fb̃l$V9̃l$8̃l$@̃l$=̃l$<̃l$6<̃l$6̃l$醒̃l$馃̃l$Fr̃l$Fl̃l$`̃l$&`̃l$6^̃l$_̃l$9̃l$69̃l$&7̃l$6̃l$̃l$Ṽl$馹̃l$Ṽl$Ɛ̃l$馅̃l$q̃l$]̃l$Ṽl$:̃l$3̃l$鶻̃l$馹̃l$f̃l$馇̃l$m̃l$vk̃l$6\̃l$`̃l$3̃l$2̃l$;̃l$ṽl$F̃l$F̃l$鶣̃l$閌̃l$閆̃l$醂̃l$6m̃l$p̃l$T̃l$FT̃l$:̃l$9̃l$&9̃l$B̃l$̃l$ƒ̃l$֎̃l$ṽl$̃l$閃̃l$vm̃l$&m̃l$k̃l$ñl$[̃l$6[̃l$Z̃l$f@̃l$B̃l$Ãl$F=̃l$2̃l$~̃l$f]̃l$V\̃l$Z̃l$0̃l$6̃l$&:̃l$ṽl$鶌̃l$閊̃l$門̃l$h̃l$]̃l$&Z̃l$Ñl$8̃l$V4̃l$6B̃l$=̃l$V/̃l$.̃l$̃l$6̃l$v~̃l$h̃l$L̃l$?̃l$;̃l$&;̃l$4̃l$63̃l$&1̃l$閈̃l$~̃l$6õl$X̃l$VX̃l$=̃l$&@̃l$V?̃l$:̃l$/̃l$ṽl$6̃l$Z̃l$Ỹl$FX̃l$F\̃l$X̃l$6Q̃l$63̃l$V7̃l$馱̃l$̃l$6q̃l$W̃l$\̃l$1̃l$?̃l$&;̃l$,̃l$+̃l$/̃l$̃l$F̃l$ƈ̃l$Ṽl$Vl̃l$g̃l$[̃l$Ñl$69̃l$f8̃l$2̃l$v0̃l$f.̃l$7̃l$F1̃l$Ʈ̃l$醌̃l$F̃l$x̃l$ñl$Ũl$Ñl$+̃l$鶯̃l$閊̃l$V~̃l$g̃l$m̃l$6̃l$vỸl$Ṽl$7̃l$*̃l$̃l$ṽl$f̃l$vb̃l$FỸl$,̃l$2̃l$̃l$馲̃l$鶮̃l$f̃l$f̃l$b̃l$T̃l$VL̃l$4̃l$/̃l$3̃l$醬̃l$ỹl$R̃l$Ṽl$)̃l$̃l$}̃l$Fṽl$Ṽl$K̃l$5̃l$(̃l$f2̃l$̃l$̃l$鶾̃l$馭̃l$6ãl$0̃l$F'̃l$̃l$&̃l$V~̃l$f̃l$Vd̃l$R̃l$2̃l$:̃l$f8̃l$f3̃l$̃l$醍̃l$~̃l$Ũl$Ẽl$-̃l$(̃l$馪̃l$z̃l$6ũl$h̃l$T̃l$6T̃l$fS̃l$Ĩl$V0̃l$9̃l$/̃l$(̃l$%̃l$醫̃l$֫̃l$̃l$馁̃l$醆̃l$f̃l$t̃l$Vṽl$$̃l$8̃l$F-̃l$馫̃l$6̃l$z̃l$vh̃l$G̃l$F8̃l$5̃l$0̃l$/̃l$#̃l$6̃l$ỹl$fP̃l$B̃l$+̃l$%̃l$/̋U][̋UuuuuQ蹧]̋U} t uu譮]̋U]ۦ̋UuuuuQ9]̋U} t uu-]̋U][̋UuuuuQ蹦]̋U} t uu譭]̋U ]ۥ̋UuuuuQ 9]̋U} t u u-]̋U@][̋UuuuuQ@蹥]̋U} t u@u譬]̋U`]ۤ̋UuuuuQ`9]̋U} t u`u-]̋U칀][̋UuuuuQ蹤]̋U} t uu譫]̋U칠]ۣ̋UuuuuQ9]̋U} t uu-]̋U][̋UuuuuQ蹣]̋U} t uu譪]̋U]ۢ̋UuuuuQ9]̋U} t uu-]̋U][̋UuuuuQ蹢]̋U} t uu譩]̋U ]ۡ̋UuuuuQ 9]̋U} t u u-]̋U@][̋UuuuuQ@蹡]̋U} t u@u譨]̋U`]۠̋UuuuuQ`9]̋U} t u`u-]̋U칀][̋UuuuuQ蹠]̋U} t uu譧]̋U칠]۟̋UuuuuQ9]̋U} t uu-]̋U][̋UuuuuQ蹟]̋U} t uu警]̋U]۞̋UuuuuQ9]̋U} t uu-]̋U][̋UuuuuQ蹞]̋U} t uu譥]̋U ]۝̋UuuuuQ 9]̋U} t u u-]̋U@][̋UuuuuQ@蹝]̋U} t u@u譤]̋U`]ۜ̋UuuuuQ`9]̋U} t u`u-]̋U칀][̋UuuuuQ蹜]̋U} t uu譣]̋U칠]ۛ̋UuuuuQ9]̋U} t uu-]̋U][̋UuuuuQ蹛]̋U} t uu譢]̋U]ۚ̋UuuuuQ9]̋U} t uu-]̋U][̋UuuuuQ蹚]̋U} t uu譡]̋UuMu a] ̋UQP3ʼnEESKu:VW=,p֋}tjp財_^M3[]̋U SVuW} }tt'Exu@yP 33ɉT$@;Pt2;] s- D$x>L$CEL$P yċ}xt;] s3AV;r3Ǹ@_^[]̋UVu W3t&ESX HN;AtEu3G[_^]̋UMAu@ @A 3]jG\#Mu @3j0uEEZY]܅t>3{CC jCYC,EH@=,p־3 !Ëu]Mt2KEx3utjp֋u3ۋE0"̋U P3ʼnEVu W@tm&Mx\}S]WGKE9tuEC@VhP'C G C &yjp[M_3^]̋UV4EtVY^]̋VNzN^陗jy\l!EH@eX=,p֋*MIG ̋UQQP3ʼnEVu u@k&MSW}؅x8]O9t+CG@Vh)WG 0֋؅ttjp_[M3^z]̋UM u@ E@ 3]̋UP3ʼnESVrWtVx׉uj XfEtVx׍EPSEPtVq֋M_^3[]̋UQ}u@SVu }WBSW}N@OE;t~M`EN;Gu;Gt MP _[^] ̋UuMu A] j\rMu @3j0uEEY]܅t>3{CC jCYC,Eh@=,p־3 9&Ëu]Mt2KxEx3utjp֋u3ۋE̋U P3ʼnEVu W@tm&Mx\}S]WGKE9t5EC@VhP'C G C yjp[M_3^]̋UVEtVY^]jy\GEh@eX=,p֋MI"̋UQQP3ʼnEVu u@k&MSW}؅x8]O9t CG@Vh)WG 0֋؅ttjp_[M3^Z]̋UuMu a] j\Mu @3j0uEE2 Y]܅t>3{CC jCYC,E@=,p־3 )Ëu]Mt2K蘚Ex3utjp֋u3ۋE̋U P3ʼnEVu W@tm&Mx\}S]WGKE9tUEC@VhP'C G C yjp[M_3^]̋UVEtV Y^]jy\gE@eX=,p֋%MIB̋UQQP3ʼnEVu u@k&MSW}؅x8]O9t+CG@Vh)WG 0֋؅ttjp_[M3^z]̋UuMu 聖] j-]Mu @3j0uEER Y]܅t>3{CC jCYC,E@=,p־3 +Ëu]Mt2K踗Ex3utjp֋u3ۋE(̋U P3ʼnEVu W@tm&Mx\}S]WGKE9tuEC@VhP'C G C &yjp[M_3^]̋UVEtV Y^]jy\E@eX=,p֋EMIb̋UQQP3ʼnEVu u@k&MSW}؅x8]O9tK CG@Vh)WG 0֋؅ttjp_[M3^]̋UuM u 術] ji]Mu @3j0uEErY]܅t>3{CC jCYC,E@=,p־3 .Ëu]Mt2KؔEx3utjp֋u3ۋEH̋U P3ʼnEVu W@tm&Mx\}S]WGKE9t EC @VhP'C G C Fyjp[M_3^ ]̋UVEtVY^]jy\E@eX=,p֋eMI肊̋UQQP3ʼnEVu u@k&MSW}؅x8]O9tk CG@Vh)WG 0֋؅ttjp_[M3^ ]̋UuM@u ] j]Mu @3j0uEEY]܅t>3{CC jCYC,E@=,p־3 1Ëu]Mt2KEx3utjp֋u3ۋEh̋U P3ʼnEVu W@tm&Mx\}S]WGKE9tEC@@VhP'C G C fyjp[M_3^ ]̋UVEtVY^]jy\E@eX=,p֋腐MI袇!̋UQQP3ʼnEVu u@k&MSW}؅x8]O9tCG@Vh)WG 0֋؅ttjp_[M3^]̋UuM`u ] j]Mu @3j0uEEY]܅t>3{CC jCYC,EA=,p־3 4Ëu]Mt2KEx3utjp֋u3ۋE̋U P3ʼnEVu W@tm&Mx\}S]WGKE9tEC`@VhP'C G C 膌yjp[M_3^%]̋UVEtV Y^]jy\EAeX=,p֋襍MI„A̋UQQP3ʼnEVu u@k&MSW}؅x8]O9tCG@Vh)WG 0֋؅ttjp_[M3^]̋UuMu ] j^2Mu @3j0uEEY]܅t>3{CC jCYC,E(A=,p־3 y7Ëu]Mt2K8Ex3utjp֋u3ۋE ̋U P3ʼnEVu W@tm&Mx\}S]WGKE9tEC@VhP'C G C 覉yjp[M_3^E]̋UVEtV@Y^]jy\ E(AeX=,p֋ŊMIa ̋UQQP3ʼnEVu u@k&MSW}؅x8]O9tCG@Vh)WG 0֋؅ttjp_[M3^]̋UVHA=EtVY^]HA̋UVuHA^]̋U,P3ʼnEQMhpEP ̋UVuHA^]̋UQP3ʼnEEWtVRp^M3_]̋UVuW>u36P6>tt_^]h蝧̋UQP3ʼnESWu30VtWp֋ tQp։;^M_3[D][̋U}Vu &^]uuh̋Vyt3PPPPPd-Axuyt;Au Iyt^̋UyQr9EryrA;Ev2]̋UVW}Wt~rFFu +WV;ju qt)~rFFu WvPu v_^]̋UUVrBu+Ruh^]̋UVjF+u^]jP^cueN u3̋UV43EtVjY^]43̋UVu43^]̋UVCEtVY^]̃y$rAÍA̋VjjN 3&^%̋U,P3ʼnEQMUhЖEP̋UQS]VW9^sF} +;stGVNr ]]Mr ++PEPRPF+NjPG_^[]̋UVEP(3^](3%̋UV(3EtVyY^]̋U QMhEP̋UVu(3^]̋UM u Q!Y]3sjMhEP+jp^u}jY;v}#3ENj^u;s F+;w<eGPeȉE,EME@ePEGE丅@Ë}MuM] t~rFFSPGPQjjESF~UiMjjgjj?̋UVuWv9ws wV,} tsG;sPj uV3;_^]̋UE SVW}9GsE _+9]s];ujPE PjDjSHt8r~rNNE SPvQS>_^[] ̋UVjFjjuA^]̋UyEArI]̋U}Vt*~r$} FSvu SjPSVY[u F^]jjjP^}uVeF PO 3X̋U,P3ʼnEQMhDEP̋UVu43^]̋Q̋U3V;wrwE0 E^]̋UQSډMV3Wtvx$3Åt9tAHut+3ҋM3҅x=W j^+t&+Ë]+مt tAHOuuIz_^[]̋UE V3t=vWx5S]3WxEPuWSx;wu z_[ tM^]̋SVW3jY3^~hh^ 9YY_^4Ɖ^(^$^,^0^[j^}eO4tQpփg4h̼h9YYO~<̋UVu VhhE9E H,tx(t x0t13^]̋UW} u@SVWhh8u3ۃ ]]]9^,tF9^(tA9^0tj\PYYt'BVqAuS+PQR5^SPjh05hTWPq x.QAuS+PQP5PPjLtlSSWPjPSh~.QAuS+PQP5SPjh05PhhWP x.QAuS+PQP5PPPPPPhWP$x.QAuS+PQP5M_3[f]jh33uh`WE3CSWVV3ҹmWQQhlWj@Wj@hj@ 95htSVW WjYtqjYt`3A tOP+jYt(hh3@Ëe3Eu h̡V3t P5t Pn5 t PY5 t PD5t P595th`h595thl 5555^tPt 3@̋VW3t Pt Pt Pt Pt Pt Pt P_^̋UDP3ʼnES33V3WM܍}ૉMM؉MԫMȉMЉM3=}MÉMM̫MثU؍EPEPjYt ut#ÍMQ3%j9PjWÍMQ%j;PjWÍMQ%j :PjWÍMQ%j<PjWtlÍMQ%j9PjWtHÍMQ%j;PjWt$ۍEPj :SjWupAEẺEEĉEЉEԉEȉDžtb9}t u9}t u9}t u9}t u9}t u9}t u9}t uU؍EWP39}t utƋM_^3[]̋US] 3VWBW|SKds VSjZ3WSjZtPxFƃ@Px#ƃ@PPy P|(lƃh@u p ǃht S_^[]̋UQP3ʼnES]V0tKW`VPWpjV,0pփ0Wl_8Dt%tP ƃtP ƃtjPhtPP ƃht$tV|Y_4tP4M^3[ ]̋UEV3dtpHtbHtTHtFHt8Ht%Htuhj( jWcEEMD:M*MMM MȋEuj^^]̋UQESVWdH&HYHHt uhP}X d] uh`uh8E =hhV'YYMUЅMu u`d}X d(] uh`uh8E hhV 'YYMUЅwEu eu`RdC}X d] uh`uh8E hhVl&YYMUwЅEu!u uyPhj8& jWZu u`d}}X d] uh`uh8E 5hhV%YYMUЅEu u u=}tt Ph)u u`d}X du Qh] uh`uh8 E tmhhV$YYMUЅuLEuu u=}t Phiu uu `d3_^[]j h83EEE3@Ëeu|E̋U(SVWj3h`]M]]]]]]u9]thj#YYjW^ZU tRhj# 5UMShEPSSE3PS]u3ҍ}إ8D}𥥥uإzE tE tE hj IYYt#?F@!NIFF@f3uj^Wu&tVhj" (U ˃˅t{ E3tbM[h`_^[]̋SVWjh`ڋjj3ҋuӋth`_^[̋USVWjh`ڋjj3ҋ^u& tj ^ujjZth`_^[]̋U P3ʼnESVWj3!]h`u9]SS3ҋ!EߋX4BtEPjgjW֋jgPhtj jW^uxMtUQX!u4BtEPjhjW֋u7jhPhtj jW^uMt#UQ!ujW^}tutLh`M_^3[j]̋U SVWj3ۋh`] tj ^mSS3Eω]uRUEPuu09]t(E3PjguE3Pjhj2^th`_^[]̋SVWjh`ujW^(33PPˉuA/h`_^[̋USVWj`Su3jjuHtS_^[]̋UuMuu ]̋UuU uMF]̋USVj`S} thjgYYjW^~B9u!ty!tJB9X!tOHy!tJA]Q;Su!ruw>CBCPMA9XuPC9uPCBJ C B UK {   ;utNy uA VF NUy!x u Ax tlAx uQ@ A NF A F AMV@ y uA VF Uy!uAx ux uA vB;x56x uAQ@ A IF A F MV@ zG SEYHtIHEM ̋UUVrBx!uPBFA;PupB;u0pr^]̋UUV2FFx!uPBFA;PupB;Pup0Vr^]̋Uj$Yt&MVuWx M HMjHY_f@ ^]̋UQQVWOwGOwEEPEPj wO3@G G$_^]̋UVWu~ I#9F$w +_^]j$.3YtHtHtf@ ̋UEh5ᆳPYYiҧAi +y]̋UE VU ;FtPP HJNU YE^]̋WGG@g;OtV1QEY;wu^_̋Vy!t3PPPPPv-Ax!uy!t;Au Iy!t^̋UE Vu;tWy;t;uE Q_M^] j_uG6uu3ۋ O +3ۋU u]W+ЉU}U ?+E;su G+G;?+;sˉ]ȉMwuG+;suG+ MQ]U]uEuQOP4u ֈ]u MuQMQW]uuQu܋MGt_+tPdYMEOG GQuBm3SSGME+]uu;sY‹UEQPU EO+E]uu+ЍEQP6EGO+ȋE0;uQM+‰UQ؉EQы#MG;tU+Ӄ;uMU 1E;u ̋UQVuW} EuuQu_^] jL7_hM$eEPMhpEPN̋UM uPY]3sjMhEP̋UtVutJu^]̋UVu;tt^]̋UQQSVW3ىuu9u3jEPt{8jhj0jujj0t4EPQPPPPjVuVVtVuVup}t u}t u_^[]̋USV3W]M]]]u8EPSSEPj^Mu Ɓ`t輺M_^[]̋U4P3ĉD$0S] 33L$$VuW|$0L$\$ L$L$3|$ L$T$D$PD$0PjYu D$ yV03PPPju:pt.+V03PPPju pVSjZKd.DWSjZVSjZ WSjZLSt$jZD$ ˍp VPj_ί\$ jSjZ软hj(YYYt/L$ f FD$ D$ PQN 3@F F$3)ut'hj YYt ``3t^@HL$ ;rJ Pjt8P1ht$W^ x QW萼W Pty P|l3AhXt;u$΃2upuˈtƃƃ|$tT$D$jP3|$tt$td$ttPNjL$<_^[3}]̋tLBB̋USVu39t9$~=Y|tPt%WktWY_^[]̋UEVW}37- t;Ht-HHtuhjP jW4E"M M|"uj^_^]̋U,P3ʼnEESE3ۋE]؉]܉]VW}}- Htuh4j jW[X du uuh`uh8E hhSQYYu ] uUԍMjP؅\E u؍}𥥥}إu𥥥0E9]u`d X du QhE %Euh`uh8E hhVvYY9]u u uUԍMjP؅Mu0u u+EPu ؅tSuhjLM荇|u؍}𥥥}؋𥥥uu&E uEu ` dMM_^3[]̋UuM3uu |jP]̋UM3VuWVu|u jP-ucS38tuFjh`9u u 2h`t S6u[_^]̋USV3W}؉EEEE8uj2^U MPhtVhdj| 3CSh`EPj|U}tVu hh5]EtO2t$t <t:Phh %3ωt3t貱Mt h`_^[] ̋UuM3u u|PY]̋UuM3u j|P] ̋U SVW3ɉMMGltgQEPQhQQQh(huFEP<Pu)jÉEEPjVuu@uj^3F}t u}t EP_^[]̋USVE3PhS]h(h]<uNWj_E}P<}Pu.EPEPEPSuuu9}u 9]_}^[t u}t EP3]̋VW~t vY3N~~~vY~_^̋V~t vԸY3FFF ^jڷYtHtja_}3j www u Gj H$GPO uGMm3VV̋UE Vj^t=vWx7S]3WxEPuWSx;wu z3f{_[ tM3f^]̋UE;r3]̋VujW^j03VQ ^̋UQQP3ʼnESWujW[8O$ G3ۉEtVj0M։_^j0SWN M_3[]̋UP3ʼnESىUVW3]Cd\!}!}pl3@ƨVupC4E90;t3~`uhh3^6EYY;uEuhhx6YYrXulL؅yShj 3T@hh]YYVlZs9Xt9E}t%p3@Ëe}WhPjQ EEPEPrhxhYY@hhYY3 ̋UVhVE YYt2Ht(HtHtHt Hu0h!hPh8h$ hhVYY3^]̋U$P3ʼnESVWh`hJ}YYp,GDtG@39_@M G@URQ]p Ή]]օyG@.fEfuEuG@uuPPhj9]t u]9]t u]9]t uM3_^3[號]hhOYY3hh/YY3̋VtBBF@F@FF@3F FHFLFP^j_˦utBe~HtFPfHMNQ̋UQP3ʼnESWGLKutVj1^M_3[t]j h0觤}3uGPGH3@ËeE`H@E认j_ExH@t3XjS]eu MuSUj@`0uehj 譞YY]܉]t3u }slBVEEP8u3C3؉E܈EuM EEPMG]ЍEEPM4]؍EEPEPNuԋXMuEuu1}j0֋Mu }ĥEPI{3EËEE̋Ujh9`dP8SVWP3PD$HdD$83ɾ@L$|$L$L$$9HHGXjS\$H!|$PD$P2ҍMD$2PMtWS|$|$|$D$ Pjt$yVh(jz D$0PjWyVhpՍD$Pjt$yVh붍D$4PjWyVh뚋L$0D$49L$ 9D$D$Pt$y Vh^D$$PWy VhAD$+D$ j@^D$ vD$(Pt$yVhj D$,D$Pt$yVh8j|$ \$+\$ D$jYL$0CL$4D$$f9jQPD$TPjPD$0PD$dPugt$,D$p࿃47PEt$dH$PD$HPD$XPx!L$0|$4AL$0j;ˉ|$8YX\$t$t t$t,t$ RQt$$PVt$4hPj WD$HPD$XP_^[]4̋UVu @uWEH$t u +^]̋UE@H$tЋ]̋U SٰVW]{Ew~u.] v 3YEYt6v~t؋]ut0C;8uu WjEPnE@1MIuE 0v YYy u WuE0@_^[]̋UQQSVW]{w~u&]v 3YYy6v~t]uEP3ۋ0u;tMC19}uMEWVP_^[]̋UQS] EVWSP<u;wtv 3YYxuGEEM _^[]̋UVWyw~u%S] 3v YYyv6~t[E8_^]jL[i~E}EEr+hMreEPMۅhpEP蜏QPvWvF؋F;u XFF} t F;8u_F;xuXSxH ;u;HIyt5;xu W*G@G@@Gp,+Jyu@A@@x,;8u W*G@G@@Gp*W yaNEIA軎jbBj@YuEt)ME ]N FESFCFfFFQu&jj̋UVFlBPEtV蕀Y^]̋UVEtV`Y^]m̋USVuW~u$wv ?VYt_^[]̋VFpF@FfF^@jT7W謍M] EE{t-hVM躅eEjPMhDEPM b yt{Cxt U z;u}suwUB9Xux 9u>~B9utytJB9XtOHytJA]Q;Suruw>CBCPMA9XuPC9uPCBJCBUK{ ;utNyuAVF'NUyxu AxtlAxuQ@A'NFAFAMV@,'yuAVF`'UyuAxuxuAvB;x56xuAQ@A&FAFMV@&Gs Sb}EYHtIHEM Ɗ̋UQQVu WG;0u.9Eu)GE"M VD$P#u ;uuE0_^] ̋UQVFP0EPv|ffY^]̋UE3V1Bf;uf9t f;0t2jhPQHP3^]1̋UV;utuVx^]j YPfF'̋UVEtV|Y^]̋USVW3t$t$GD$@@DD$9u9u3 j D$P9wG3ɋ94L$ D$O,D$$uG|j0jXPhPhPjQL$LPwPj0jt$dj t$|`tt D$D$$uQO,uG|j0jhjhjjRjZRRQL$\RwRj0Rt$tj $ptTD$PQPPPPjVt$0t$DVVt/Vt$Vtt$Ct$;_FjW^p|$t t$|$t t$_^[]̋U SVW3uىuG@DE9u9u3Dj EPuMEVjEjj0jujj8{jY;tt tjW^EEuQVjjPQQj0QujjHt1EPQPPPPjVuuVVtVuVup}t u}t u_^[]̋U SVW3uىuG@DE9u9u3>j EP uJEjEj0jujj0xjY;tt tjW^EEuQjPQQj0Qujj@t1EPQPPPPjVuuVVtVuVup}t u}t u_^[]̋V49pu9AuPq96u^jY)̋UVu Py P|W3ƆWWWWW|3jNhT3҉ߪ3Ҫ4@FlhjT<|YYt >lj|ujX&Whkhkh6DPX3_^]̋UQP3ʼnESVW}3ۋGPD9ht-B@DutPhh込 (tP荩,t\tP tPtt PDt P.&t>󋏘 4F;r֨tO󋏤 蹭 設4葨F;r}t>󋏰 `4IF;r5ms|tj0փ|tP ƇM_^3[y]̋U\P3ʼnEESVEE WE3j4PEEEPu~!} uhj膺YYj2XXMQj8MQj PupVhjP EPjjPuptVhL!}u3VupVh|뗍EuPVSLtO]ptVhj跹 ;EPjuj^"EPWSLu p뻋E3ujupShjS u uE83tW}t utƋM_^3[9w]̋UdP3ĉD$`SVuD$0W}3j4SPt$,\$\$#\$(\$<}E \$D %$T3Fjjj jjj ^D$Pj8D$8Pj upVhHj, D$PD$P0\$ӍL$$0D$ 0quԋQff;u+ʋBD$ff;u+T$ EPSD$D$uj^(ht$P9$u||$D$PSVjWHp=%u}uj2^D$PS؅ujD$PSVjWHpVhjݶ m}T$L$$辪D$ 0Dj2蘪uj[5Phjq jW^tSCD$tP5ƋL$l_^[3et]I ̋UESVW-tIHtuhj׵ jW[pUMjh/؅uXM}荱*UMjj@؅u,E}荰uM}u襥J_^[]̋UQS]Vu WEVSu8uUV讖_^[]̋UST$3ɉT$}dVWL$v 6 }39O GtD$$Pho虦uc} t'|uD$D$ȉL$F;w sJT$멋T$ D$L$PD$Puu S u/D$u8D$uL$뾋EE EE3_^[]̋U(P3ʼnESVWUjMEQjjPtOWhj躳 }pzuދu3j_td;5w\N ;rOftCuFx܅t5Stckt(uSEPVjuuIpWhduF;r"5P֋؅tHeapߋuujhH+3E QjЉU؅ujh|jͲ sE0123E4567J E89ABECDEFf}3Et.fDffDfAF;r׋U؋E3>t;Heapu5S֋Ǎe_^[M3Ep]̋UP3ʼnESVW3ۋ]9 uLtHVhȉ]UfE;u-Bf;Au#EPVhup 9]t3M_^3[o]̋UQQSىUV3ClE9,uI9tAWjY3󫍋z_u pUtMVO,j2^^[]̋UDS3VWL$Cl|$8D$3L$ L$L$jY󫍃D$ 90ua9,0?tShh| 誰YY|$ |$tt$d$YtUD$tPV_^[]ËuhhQYY| 렃uaD$PD$Pj ZNt4u3kt$j\VYYt3ft$֋t$N,9#8t$u P뼋t$d$|$ t .Td$ t uL$8T$ R,PQD$(PQ9D$tt$Y3ɉL$3ɍ(9u$p3ɍD$D$,PQD$4L$8PQQQD$G0D$0whhlGL$$G G$G<uNE C;%G,uQwPwh8h 3ɉL$9N:V k_H{tNF}39T9M 8M8M}8KueL$@@DXu 9h`D$PWLPPjh`D$$D$u}D$CC{t1D$PuCuuuu PuA8D$uC{tNN FT$E L$AL$;N3_^[]p̋U0SVU3EWMuQމuЉuuuuuv}AUEMPEPw}!M􋁴E MQjY^uV؅uVSR^Ήuԃ 9MvlÉEPE􋀰0Ήu9Mv!E0E4duhMAM;MrߋEE@EMAM;MrEPEVVuStE u$p}#E0E0j_MEЉ9utu9utu9ut uAQYt9uv}4F;r}S贅_^[]̋U\P3ĉD$XE L$S]VWD$3Ej4D$(D$0VPt$ t$4\C @DD$tj2^VhjR D$3PuLBVjPLtVh\j|$ |$3ɋD$AuzVQj Ppu@D$PjPupVhVjjjj t$$BVhL$ Qj8L$0Qj PtR3|$DVj@PD$(jj PupVhqD$ Pj8D$0Pj 6upVhPhDD$0D$4P3PPPP6PupVhj跖 OhtD EtuY`SxMtupQS\t/EWhV# x|e](uSThjjWdktG;=w? ;r0:tGMddtStckdu@G;r,5P։dHeapddWjdKd U0`hl3EtTu,+ރ 3PPjE:uE@E;`sdɁE4t u3ҋt6uQp YYuGQ;r׋u]uz}3ɋ]9t!EPEPeuub8EuE39U EPEPE$QPPuu!8Eu3W]uwj^}t4:t$ Yff;Eu+u 2?]3ɉ72]3}܅t(h`}t Pl_^[]jWE i3fE8t]M̋f3҉UtnQff;uftfCf;Aufuދt:EMQDRỦE%uMt 9(E EDE83Ҋڈ];e3L@MtCU0p YYuMF;rҋu]3Ҁtu2`Sxtu AuS\)3ҋ9t&MEPEPu8Eu@39thMEPEPE$RU PP u8Et0]39uuPU E3҃LEM;t?ڈ];}EM̋U8S3ۉM]]ЉUVWu]Jff;u+UE̋uËME؃E91}Wu Eu~]] >^]}3ɉM9v{ Eԥ2t9Eԍp >x uȥM}AM;ru~0h|hSv EӋPEP}n]QM䋉1hhvtE!>u3ۋEF]}F>0h,huUE PEPju܍|PE}u6Mt E!>P0hh[ut >W0hh.u>u}u*}EF0h0ht 33ۋ}EG}u;E؋uM@E؃+W0hP0hhht}_^[]̋U@P3ʼnE3USVWjE؉}h`EċEȉEЉEԉE؉]EEEE܉E9] E!3jV!EE@@DE9]u UMjh@auMEPhDU@ ]tF><tu0h`xtu <h`\,U Mjj@E`MEPhU`V}荇PpjVE=r0 $r"%tj(X3<t Stcku#5j$֋tBHeapt7EϋUEPEfFNPjVuuMFjjW_Et+!Et!t!t>HeapuV5֍Mc}tMch`}tEPlǍe_^[M3/] ̋UP3ʼnE3USVWjM؋؉Eh`EEĉuԈEEЉ]EEEEE܉Eu3jSZFuЋpDu9]u UMjh^EPhDUt>u8tu+h`x8tu 9h`\uh,E9] M;euAE܍MQh)P0eEjp(M֋MMԅt t5t]vKu];Heapu5Sփ}tMah`}tEPlMǍD_^[M3-] MKEdGEMQh)P0dtEjp(M}wuuEM!]3`VEPpjVEwutk3ۉ]t?;5w7 ;r(!tF4܉]tStck]uE8tu3h`xM8tuL3h`\EЋMu},EǤvumE tE@lE̋E}ԁǘFMuE.u%E t@lE̋E썺ƋutX]E̅t@;r؉]GE]uMEЅt t6t]ȋvKu]uF8Heapu5P֋Et6t3 tEF;r8Heapu5Pփ}tMZh`}tEPlǍe_^[M3&]u`SEPpjSEEމutX]E̅t@;؉]tGEE܍ t}|;EMPjZ,}ΉM;=O ;G,̉MStckMUẺutSRQMQMQMPuuuE}tSuMWQMQMPuuuxEu%UEȋMPEPSWu`EM܋}xօZ}?G΍G;r(5P֋ȉMtHeapM3 j_.;!EMPjZ+ }։UtB;=w:O ;r-"t!Gw+ԉUtStckUu@UG;r,5P֋ЉUfHeapU3PX?t6?t1uk|0iEt@;ȋEB;}QVME8 M܅UEuU؃u-9rutE] p0Q3U؋]3E94tAEU Ep0Q2EU؋ MHEM܋EGU;sG̋U<3USVWjE؉uh`E؋E܉EĉEȉẺ]EEEj33P}EE؋@@DEM3f9RэMhuQkMEPhDUu]tM<>2tu0h`xtu ,h`\}u,}uEh`EPpjh`E3҃}Uu.EE@BMttj}u Eʃ}uEEEU9U  jR}ԅiU3jY}ԋPEuOM3҉W tf9tRэO hOMEPhoPTt%TO TWOM@}t!MEPhuaMuЋMTuF3AM܋E3@E;E tE@lE@l}Mu#tSO SWpNMpte}tMXSh`}tEPl_^[] j^̋USV3WMEVNtPEp3]V MRtX63E;uuFHHPj}jHjW% O0QyZWM33N@1v Vhhx`F9qu90uA^9XtjY)p3FVu_HSC.G u襥}EGEGG9Auy8}ul_^[]̋VWG0N0w Whh_uOtKG0P WL_^̋VWtWpƔ9qu9Hup|96uWl_^jY)̃3r4vQuKQxY̋UQQSVWu7؉]YYu3VPV7hh^'֋Ut V7h$GjS|YYt#PxV7hdh ^}UtV7hh k^hjjSt(VPV7hh0^hGrZPjutHw^7S+FuEF3@PSVh h]E 03j^tSdY_^[]̋USV3؉EWEEEF0P]EpE!8^ t(N(QXNt!^^ E3A$u9V}}38FH%@Eu E}t uet e3ۉ]MNEPu3PPv PMNEMWhIVt*MMtKV MjhIuU~ tJVEڍMPu #V tw]Ku$E3A8F(F PK}t uMMtiul_^[]Q'tKu륋^3ɋEAFFAF0pPh,h~[MF3z̋VW7N7wWhHhD[u9wt wdYW H_^̋UQSV3WBXPjE؅uD~l3AL׹FW}u t΋ t _^[]̋UUM 'L3t@] ̋UVWjhkhkh#G ?gPXM3ҋE BWLwPODGHtX;tuWTGT_^]̋U 3SVW8t~d|$OL$XL$ t tuPt'{L$ tt9PuL$ u tQuGLD$9GuӉT$T$3;`HJXu6 u-Pu샦ƆƆuP3_^[]̋UP3ʼnE‰MSVWp3Eu߅t9;5w1 ;r" tF܅t Stcku+F;r 5P֋؅tiHeapt\MC{ q1P/& EPuES PTtO;Heapu5S֋Ǎe_^[M3]̋UQQSVW33GPE TE9t؅EPjtiujVE Xt s 3ۉv։6džLSGLTGLG>F98tjY)0wG~t SG PP_^[]̋U P3ʼnESVWu~pt vp9fpF9q90AFHXu NIDBN~dt,LEr \Nu;uHuu.XEPSEuj[ujE03+EE3@Ëeu|E`}ԅtS jhX 3ujh`uE0E9u th jFYYjW_bEP3ҋ4uOuj3ҋu;uu3ҋO&EE3@Ëeu|Eut0h`  ̋UQP3ʼnEES] VWj#^;ItlItDIt4IHXdu h93ɄRXd@u h\(ċXdu h03989d=4;=vL=Xt ΃2jumjXt tuz΃2uBOt=t"붋X4Bt+SPRW֋u3M_^3[]PQhtjYDjW^u GltXduh939hu GltXd uhjCYY뉃puh8jCYYj2m39lŰU4P3ʼnEeeeSVWUى}uuXtMUEH^HjY+-HXt>4Btu uRS֋LuPhQBjW^2duhhQuh!`uh8hhVBYYM h2Eu`dXd u h ]uh!` uh8ThhVBYYu5uu09puh8jAYYj2ClujM l1Eu` d Xdu huh!`uh8hhV4AYYu uuU MjP.Mu}̥}襥u̥3E9uu` dX@ duh`uh8hhVp@YYu uuU MjP-u}̥(}襥u̥3E[9uu`@Gd@8X duQhj? uh`uh8hhV?eYYuuuX,U MjP,XMKEPhUuXu00YYuE}u ;pu0  X4 CtEPCpD֋KUu؅uj^ ChEtyxtd3u9p vZHXP LEP UO2EPUl uӍO1u܋EFu;p rEu}u؋C PPu ` 3Euu `d3M/u$ClClhh= M_^3[]̋UQSVW3ۉ]X#4y@t(!/t/3A t5Xt ;tuuGll!ltXt;uhtQX^##ދt.;t Hu3tp0tE#u]_^[]̋U SVWjh`U3ۍE}PËu0uӋjuu 3ҋuGth`_^[]̋UP3ĉD$SوT$VW\0'3ɋ<;uAubd$|$D$Pu8D$PD$Px$t$3ҋjBt$`\sd> 7?;uvHu|$uL$$_^[3]̋USV3WjEh`uEEE9uthj:YYjW_Wj3ҋ|8tuQE MUj4,'0MEPWUuXF@DXu3ɉUM98v:40jhROMUAM;8r3ɉM9v50jhuulMAM;r`uju@} u tE2ҋYu}ttH03tM*h`_^[]̋UMVWt&E ypVPVWЋD)*U y3jY+;u FrɃ_^]̋Uu2/MtE VW}𥥥_^u MUhE*]̋U(UEujWXSW}3ۅt8] tEt]VuMQVmt.} Eu8]tQ$׋Z+38]uƃEt E@EÉ]PS؉]uj[\}3t"MCuC1P8 tCu}إ{uإuM)#EtP#^_[] ̋SVڅt[WP6Vh0h6~!tutP#׋X*Oy39~u9>t 6c#>~_^[̋UVWj4jWEGE GEGE7GEGEG G0PhXh#6_^]̋USVڋыMW3X;u4;u,A;tA;XuXr_^[]̋UQSVWًUO4L)XWg3t9wuEP=uUOO9qv;t F;qr(ClClhxh5 _^[]̋UU Mk&]̋UP3ʼnEEVWpup򍕀PhI&M_3%'^]̋USVEWEPqt*EXu`t u3_^[]uGӋȉE&u݋uWX֋H MQȉE&tUMY}tE uGtxPu UE<MG(jjPs^UO('UM'EjbUًX3t 9uuPVE}uj^Vhj2 uuW Xu!E=ud=ukhLtYEuPEP ȀyEuhh}2YY&%j^Vh hu_2 8LËu}tW(̋U$P3ĉD$ SV3U 3ہt$W\$D$$D$T$ uXtuj^T$ uOlu oT$ M fD$j^uHj^t9qPtDjW몋@txPth<hn1UYYn-hhP1D$ YYUL$Qj(P-D$H dEL$j[u]FtV9XPuQE5PD$,dtjW^h\j0YY5t$(dt jW^hԋM d$t$(Ɖt$8thT$RUQtTt'9YPu"D$ыIDPu juSu"t$(L$D$AL$D$sM 뜋\$\$`;uhj0YY6 X4BtSt$W֋tL$juu WYVXu$GlGlhh/ XXt j^;GHDD$XuL$u D$T$(RT$ RSt$ t$)L$Puu t$ ~u9T$uEL$0mED$|$ u D$@ `GlGlhh.D$ L$$3ttQЋt7L$,_^[3_] ̋USVW3jh`EEE}thDj-YYjW^] }tatYu%Xtuˋ΃2EPEP+t5Shhj- Xtt qu3ҋjumu}u uuGE@txPu UMsUMjhtuUEPVStMh`_^[]̋U eSVWuOlXu  UEP=FtxPu UEFU<MF(jjP1u֋~u$GlGlhh+ Etlt ubL } ud} u@ht6EˋEEPEPu;stv {VEPuF `3_^[]̋USVW3jh`D$D$ D$$}t}thj-+YYjW^x] D$}PD$PtShj* Dt$3ҋjd+D$ @txPuUL$UL$jhXu]8`tUL$ D$PT$D$u;Ev3~T$ D$SPgugXu^;tuMG@DXuu3;jHPQ\tujSWtL$h`_^[]̋U S3VWEx Ӆt"H@;B;rE]PjYxwE;rnH;rgQStYUB GGJ Et:ȋB4G p0Q MUHCM;Z rȋ3_^[]̋UQQSW3}kC PWЅtBC BBK t+VC4B< }G};{ r^_[]̋VWwh&v F0Ph,h(֋6u_^̋USVWt{]ttWhXh'C tMxPuGXtu7t Hu/LuduhtӋ3jWX_^[]̋SVWٍw6Vh|hG'FHP~u>t#6Vhh'6&fO(_^[̋U SVW‰D$7;tH] \u6L$QMjOt0tT$ jjuu D$6;u3_^[] L$fj heXE E;wRtH,t8t+bt"NtNNt NuQ,yq(ie]U|Mt?Nt4NNt(tNtNtjWXU#tE3!EE3@Ëeu|E$̋UQQSVWuGlEFrkPj؅t\3ɉ{LA ׹!K CEp0Q E l C9AtjY)Y2_^[]̋VNF9qu90u VA^jY)̋UQVVE;tp eME;Fu ^]̋ ;sv2%+VI4 91r wHy2^ð^̋UQSVW3ɉMthEPQQjSu pzu.ujtMQuPjSupt?t7'3_^[]̋UQQSVڋ3҉EUW}RMQRjPtOPh0uju j^VhfPEPujut3ɍEQPQjuMuuPtPEPujuu6ujW^Vhj" ;t 3#?t 7'_^[]̋UQQS]V3MuWt~U tw3t3hjZ Q`ЉYYuhEj?Et@u3Ft9;75OIF;7~#hEWj!YYt 3Y3E_^[]̋ULP3ʼnESUEVWuhj!YYjWXiEuhuh}E3Rj^j_t7;w/ ;r!-tCt Stcku2C;r#5P֋HeapjSVtx}WjjVtejEPtU3ۍESVjPtASWEPt1SEEEEEEPSSEPSEPuS u pEtEt>HeapuV5֋Ǎe_^[M30]̋USW}3UMs]hXV3ɉM9EE EXtth4jYYjWX=hd닲hEPEPNE;F38tUMSt ;MUAM;Mm39]E EXt2th4jYYjWXSLEPEPEdEPEPE;F38tE MWtu?uUC;]et^h0jgYYjWX_[]̋US]3ɉUEMMMVW}uhjYYjW^~ UMQou=UEMPEPd}u!UEMSPWuu8Et}tu }tu tWYt_^[]̋U~B9utytJB9XtOHytJA]Q;Suruw>CBCPMA9XuPC9uPCBJCBUK{ ;utNyuAVF4NUyxu AxtlAxuQ@ADNFAFAMV@yuAVFUyuAxuxuAvB;x56xuAQ@AuFAFMV@GSEYHtIHEM !̋VFp~F@FfF^@̋UQSYVWsU N tv6~t;tM W }t]EM _^[]̋USVW}ًuv6W~Yt_^[]jL[~?E}EEr+hMeEPMhpEPQPvWv=F؋F;u XFF} t F;8u_F;xuXSxH ;u;HIyt5;xu WG@G@@GpJyu@A@@x,;8u WG@G@@Gp+W yaNEIA̋UUVrBxuPBFA;PupB;u0pr^]̋UUV2FFxuPBFA;PupB;Pup0Vr^]̋Vyt3PPPPP-Axuyt;Au Iyt^̋ztBxu‹Pzt;u RztxűUjJYtME M JMJB fB]̋UQQM3S] VW33!d!hXuu u APDqlߍKh#ډ}uҍ(#ЁRVjjUju\uVjjj3\PPPPjjv3PPPPjj׍Y3PPPPPj֋A3ɍ,]QQ SjjQ"3VVSjjV3ҋWj YYt Ƌ] Wj dYYt Ɖh9dujj^Vh|j$ dtrdtQVdhtLhtQ0h_^[]tgűUQVMvffVYY^]̋UVuEFdtdtQdhtzhtQ^h^]̋UQSVW}XuhhDh|=uDOlEU 3PV:uM`VVhDU Eu;G3U _lHDEPVtU EPVԽu똾O_^[]̋UEV3p $PnM|8ȋEɉjME t4M;Ɖ̋M(׋M먋M,M덋MMMPhjN jW^^]Immmnmm3n3nnn(n̋UTSVWjZ3ۉUj3]Y}]E]]-DiJHHtuhR jW[ MX4duV } }uh`uh8E Z hhV7YYu u uUMjP؅ Muu u|t9}t hYE u}ԥ}॥uԥ}u`d}Xdu h ] ]uh"`uh8E UhhV4YYu u uj@XUMjP؅9Eulu ug|t9Et hDZ}tIM MUԍMUtUȍMEtuhjЉEM3ɃMPEpuM}ȁ3M쥥u}॥}uȥ}PlHEuiE u`9t\9tT^؅tDupuE}ȥu𥥋u}॥}uȥ3}쫫lEME uE݁d~}X d] ]uh`uh8E 3hhV YYu u uUMjPd؅EUuut9E3HMEtJPUYtMAM;Mrj Eu4u u/|t9Et htu h ЉEM3ɃMPEpu}ȥu}॥}uȥ}Pl-EuZE uQ9tM9tEC؅t5upuE}ȥuu}॥}uȥEME u`|EӁdh}X d] ]uh`uh8E hhV YYu u uUQPM[؅MUX3ɃM9]unu ui|EttYhj YYtBut;jh@V u&E3P؅thPj@ YYLEu}ȥ}॥uȥ}vjh@0 u ƇaƇaGlGlhlh ME }u`d}X du QhE %Euh`uh8E GhhV$YYMU/؅ UMu uN99H99L9u 9h0jX;u-thu t{h0Pu_GlshjRYYj239t h89u9Hu9u9Lth~QhP]E #Ɖ|Euu ` dX du Qhu*hVEYYu?OlEu0)`uh8E hhVdEYYuuLuHE~A~(u79u/Vj@؅u5t u9]u`3ۍMM_^[]̋UQWM;u6 ,S]V39t vDSu MF;t r3^[_]̋UVu3|tQhj[ jWXUXu E +Pm^] ̋UVWW3諰u)tHt t jXE3_^]̋UQQMEPUuuUuMu ju]̋UQQMEPUXuuUuMu juN]̋U EUVuPu+E8uXtuUu Pu^]̋UQQMEPUuuUu Mju] ̋V%F@F@FF@ƃf^j3YtHtHtf@̋U MSW} 3ۋÉ]]ELXu QlUMuAlEAM@DEЍ|OhVҍ#ЋERPEPjSS^ESSPjSSBMS|ٍ#ȋEQPjSSESS 3PjSShj YY^t ËωLuj[Shj0 _[]̋UVuLtfLtQJL^]̋UEV3-t]HtAHt3HHtuh0j jWXME t64MMȋEɉM|M;Ɖuj^^]̋UVWW3¬u$HttjX,E3_^]̋UQQMEPUuuUuMu ju.]̋UQQMEPUauuUuMu jun]̋UQQMEPU!uuUu Muu']̋UQQMEPUuuUu MjuB] h,h83fS$WˍQff;u+APj@SuPjVVWEuyΉ9p Pj\Xt:3FfftKPuAA ;H j\Xr!=f uW uW@tPtPW3@ËeE3j hXEeuRQ EE E̋UP3ʼnESW*"3DžfffEfCVfE3SfEPMFuQff;u+ӍBff;u+BP3Puj^CuQMQ3S;t?t 73^jWXM_3[]̋UP3ʼnEVWQ3fEPP3Gpt`P uOP,Pt1PWWPWWWWPtP,P _M3^]́ |' ~ ~ ~ ?/wj XË̋U P3ʼnEeeVWMQRօuyEURPqօu^9Et!MtEuPq$օu8MGs&tt t~EtPq֋M_3^Ը]̋UQSVW3u@PSuW$Eu@Vu3u jX{3ftW_^[]̋U(P3ʼnESVWڋ339wu 9wu34EPVw tGPEP؉pƋM_^3[]jRٿM3ۉ]E]PhyjShzxnESP֋EURuP֋yB ;uPh V) Wh V WhL h x ME]]MtSp֋蝾̋UlP3ʼnESVW3ٍ3ɋQ3PHtmj\SYYuSh +FvSh j0 jWVS ]3f5PPjYCFujjPSDuj^jjjVjjjPDžPhDž@P@="u?y P|3t(tjQ3rPttd0Wjp<t 8M_^3[ϴ]̋UvU 6QMPj}t tu F$MuŋUtHFtAuU uvv6}t tu wF$u‹U}tu-;DPEMURPQ1֋EURPq ֋3ɉM9MEURQP0NVMUu5uEuUuMu p }t t uunEPq֋M܃eAM;MwEP3EEPq֋ueu3EtPMtQp֋MtQp֋Ut)}u}tj1P`Rp֋M_^3[u]̋UQP3ʼnEVWWQօuGM_3^+]̋U P3ʼnEeSVًM UWu1uSPjuPvuuUVu3MtQpj<P`sp֋M_^3[~]̋VW3VVjVjh@ww lu pPG t_^̋UP3ʼnES3ۉVWэrff;u+j\_f99uf9yt-fy:t3cq3QfV9r- ;r!?t蕣܅t Stcku*V5֋؅Heap3Qft3ҍOff;u+BWPYYt+3ҍOff;u+}P`pH֋t-uWQW3f xj_t ;Heapu5SjWX_^[M3]̋UE8s`E 3]j,2ceeURQ֋EPh0 MEBEuudEMQVP8׋x6f}u/EPjjEPEPxE;hw 3 tVEPMEtPq֋s̋UjhgcdPP3ĉ$xSVWP3P$dT$E3ۉD$$ED$(D$,P3P$D$ D$D$xPhVu<pH:1. v {UL$tu4uF PW؅jY3EL$tVCC QPCC{ ShyjjhzWP֋y9E1E t5hD$3Fd$D$@P6D$PD$DPTWPD$t$t$Vh WPvL$ QL$ Q0PօtsL$!|$Q|$tt$WhhhD }Whhh"|$Zt$KC KT$,F)K T$ t$,RP֋j$ u D$PPWs tD$dCD$hCpE D$t t$FC+UKouC"Ct$3Uu uJ9D$t CFCFD$$3ۋD$(tЍL$t3|$t D$Pt tQpSjD$tPD$,P"$d Y_^[$x3i]̋U$P3ʼnEES]VWj3ESh  f;:tˍQff;u+j_M ˍQff;u+M ;ˍQff;u+ʋBff;u+ HU ;rbˍQff;u+ H t63Qff;u+MDtStckӍJff;u+ыAff;u+U M ;r@3Qff;u5+MP֋Heapˉ3FQff;u+MPFSP  WPPV0tF9vj{_t>HeapuV5֋Ǎ_^[M3贒]t3ҍuuu j{_̋UU M]̋UQSVuUW}3ۋΉu*9]u8^t NSSSu vNu ^_^[] ̋UQP3ʼnEVW}PqWM_3^跑]̋UP3ʼnEE eSU3ۋU!VMMWQRp Ή]֋E3ɉM~}EURQP0NVuqUEMP+]uYSuYEYt,Pq!}S譿M3A]M;M| M eE 8u3MtQpօtS_M_^3[萐]̋UPP3ʼnEeESVWP}EPEPVEu hEu 7MQPWD֋؅uh@h UĹ`؅uzuău𥥥@΋}W֋؅uO7EPu싶W֋؅u EM!]uԃuu襥@uEtPMtQp֍EPEPEPM_^3[]̋U(P3ʼnES3UV؉EWEEEPuM܉]RMQff;u+ʋUrff;u+֍y ?Pjuu uuhlWVVhhM܍E P]MQSp ֋9EE3MQPSNVuzEURPq,֋u]EWuPqP֋u@EPq֋E}Pq֋E@}E;Ep3u}t EPtVMtQp֋MtQpօtSp֋M_^3[]̋UP3ʼnESVW3R}EEE؅u 7EPSW֋EURPq ֋3ɉM9M~~EURQP0NVuxEURPqh֋u[uuYYEPqu!}M!}AM;M|uhh 3MtQp֋MtQpօtS}t uM_^3[h]MjuQpP֋űUP3ʼnEeSVWuU3Et-7MQPW֋uIu ؅u3ESPql֋uMWuQpT֋MtQp֋EtPtSM_^3[g]̋UP3ʼnESVWu3ME}؉EE7MQPW֋EURPq ֋}~ WEMQ3Q0PNVh uU YYu5tʍqff;u+uU3QuRpPAR؅u1ESPqlu UuMu3MtQp֋MtQp֋EtPtSM_^3[辈]̋UTP3ʼnEE S]V3EċEMM]ủuuuȉuW+uHHHtHHt WEEEPEP`uQp֋39uP}EtEPsEEPCPEPtuċUM UċM9Etu!}}tEPeF;u`p+EPu`RQp ֋t!sptȃtÅ~bWE0Eh jPEP$EPu`RQp ֋uuuċMnu3}t`űpLփ}t u}t EPM_^3[y]̋UP3ʼnESVW3ۋ!]!]R]Euc7MQPW֋uUEPu๨ EP`jup S֋t6ttUEPu๜ u uWhh}tqMt UjQRpP֋U]ЋB-`up ֋MP;u }`Sp֩u EMQu0P֋E܍MQuԋ0PNTVTuuhh9}t EP!}EP`Sp PAuM u!$`Spօy#uUh ujj}`Sp֩@t!UWh ujjkEEЋtK{tE`upօC tuUsMus3[u\{uEЋtD<`upօC t3UuMssuu {u3M؅tQp֋EtP}t1Mt*;Mt%Qpuh0h MtQp֋MԅtQpփ}t EP}tuM_^3[]̋UjhcdPxP3ĉD$pSVWP3P$dE 3ۋ}D$P`|$$\$(p֋\$D$t 0d$ D$ P3rJtWhLh u )|$ du d$p`3L$VVVQЉt$,ˉt$G7tWh렋UD$ M PrMtWh낍D$PVVt$t$,jVst PxYt$sYYt|$tt$d$YtV||$ tdt$ pLօt WhU 3PPPD$Pt6tWhPh D }t>jCPt$s tPxYWt$h^3@ldu pօu3kD$0 t$$Sut$ u tWt$hh 蕭h$4YYuF;ur"EPxYWuޅtWY_^[]̋UP3ʼnEdSVWpډM3!}S֋E !8E!8tHtCt>dSpX֋M 3tWYM_^3[h] Ehup W$jPWE|E j3YE3ۉMs2tu@u @3)u @t@Dk <t_DhjuEEWPxt!EM@EMxuhh 艩E uUMVhh X ̋UQEeVjjPjj?tVh h  3}tu^]̋U SVYEWPUA3҉MRRRPRhhhRqUSuU], uj^ tPxYuSEYYhuS؃ j EP3d ;hw E#SYuuEu΋UW}WhjEEjPu6 ȋ׍EPuQh "UWgȋ׍EPuQh h 踧 uWhX h 蠧  e}t uY_^[]̋UQQS]VWQSPjEh0Q3WhuȋӍEP3uQh h VVVVGPV5$3h@jww,u4PxYȋӍEPujQh@!h æ UjSju֋UȋӍEPuQh!h 茦 VwYY3t VwYYE_^[]̋UP3ĉD$SVWD$ 3ɋPQht$,L$ L$L$Q0t$ sYYt$ sD$ YYM k T$uuSuQL$$QPUD$PW}uEt@dt$pTքt&ut$SUD$P]|$tdjWt$pփd$t$sXT$$D$ YYM 5t$ |$ tt$ d$YD$ PjhjVst^t0PxUYD$PuWh8"h 蟤 |$ t t$ Y|$tdjWt$p֋L$$D$_^[3zb]Wh"Wh!̋USVWU3]uOff;u+aBȉE>5JMQff;u+ʋUBEff;u+}+UGEPVEUhuUMUWu}+CUhx"uUVhVVCPEV4 3ujWs,uPxdVu׋uuU؍EPuSh|"h ݢu EWpYYtEWpYYu艏_^[]̋U P3ʼnESV3!]3!]BWu}]U9] u UutWh"h 8] +huV\] EtcuupdSu pu֋t Wh#&3BUtq9U t} ufh|uu EujW_M/uE0dp<օtWSh@#h kd3Bu}=PtPjXP9u} t&uUjDE10VubU}B‰U@9u3dSpL֋EtP`YEtPYM_^3[^]Wh#h 謠 ̋U P3ʼnEE SWU4@3uQ؃ ujW_Y 3Qff;u+VMEPdpH֋M^uj_u3P!n SYM_3[$^]̋UP3ʼnESVW} U3ҋMuUOff;u+_PR}uj[Sh#h 蓟 u Ӌ賾EPdWupdu֋؅uLMu}u7}EU3VVVPF'؅tWVuVuuu}}t jutW͋tVËM_^3[\]̋U0P3ʼnEeƒeeSVuW3E]9} uU RuVuUȍEPjE 98utUC%MP?:C(E S,!}M>uUqq10uUȍEPtOEM@EȋE 9uEttt 9} 39] t7huP\ EVQh8$Qh#h 蜝 ?hpuP UEPjYh Eto9] }}Ћ0vtPuu EEUMuP}u7VUY{9] rt E 0dp@օj,SYYub9E#E{j;7YYuU MjuSO UȍEPLcQhd$+FPjEu}EVSV~E3Pf pE 0dp<֋]u EPEPuUȍEPuQh$*uuuUȍEPuQh$h s EtP`YtWYME3_^[gY]̋UP3ʼnESV3ۉM!]!]3W}E,l/`v(;Pv<0uPu؃ EHHHtjW^^3EYu E hduu EtIh0YYtEh0YYtjW^EuY9E0hp%3YEYu E!u3YEEPdWup(u ֋ut3pEuEt0t t;udWu pl֋EMuUuWu PGt'Vh$uh%h &tSYM_^3[*W]̋UP3ĉ$ES]VD$@E WD$03jCPD$pT$ D$qL$0P\$8]3˃ D$ D$3ۉD$ D$QD$ff;u+A#D$<PSD$H؉\$$uj^ED$8t$@jS\L$,PQt$@h|%t$XS3$|$3ɉL$t$,t$Ht$  w?ut$$t$Ht$  t؋L$8L$8T$hL$HQt$,MQL$dQ~9D$HoD$hPudut$uEPjEv t!PxVh'h EP3PPhPSvt"PxVSh`'h ԓuvYYtahPv؃ tL3Yt u9E ?u#?u?u ]eEPjv tPxVh'h #3tSY_}t uY^[]̋U$P3ʼnEEEE UM܉ESVuuW3ۋ0'h'Q3fEpYYU hWpEYY9PlfEDPlfEuh uhYjESPdM 1FrMEh'u܃pYY hVpYYujW[9]t}G;sm]PlfEFPlfEuh tVuhYtHjESPdM AE@MEDwG;rEE98sOjWXM_^3[9O] ̋UP3ʼnESVWEPdpփeuEu $t2ۋUjPEPju'tWh'`}\t%P%pPdցVpDQu uu֋tWh(h 2 3dupL֋M_^3[)N] ̋UP3ʼnEdSVWp3uM3ۋΉU}]֋t tuw3thtct^utttuFUMPju EP]EMN EuwS+|3ۉ]G|}t tubHtUMdVhPjuu ut Vu hX(h ێtS{}M_^3[L] ̋UP3ʼnEdSVWpu3ۉUΉ}]9] ujW^t3hu u\؃ tڋ3Mvq}UEPEPu tVh(h uUuu1tS`YM_^3[K] ̋UP3ʼnEE hED3SV`@dW}PMp\QΉS΍Qff;u+IfQVhdl3PdFPVVj jT0~lt99v A8jA98t;Q<llPdPVVj jL0(l999v~A88um8QWp4l<ωllPdPjjj W808P8l99q9>vNff;u+uPWtSlVIqNQWtWu,Vhh@)H@40t@<ltQ<3ωl3,@Љ,H@9<`DlG3D9>$ltQ<3lu TP8(u LP8XtVhEMUً0Ƀ: u E@3BAFMUuE܃E܉U0s}=Vh$+h 3}tSm}t EPtWm}tumM_^3[>]̋UXP3ʼnEESVW3E}ډ}T}JEPudu Qp ֋tVh+h ? E+tcHtCt)HHtjWEuj tuj XPE98tp%3+,E0h Ej P裝}}3f97u9uuoE 39ujZhuWf9tN3Qff;u+q6P3PU I@uj^ W胞3ۋ}tulM_^3[P=]uP%tVh$hX+h ~̋U@P3ʼnE3U܃}SVW} ىẺEЉEEȉEEEug-tHt`tjW^ EPEPdu Sp֋t Vh$h+7}vEEPEPdWSp֋tVh$h0,h ~U3ۋu33ɉ]؉}Eąt"}̋tCFA;ruuȋ}]3ɅtEЋtCGA;r}]؋u6uԅt~38]E̋Etu}MQp7E܍4>u?EUuUBBME܍4EAEуMjM u!uCUu;U;]EЋ+ʉuEu}MQPEM܍4>u?EUuUBGEM܍4EAEуMjuTEP!uC;]s0UuPpVh,Vh,h | E܃<tGE38}t EP}t uM_^3[9]̋USډMV3WuG@90uQff;u+38EMQjZȉE+@yZuVȋ  uj^;}'u'UPZ uU ` Uh N_^[]̋U;rF6P3P}ugjXdup@փ3ȉEQff;uE+@4;r3ҋ3҅uh9]fh֋E֋0ɍEttE֋+SP u蜍}t u芍3M_^3[S-]̋UQI VWUVujW^>3Qff;u+SYPVMuj^ WӋ[_^]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$SV3E܈/Wuu‰EމuE/uEPVVhVVWtPxquWYYRh/PW؃ D Qff;u+A EPVE Uh UMhUMhx"3UMEPVEPhVuWtPxYuWEYYh/PW Et'PM$d5MuYE8uAh/uW t)W$dMWYjW^tSY}t uY}t uYEtPX_^[]̋USE/3ɉ]M‰EE/VWEPQQhQQStPxuSEYYt~h0PS؃ uj^vS$D0}S?YuM3tuuV tSEuWCYr3jW^tWY}t uY_^[]̋USVW3Et0EuPVVhVE|RSEEt PxOuSYYt1MtPS t7YM;D} wj^tWY}t uY_^[]̋U@P3ʼnEESVuE3u!EԍuW3M!}3!]܋MuЋu}Eؠ0EE0EE9EtjXE9]tEu9Qu EQP;tVh0h i} }ϋuE3҈EEPRRREE0PREPhRQv,tPxVWh81h h_uvYYtHh0Pv\؃ t0 1jȋEuj^0pQV6 3 tWUtS`Y}t uYM_^3[1&]̋UPP3ʼnEEUEEE̋ES$E0Vu وEEW3E܍EEVE}E0}E}uEԍEEȍEWPEEPuEĠ0slt5V}xEPj3suVWuh1h 2g(M_^3[B%]̋UQP3ʼnEdSVWpW֋ dWq֋ȃu"}u 3t-@*}u3 u}u3֋E#M_^3[$]̋SVًW3PWuj_υtt6R&3҅t H!8t,]3ɋ8@4[RC8@<u܋]8p7R48-R$3CE]<u_6 R&^[]̋U ESVW3MM0QVVuVEE|_GPVEuPhVwS, uI9ut uYuEEPVVVGuPVEPhVwS, uj^Yt PxYIuSYYt4W%RL9W,w r9O(s3@Ƌ]9ut O(W, }t uY_^[]̋UQQSVW‰MhPQE33 t6`VYYh|uu tMPYENj_^[]̋UP3ʼnEdSVW}ڋp\MS'օt3BdSp֋UEP3u3 uȃ}uM_^3[!]̋UP3ʼnEdSVWp`3ۉMR]]SSS]MQЋjUY}jZ9OjZ@|u|GjV@|G!0OIG@uj^Kh1jZCjCPWuslt PxY}C%tE3PAtM}tuNM_^3[]̋UP3ʼnESVWUE3ɉdMWpփttj2h213EEPdjup W֋uh3Qff;u+ʋUrff;Eu+֍A‰EPdpH֋Muj_uSuP}tdupL֋jWXM_^3[]̋UM 3ujWX]jxX̋UQSVW3ۋыÉUWtvƅxuϋÅtf9tIut+ƋUxO} vB ZjX+t)+Ӌ]U +مt< ft f9JNuuz3f_^[]̋US] 3VWEEVSj|EZEKd,WSjZs VSjZ3WSjZUJlXtu΃2u @pBlM쀸twXu8EPWWEPj)Mu Ɓ`t MP_^[]̋UuM3uBu DjP]̋UQM3SVuBWVuDu jP u88tu.j`S-'St j6?&_^[Y]̋UuM3u BuDP]̋UuM3u BjDP"] ̋UEVW}37-XtIHtuhh3jD] jW^mMrjVutRJt@0uS_^[]̋UMPR]̋Vt6t2F4Vd@F]̋UQQMEPUuuUu Muu]̋UQQMEPUuuUu Mju] ̋UE VW3WWWWWjHh2WWWWWj3ҋ"_3^]̋UQU EVuPjuM>U Djjh|B(^]̋UV3}tuh4jN jWM|2CȋEuj^^]jc)3XupuGXDtEPU}5|EEPE}PȀyEu(h4h\NYYEC0ËujW^̋U 3Ɂ}VMtuh`5jN jW^:W}XdujhjM jW^ E %SEuh`uh8E hhSMYYMU=9Euh] ucEyPh4j\M jW^MQOuIDu!9}tEPh$5jM <;u6|ϋE|(u] u9Eu `dEt [_^]̋UQQVW} U'tfEPEP;AtLp \u?}tth`x<u$3ɍLAֹ5H73_^]̋UuM3uBu jP_]̋UuM3uBu jP]̋UuM3u BuPx]̋UuM3u BjP] ̋U SVWC 9C$CKyu3 A+AH;C$w+yu3 A+AsEC PC ;C$s EC C {$+COω|$ L$4;tFP!9#C ;u6>;{tlL$ T$C<tIC;4tCKD$;t jD$N9OH1POHFGVSK$CrTS$L$ C;Cu C4J;r;{tC;tAC$} W8KD$t ;tv9F~+;uWvVjKT$~O9N}6ӋE0@C t JC;4tE@_^[]̋UQS] VWSj7wL;t ;B~;uUO _^[]}GEUUE̋UQQQ3VWuq+};stA+U +RWq8 tA+;sqPEP8_^]jHdQu+;s+h5MeEPM?hpEP2A ̋UjYtM JtE Vrt MAF^] ̋UUM 9s3v3@ B;Aw] ̋SVWDt&NVSPjS4uӋ|tm_^[̋U$SVW|$33ɉL$L$9Ndth5h6GYY2_^[]ËNPtD$Pox|$wۋKl@;t7+Cl@h6hFCl@DPD$0zNL3|$tD$P&o|$NT3D$tD$P oD$t;tWPhP6jZFd$|t7D$PvLvTIm|$th6hFYY>39~F8D$FD$D$Pt$L؅tj~tuSNp*6NCF F$F(t 3ɋCs0Qh6hzEF;F(tG;~f,'̋UP3ʼnESVW3!]3E9_deOPtEPmx 9]HG(;Guh7hDYY*OLtqPE!]Pfm]OTtqPEePLm]t5E|t"OLt RlEOTt |l_tj^t9;w1 ;r"[tC t Stcku3C;r$5P֋XHeapG3ɉM9OEDEG8GFG8t 3ҋG4G0RhP7hCVuLEPSVuTEt3ҁLB7?EH3L@U7R?GUMAt#QQGtA tt#wtwpR a OU@MAM;Ot>HeapuV5֍e_^[M3]̋UQSV3W]9^(uFF(^,^03N,uF'E3PF0BPSt=EV(;u!9Zdt|a}\ABdD\LyPt'yPt!3WBPj4t4=uE3ۋ\D@Ht D봸O#tA뢋F(DF,*_^[]̋UeSVW~3}9~,F(EEtPM0EE>h7h6AEYYЉE.=hhAYYEX3Ƀu;u*u%;uu,;uuuQ{Et-=t&}u=tPh7h@E EG;~,}\t}tZ39~ vSFXu jY3ɍ<EPF(PtN(EtG W֋c ;~ rN2!dN( E_^[]̋UQSVT$3Wt`dXPh 8h?du*\u!M`uz2ҋ\t_8]uZu1`#ыtP؋0h<8j ?~ht$ ׋jt؋?u烦\M\d\ut\vh N(26u_^[]̋USVWىU3Ej4WCl}Euj4WV ^]u Ut=UuLuӋ]8t%t PXQht8j=U:]t}=t}tZ}MtJl3ɋM;t˺MA IPjuM3AMM;u벋}uuEl9tV6*j_ul9qu9HupZ96u_^[]jY)̋U4P3ʼnES3VWڋ8`Fff;u+VQR j:Xu tf9qtGr^Í^ÍD^Í^Í^Jt u^Í|^̋UQQeVj`VU EMPEPQ}tuU MV3^]̋UQQMeS] VWX}tAӋHDX}Mt݋}ujW^h<h,YY3ujW^Sh=h  o9u3@Ph`EUWho}t h`t,?u'}t!EӋ@HD3t WuSQ _^[]̋UE$]̋UP3ʼnEVWuэ}襥t)<3ɍu;uAuuʥ'M_3^+]̋VW6v3>v ~v~ ~_^̋U4SU3ۉE]VWE 8}ujh@W u(jY}M U}ԉ}EOff;u+F+M9;EsjVuQE:EWu4F2:~uEE)Eh`=VpEYYuf9t UMV99]tMjzjW[_^[]̋US3ىEEVuW:9E1Sh=jdh`=SpGh`=PpYYu}j_t63Qff;u+Vff;EujX++E+3ҍNff;u+F6P3PEuh=WYYjz}tMQSlS8]3ɋuh@VCKK KEKCpYY;pj/VuEYYujW^h>W*YY3ɋft uh4>j:3YYt3fPYC3f9vuj?VEYYt3f΍Qff;Eu+5SrtEPhX>Wq :uj?VEYYt3f3Ʌf9S C 3f9>f1f;2uftfqf;rufu3ɃtbCj,PYY3Ʌt CfuEApj?VEYYt3f΍Qff;Eu+u3RPK3ɉK h>W>ff;u ftfPf;Qufu3ҋ3҅uSz>ff;u ftfPf;Qufu3ҋ3҅u C7>ff;uftfNf;Hufuދuo{ut1j?VYYt3ftU[u=373/ht>h>h=h=j4YYjW^u _^[]̋UQQSى]VW3Jff;u+BEPVuj^h?jYYVMQPS(؅Q 7o'@uPE3PVujYVMQPu(؅yE V 7'Sh4?Shd?j% h>jYYjW^_^[]̋UQQMSVW3}ujW^!;EPjjPu3pEPjPupnQMU]}uftY7,tMGuD7Vj@uj^/7PV y3#Vt!;t 3#Vh?VjgtW}t ut_^[]̋VVjj(Pt3^p=uVj(Pu^%p̋UQe} VuWt7F FVEPu jVjW`p_^]>u3̋U}t]%]̋Uu j]̋Uu ]̋V3u1q Wzff;u+_UAq^jhڋ}3u8] uUh?j_YYjWX3uˍQff;u+u+} uh?j(YYEE3;MvSuQh@j΍MEPVuj^uSP EGwu'EE3@Ëeu|uME6̋UQQSVډM3E WtvVff;u+NPYutI~<{tNPYuu!P3YtFE3f3MjuLtMf_^[]̋VRFF^jhڋ}33uS,uhH@jmYYEjWXlSEPVuj^uSP> EGGu'EE3@Ëeu|uMEjh؏F3uEE3@Ëeu|uES̋SVW339wt397t/wVuj^w7PiG CGC_^[̋UW;U s3@7vjX0S3jYt Vu+7;u C;rɃ^[_]̋UVu W}V :t O ju ֋\_^]̋UVuW} FPDXuO u  _^]̃9u 39@Ã:ujXÃytr2Q ËBHP2AHP1jh$̋V>t63^2̋UP3ʼnEUSVWX3EKMÙ+EtTuHM48E4uUt&uNۋ]MuK ]~M;~:M 18t-EM4uUuE 8ՋtwE 02M_^3[@]̋UQS]VW};^v^F9FrzPjujX>t.FP6W 66Vhl@h WVh@h> N3uf9u 3ff9ttXEQftj?Yf;tQVuYYt3fuˋ=tM{ujW ux_^[]̋Vu!F3@^Ut3^j:6YYt3fPYF̋Vru3^ÍQffu+tf|H/u 3fTHIu3@^̋UQV5ht=uhCVYY*EPRuuhCV EP^]̋UQS3hWEt_Vt#9FtEP6tE CSPLXWhYYȅtFYY YYA,ˉNu j[h0EpvQO}؅t uQhxE-uQhEh@ hj 蹸YYt 3BB3ۋӉV ujVNFBJvt N "؅u-h@jPPFPTupSh FjW[_^[]̋IV3tmVhFh@ ^̋IVjW^tQ0t A^̋UP3ʼnEUS3ۉM]EVuW(ʍyff;u+uN ujW_,R&u E N hFN jhu,9]uuN uN 9]hhPuYYt!nF@HL]uj/tMAqpM֋uuuu 39@jE0M֋uEÅN jfuN jguhhdڵYYt SSSͤ؅uj_YF qpօt 1p օtjW_t)j0Mօtj0֋M_^3[0]̋UQQS3E !]VW9]9]}3j^} EPSSh rPupVhFt}Pj؅txuWSj?PSuLupVh G&jEPujuHupVhHGh@ 33 jW^}t uDetS_^[]̋UE AEA 3AAATFA]̋UVEtVЬY^]́yTFt q謬Y̋UP3ʼnESVW3EEE9G9Gu,hh@#GYYu j^htG3f3O؉EHGEw p$֋ЋύEPEPPRph֋Mu xE t 13Eu踠 +h PGPy =z=zO YQff;EuE+ h`HP+h HPGPy=zus=ztpO YQff;Eu+ًMAM;OFEPEPuuhGh@Y 2hGh@EYYMOGt(=t!3fMt}t EPM_^3[]̋UQP3ʼnEVWgGPW"Rwpw օup֋M_3^贯]̋A=,t5=/t*=v=v=t=t=t3jXjXjX̋Uu uRaa DF]̋U VW3~ 9~9~S9~u-hSFYYuj_h0Hh@YYSWv^ F;^s}NG;wiFEt\tTpNWЉEU;w3MtPGGqP;E }F C;^r3^[_^]̋UQP3ʼnES33@VW F{$K0'K KKCC P`K4WK8KCYY53fhhC YY3fC`9S@t.CPjup sL֋t h|HIu"t~{@tG{Wjup sL֋uċ73Jff;u+ыK1AC PjXPusLp ֋t"vS`uthHVh@ M_^3["]3@̋UE ;w8t/Ht'HtHHt-tHuEA$[A4VAOA JAE`H>=t4=t(=t=t=t3AXA\ AHADAx]̋UEHtHtHHt3E E E ]̋UQQS]V3EWujWjE 3;HwHHH-txHt:HHhjҦYYȅtPAG= ===t[=t7=tj2 hj豤YYȅGX P!8hj舤YYȅG\hjkYYȅAGHhjDYYȅGDqAA qqFhj YYȅtE GxjP=77hjYYt#p@@ `HpE@Ɖ93uj^_^[] ̋UP3ʼnES3ۉMVW9]ujW[hHh@=YYÉ]y@KUutGy@ut<=RpM֋w(Puu u֋؅u0EM@ErEq$Q4ȉxKV} Ktt E0IuEIEQpMP4KuSh@th`Ih@BYYM_^3[S]̋UQP3ʼnEVWup3օtVtQtLup$94uXu 98t3GWu p,u֋M_3^诠] ̋VW3G39~DuJVHu?N@+t8It.It+It It%ItIu&N<N<+tItu;t˃u 3;_^̋V33F9qDu7Q@t ;tu'IHt+tJtu;tu ^3;^̋UQQ3҃UU} DBIEU]̋UVu3D3fE Ɖ^]̋UVEtV`Y^]̋VD=YttPY^̋UU;w=t3-t"Ht-t Hu5KA@F>6.-tHtHHtR|]̋UE-t2Ht'HtHtHt]E E E E E ]̋UQQP3ʼnES] VWuuuSu5u4u;Eu+jW^hIVh@ M_^3[莝]f@ `"EePhup wLօuMtQ'@u AEPhup wLփuMtQgw,$3@ jXj3f ̋VW3tPzYhhBYY~`t@t61%uyIt7Q(jUj@t@dždžUtPܕYhh褜YYuj__^̋UQSVu3EWujWM ;&-Hti-t#Hhj/YYȅt<hjYYȅt G@A3҉QA QQlE3ȉphjԛYYȅT PA/Bhj訛YYȅ(8_`t!Qff;Eu+AEEhj[YY u&0-Ht;HHtVQuhjYY jQq8_`t!Qff;Eu+AEEhj赚YYt; uYhj蒚YYt -339u2tj[_^[] ̋U P3ʼnEVWu uuS3ۃ~@u H-WH-tuHtDtVu u}hjYY Qh#hjϏYY j Q"hj衏YY!x!x!x@H FohjjYYt[nhjMYYt>Qhj0YYt!!x!x!x@H 0E3>u2tj__^[] ̋UEHtG-Wt8Ht--tHtt]( ]̋UQQP3ʼnEVWuuuu uG } "Shj 'YY3ۅt YYˉuj^`w֍BEff;u+U1APEQw{E]PhXup wL֋uTMtMQaE]PhYup wL֋uMtQ"[M_3^]̋UVuWu Vu9t _^]̋UVDcEtVʅY^]̋USVW}3مujW^!7} tWu u27hjcYYt!!p!p!p@H F3?u2tj^_^[] ̋U}t]]̋U}t]LE ]̋UQQP3ʼnEVWuuuu u`tF} "t@eEPhup wL֋uMtQ)M_3^]̋UQQP3ʼnEVWu uu]S3ۋ4\K=pM֋w(P4\Ku u֋u uCr7E4\KpMP4\Kh0IWh@[M_3^O]̋USVuWVhVChVhVhV0'å_^[]̋UVEtVЂY^]̋VCT^j CeM]3uujWE!3M ;tW-tHtKHtHHhj YYȅt#3AQA QQE3ɉ hjɈYY jUwd- 6HtpHHtSQuAthjoYYEEP p PphjYYEE p Pp֋MP hj貇YYEE p PpMhj\YYEetD p Pp֋MPu3;u2tj^苍 ̋UQP3ʼnEUVW;w"t-t HtHtHHu"QAdL- t,tHtHHtRu/p֋M_3^8]̋UE- t)tHtHHt]E E E E ]̋USVWu} uuWu!{`tN"ts$tǃtHHt&HHtHu0ǃQu*"t%jUj@Cduj^hIh@YY_^[]̋;u.;u ;u;u3@3̋UQP3ʼnESVWp֍p֍p֍p֋M3_^3[P]̋USVWuh,u3Ch/u0'å_^[]̋UVEtV|Y^]̋VW~`Ct}r"tP|YtPx|YtW`|Y_^j e ]3EujWg0E ;Kȁ,ItnItISPu~~`t#tQ3ff;u+yj@_hj肂YY. Wkhj[YYȅt#3҉QAA QQ0E3ȉ hjYYȅt3AQA QQE€~`t#tQ3ff;u+yj@_hj趁YYtf W3=1== =t3=hjbYYEEt$3Shj:YYE3ɉMt7 p Pp֋MPEHhjYYȅt. FXPhjÀYYt Q4339 u2tjX) ̋UQP3ʼnEEѹ0VW;wAt7ȁ,t%ItIt ItP3qi_WO=1tB=v= v/=t=up BXM_3^~]̋UE--t@Ht5HHt)Ht-tt]E #E E E E E ]̋U P3ʼnES] VWuuuSut"hj ~YY3t AAȉuj^`{EEPh1up wL֋MQt3QEh-up wL֋\N3ҍNff;u+6APh.up wL֋9Qh0up wL֋39 t@Ktt8KubMut{]̋U P3ʼnEVWu uu|S3ۋ4XK=pM֋w(P4XKu u֋u uCrL XKE0I1uEIEQpMP4XKuWh@跼[M_3^Yz]̋UQQP3ʼnEVWuu uu})tjW_S3ۋ4=pM֋w(P4u u֋u uCr7E4pMP4hIWh@̻[M_3^ny] ̋USVuWV!hVCǃ.hVhVhV0'3_ $(^[]̋UVEtVrY^]̋VW~`Ctm b"tPyrY tPhrY$tWPrY(t詻W8rY SH_^j e]3EujWJE ;kp  $XhjxYYȅt#3AQA QQlE3ȉ hj@xYYȅt3AQA QQEhj xYYt jUvd< 3hjwYYȅ{(3҉QAA QQ0EYhjwYYȅ=$~`t#tQ3ff;u+yj@_hjVwYY8 Wu~`t# tQ3ff;u+yj@_hjwYY W =U= != = =t/="hjvYYEEt"hjvYYEEt[ p Pp֋MP {hj,vYYEEt$3ShjvYYE3ɉMt7 p Pp֋MP E5hjuYYȅ FXP SPu@39 u2tjX| 1uu443̋UQP3ʼnEEVW;wXtNp $Ad(~$n f=rY= vM= t-= t=t=u6p AXPDM_3^8s]ff̋UU;w@t6-t%tt Hudu 3t hRt&totWh8RSќQMOucuETPEMȋEM=uVjjuptZQMtMEEtj0MօtuhRWS蕜M_^3[7Z]phRWSi 뢿hhRSYYjW_hŐU,P3ʼnESV‰MWE3P3Ep֋u EujW_hRWh@ !EjPuph(SPj@؅uj_P3CEu#UEPSQMjuEEuu}t_MQSQMjuUEPSQMjuUEPSQMjudfEjSfCEjPuphPSWh@Ś ieEP6EP\pzu=uj@MQPEP\u"p6& pujz_thtSWh@C SjM_^3[W]̋UP3ʼnEeSVWMEQuȋtVhSUWp֋عtjhphpDQuuW֋tVhSh@ tuMWuthSVh@H M_^3[V]j,gR_ڋjj EPW|uhTpPh@ [^3;usEPVWxt/eEPEЋP1xMuh0Th@7YYMFhPTjh@苘 z̋I5t%5t5ujXÁujX33@̋U0P3ʼnESVىUpWS]֋ SEq`֋u 33҉]B]0ΉE3fE܍EP]Љ]ԉ]EEЋEȋuHt2Ht Htj2_QhQuu! u ]EUMPEPuSV3tj2_VShQh@˖]U]p ֋ˋ8thtTWh@tVhTh@q EtPtj0օthTWh@褖 M_^3[FT] ̋U P3ʼnESVWpS΋֋ SEq`֋uӋ03EEEEEfEEPEPWVj41]tj2_j4VhQh@艕Rp ֋ˋL7thtTWh@•ױtVhTh@5 tj0օthTWh@v M_^3[S]j8g[ỦMȋM3ۋEjMYQj MEQP]݈]߈]|uhTpP9] É]3A;EMQPuxtvE؋MăEЍEPEP_.MċA9EuR5udu?M"3Af;uMjZf;uM jZf;uM8]t 8]t8]uEԃM@E\M8]tUQM8]tŰMjXP8]tŰMjXP~;]EPSuxt`E؋MăjEXEEPEP]-MċA9Eu65udu#M ŰMPuu Eu2MC{jXhTPh@E` Ëuth UVh@> X ̋UjhgdPHP3ĉD$@SVWP3PD$Xd|$ L$43L$DD$؉D$D$D$蛎!\$`L$8莎D$`Wp։D$0tL$4D$Pu׉t$,=ED$Pt$h`WhpWhhhxVupt$H֋D$tHP(t=|$0u6D$$t.3QQQ0ut$(pDt$8֋u;]3D$tEL$(QL$QL$4QPu+phtU thDUWh@脑 |$tD$(PD$ PD$4Pt$tD$tT$DD$L$tT$8D$L$t$ tUL$8QjPu%L$tEU ؍D$DPSQt$pLփ|$t t$thUWh@訐 L$8D$`<)L$`L$D.)NjL$Xd Y_^[L$@3!N]̋Q(Y̋UQQP3ʼnESW3GEڅtptlVSpօt ;tuj _tuuEx t tu@Wup,S^jWXM_3[gM]̋UP3ʼnEeSVًWujW_hUh@YY\UEPtshUWh@I+}K thEE eEEPjgup(Q֋th(VWh@ԎEPjhup(s֋thHVuSDjWspօt=hhVshUh@ D}t"SQuu*jZj_shVh@諍 thVWh@ hVh@耍YYM_^3[K]̋U(P3ʼnESVWpM؋WEWpEqEEEEEEуDt|Wp֩tuM؋SƇtK3W]܋p֍M܋QuMjPY}܋؅tj03ۋM_^3[jJ]̋UQQP3ʼnESVWpWΉU֋ WqփtRHHt"Hu[Eȃt]IIt[IItIu9OJEtHtHtp0h]h@j{ 3Auߗ؅Lttt t t Ttp֋u3@[؅u7>p ֋u؅uSt"@؅tSh8Rh@z R>jW[p0h]h@rz *hRSh@zjW[h(]h@IzYYt,Sh]h@3zu t$tFM_^3[*8]̋VjAPRQj,tth\Vh@Az ^̋UP3ʼnEeSVWUERu juy]}u,Tt"N4E$xȥ\}tj0֋M_^3[[7]̋U P3ʼnEESVWMt 3LF0uO؅uQuM6؅tjSWp֋M_^3[6]̋U P3ʼnESVW}uWE؅Vp֋UMW؅u\t tuNUMW؅u<ut#uupTքuuUMjWs ؋M_^3[ 6]̋UP3ʼnES]EVWSuuuu tu uhl]h@wj;p ֋ GthRWh@wғt|Wh8Rh@0w jW_h^h@wYYtOtEtj0Mփ#Wh8Rh@vu t}t}M_^3[4]̋UP3ʼnEeSVpW]SΉ}֋ӍEPjujV}}؅uzQ؊ђ؅tShMUMW؅tShd^h@v 6t tu(tj0uM3u؅tj0֋M_^3[3]̋U P3ʼnESV‰MWE3!]3!]P}p֋ȉMtHHuj_u} 3Gu3EURUju4QM=}؅u|Q蘉dt%茑؅uOEUM4W؅u/tj0֋u3}EM@E;ErSh^ShMh@t tj0֋M_^3[2]̋U0P3ʼnESV‰MWE3!}3!}P]p֋ȉMtHHtHu j[u]$ju3EURUju4QMTUEԋMPK Su]ql֋]{TE܅}t-}WpMPWup0$u=pM֋w4Puju֋uBQ蔇utj03ۉ]E@E;EshuMuht_Wh@)sEuh8_jW_hOh@rYY%E0uSh^Wh@r]tj0օth_Wh@r M_^3[W0]̋UQQP3ʼnESډMt6CV0;t$WjQvx׋6M9su_`^M3[/]jhhX8‰EMu }eu}URVu؅uUMV؅tiEtbewEEPvV й?G+ȃs+h5M/EEPM,hpEP6@GVBuMeEMZ#tQ׋h_Vh@?q 6 jXh_Ph@Eq ÃMu}̋UP3ʼnESVu3ۉUMW} tuh@`h@ZpYYTEujW^h`h@7pYYfQ贄du b螌t h`E=PEhpM֋whPuu֋tth`fE9=PEuhpMPEjpM֋wPuu֋th`Vh@o iEtWtRtME94u 98tPpփu3CESu0p,֋ EttthaVh@(o M_^3[,] ̋U$P3ʼnES3UVEEE܋E WEEPE܉uPujuz]ucUEMPSuuJEM xtj0֋uuU3Zu&UQuAtj0փ}tjWupօth(aWh@n M_^3[+]̋UjhhdP(P3ĉD$ SVWP3PD$8dT$$L$33!\$3D$R|$$p֋Vh@ah@m tt +t#Ntu$jj_t$|$ jt$!\$(hj +YD$Y|$,d$@tgG3|$L$@S6hah@hlL$$T$4d$D$,QL$ jujP`؅uT$,L$$Wt$ub؋D$tj0L$֋t$tSh`h@k 6hbh@kG 0;FuL$ D$<؅uT$L$ ؅`D$9t 8t8uuT$L$ ؅t$xTׄt"YYȅu`Ghh`"YYȅuGhh`!YYȅucHGwhh`!YYȅt^u<0GPhh`!YYȅt7uG)hh`i!YYȅtuG3ɉ uj_RuEu uu\u Vp}u);qrօt.O~t$Etj0Mփ#}^M_3[]̋UQQP3ʼnESVW3TEtj0M։T9} ujW_h(jh@*aYY|puU\u uΉ@EPLPT?rTuj_%vp\֋T3ɅJ\M_^3[]̋UQP3ʼnEV3WTFt-p֋t;h`jV@W` hj@W4`YYthjVW` M_3^3]̋UVu uUs^]̋UP3ʼnESVW3]}P}Lhjh@_}p֋u؍ȉE#~Tpl|uTxlω}9{vXTEPC74ENLVEuM2|MuAM;Kr39{METPC 74ENLVEuSuu,{t E@E;CrMCM43h,k.}tj0jX C M43hpkh@:^EM_^3[I]̋VTt(vp~^yVhkh@] 3^3@^̋UVGEtV Y^]̃!]tWItQIt:It#I+tJt j Xj XjXJt jXjXJt jX3@3j Xà |q~~g~ u]jXjXj XjXÃ"t0t'tItIttIu0jXjXjXjXjXjXÃtJt u jXjXj X̋X$p" ø øø@ø4øDøHøøø\øøhøTø0øøøøpøøøø3ÍI!!!!"!F"@" """4""""(".":"L"R"X"^"d"̋UVGEtVY^]̋V"< IIItGIAJt6Jt,Jt"JtJtJ+j#jjjj j JJt,Jt"JtJtJj j jjjJJt,Jt"JtJtJjjjj3F3j |~~u~ Awhjcj _j[Jt#JtJtJtJtJuJjEjAj=j9j5j1.t*It#ItItItItIuj!j jj jjj^^̋X!$x%øøøø,ø@øøXøløøDøøøøøøø0øøøøhøø|øøøTøøøøøøø3ÍI$$$$$$$$$$$%$$$$%% %%$%*%0%6%<%B%%H%N%T%Z%`%f%l%̋UVGEtVY^]̋V!t_ItUIt,ItJJtJjjjtJJtJjj3F3tJtJt Jj {j wjsj ot ~f~ AwYjTj Pj LjH"t' ttItItIu1j,j(j$j jtJtJtJuj jjj^^̋X$ ($øø,ø@øløøDøøøøø0øøø8ø|øøøTøøøøø3ÍIv'|''''''''''''''''''''''(̋UVxG3EtV:Y^]j X;3t-It'tItItIItIIu0jXjXjX3@jX3jXÃt IItIItIttjXj XjXj X̋X wO$)Lø`øøøtøøøøøøø3ÍI2)8)>)D)J)P)V)\)b)h)n)t)̋UV`GEtV Y^]̃Et?jX;ttIttItIuGjX3@jX3ÃtIt u+jXjXjXjXÃt2It+t"tItIt Itj Xj Xj XjXjXj Xj X̋Xwg$*ø<øøTøPødøxøø(øøøøøøø3ÍI****************̋UVHGsEtVz Y^]̃+t%IttItjX+tIu)jX3@jX3jXÃttjX+tIItjXjXj X̋X wC$$,,ø@øøø|øøøøTøh3ÍI+++++,, ,,,̋UV0GSEtVZ Y^]̋XtHtHt Ht3øøøø̋U^E U@DPEGLTu ǁ@$yu ǁ@\y] ̋UVG^EtV Y^]G^̋UQP3ʼnESV3mLuWhjYYt'XwG \GwGFWmhjYYt!PwGG wwFWmhjnYYt!TwGG wwlEtmW6mtKhj#YYt!`wGG wwFt"Wlu1j0־hylPh@O _M^3[ ]̋US]VWH$uSbthykPh@O _^[]̋UTP3ʼnESVWj3X}ZčMjQPE0EԉEEP8]EP@u9}v}C48;rX#t ;rK;sE{#}+;r-jhVW4tMQhVW<t3@3e_^[M3R ]d0p$d 0Ѐyt %tB`Jd+= r t Bd %s T@1tpk1t̋Uud0jp<]̋Uud0jp]̋UQP3ʼnEweM3* ]jh]3FeE3Ɂ8Ëe3Ei̋U=$VWu uu3$@3 @5 uh@5((ȉup-GPjQ5($uGPj75($t=$~ _^]̹$=$u 5(4̋UE3HtHtHtHHt HttjWY] ̋Vh(h2h0ujhhP5(,t 5(4^̋Vl<NFFF FF&/y^̋VMV,y &^̋VW3jWFP7 ~0~4Ɖ~8_^̋VW3jWFP  ~ ~$Ɖ~(_^̋VFPN0^̋UUx;Q} P]jh.̋UMuW9,ua-]̋UVuuWH>tA>,uW39~$~SWN wu PG;~$|[N FP&_3^]̋V>t 6X &Yff^̋V<&NFFF py (^̋VjjFP ^̋UQQP3ʼnEW?tHS_;_ s1VEtHtQp֋E`;_ r^GP'[M3_]̋VR ~(3u~u`F^̋U V uYtuYt^]áuΣh0j YVMK hEP ̋U V u YtuYt^]áuΣhPj YVMhEP[ %jHyi h&MeEPMRhpEP jHyi h&MeEjPM hDEP hYu@à 3̋UP3ʼnE} SVWH3d}p;t/hh3 u=tj Y`3FuEtiE];r:9;t3Ή;֋ 9UuE9Mt΋‰UEىMPuY===33} d3p;t-hh3 u9=j_tj :3Fh<h4[YYuh0hY=Yu3=@t&h@ Ytu5@Wu3@M_^3[?] ̋U} uh ]*̋Ucsm9Eu u P YY]3]j0h@ E3uE wH} u=uu9E t =<tNE} u uu u׉EMEQPDYYËe3uu}Euu uEMEQPYYËe3uu}Euu u9cEMEQPYYËe3uu} }EVVubMEQPxYYËe3uEVVuHMEQPIYYËe3u=<t4EVVuMEQP YYËe3uE t Euu uEMEQPYYËe3uu=<tG=t>Euu u׉EMEQPtYYËe3uuE E } w H̋UQP3ʼnEVu3;u sWu>t ׃;u r_M3^ ]; Pujhe] Ë}NjuueO}x+uMU3@EE}] uEu uWSVjh>eMxFu+u uMUEE܋E܋EE8csmt EE<eE+̋U]ji'ue Y e=ËER̋UuY]̋UV8EtVY^]%̋UM t*j3X;Es? 3PPPPP3]MQu% YY]̋Uj`udh P\]̋U$ 5=ff fff%f-EEE( jXkǀjX PjX DjXk PLjX DLh&]̋U 5=ff fff%f-(EE jXkǀh&]jhXeEuu5YTjYeEE܍EPEPu u؋M M܉ E ËujY̋UuUYH]%jhx3uuu܋] };u}MU}Fu3@EE] }Eu܅u uVSWW%%%%̋UP3ʼnEffffffEEDž0@h&LM3]%Xh`Cd5D$l$l$+SVWP1E3PeuEEEEdËMd Y__^[]Q̋Uuuu uh<hPh]h`Cd5D$l$l$+SVWP1E3ʼnEPeuEEEEdËM3ZQL$+ȃ YQL$+ȃ Y%T%P̋Md Y__^[]Q̋M3M̋M39Pd5D$ +d$ SVW(P3PuEEdPd5D$ +d$ SVW(P3PEuEEdPd5D$ +d$ SVW(P3PeuEEdPd5D$ +d$ SVW(P3PEeuEEd%L%H%D̋UE3SVWH<AYt} p ;r H;r B(;r3_^[]̋Ujhh`CdPSVWP1E3PEdeEhtTE-PhPt:@$ЃEMd Y_^[]ËE3Ɂ8ËeE3Md Y_^[]̋UEMZf9t3]ËH<39PEu f9Q]̋UeePVWN@;t t УDjEPE3EE1ET1EP3EM3EEPXE3EM3;t5PuO@ Pщ D_^]%@%4%0%,%(%$%QL$+#ȋ%;r Y$-̸QRPhZY̸̸̸̸̸̸̸u̸e̸|U̸xE̸5̸d%̸̸̸̸̸̸̸̸t̸X̸\̸`u̸e̸hU̸lE̸p5̸QRPhZY̸QRPh4ZY̸̸QRPhTZY̸QRPhtsZY̸LQRPhCZY̸H̸D̸@̸≮P̸8̸ QRPhZY̸QRPhԘZY̸$̸ ̸̸̸,̸0̸(űUju hpL5(uh]%D%H%%̍MNT$B̋J3hj̋T$B J3J3juYËMT$B J3J3jFuYËT$B J3hJ3^TkupYËM\T$B J3,J3"ku4YËM؃ aT$B J3J3luYËMT$B J3J3l[uYËM؃ aT$B J3rJ3hl̋M'T$B J3@J36Tm̋M `T$B J3 J3m̋M T$B J3J3m̋M `T$B J3J3mN̋MT$B J3rJ3hn̋M `T$B J3=J330n̋T$B J3\nu%YÍM/T$B J3J3n̍|jjjT$B 3J3~o2̍M=M5T$B J3N|o̍M;T$B J3&p̍M鴈M T$B J3J3Dp̍!T$B 3J3xp]̍ T$3m J3`q̍J銇T$B 3'J3Hq̍M+iT$B܋J3 J3q̋q$h(h-T$B 3J3r:̍MT$BJ3^`r̍M T$B J36J3,r̍MT$B J3J3r̍MhT$B J3J3r|̍MBT$B J3J3sJ̍MT$B J3n J31hs̍MT$B J3 s̍MT$B܋J3s̍M[MST$BċJ3 J3sX̍MMJT$B J3tJ3j(t̋M MoM,oT$B J34\thu\YYhuLYYËT$B J3t̍MT$B J3J3uv̍MpM4T$B J3J30u<̋MT$B J3`J3Vdu ̋M$-T$B J3.J3$űMjT$B J3J3űMT$B J3J3ut̋M=T$B J3J3vB̋MQ9T$B J3fJ3\@v̋MM7mT$B J3)J3lv̋MMT$B J3J3v̋MPT$B J3J3vőMlT$B J3vD̍MiT$B J3hJ3^$wupYËT$B J34J3*PwuuYËT$B J3`J3Vz uhYËT$B J3,J3"{u4YËT$B J3J3p{uYËT$B J3J3{nuYËT$B J3J30|:uYËT$B J3\J3R|̍M;%T$B J3*J3 |̍M %MM$M$MdM\T$B J3J3x}zuYËM]LT$B J3J3~>uYËM!LT$B J3XJ3Nh~̍MM骔T$B J3~̋MhM~T$B J3J3̍MT$B J3J38cT$B J3d>uYËMT$B J3XJ3N̋MT$B J3&J3,u.YËMqT$B J3J3XuYËM5T$B J3J3XuYËMT$B J3rJ3h(uzYËMT$B J36J3,u>YËMT$B J3J3uYËMET$B J3J3`huYËM T$B J3J3xȂ,̋M%T$B J3O0̋T$B J3/\̋MeT$B J3J3̋T$B J3J3T̋T$B J3d̋T$B J38D̍MiT$B J3hJ3^ą̋T$B J3>̋MVT$B J3̍MZT$B J3LhuYYËMRMMMT$B J3J3xB̍M$̍MYMT$B J3J3P̍MYT$B J3J3̍MYMDT$B J3V̍MPYT$B J3zL.̋M]bT$B J3Ox̍MXhuoYYËMMM MT$B J3J3̍MXT$B J3J30l̍MfXT$B J3\D̍M>XMqT$B J3`J3V ̍MXT$B J3.J3$T$B J3Phu'YYËT$B J3J3y̋T$B J3Y̍MWMM~T$B J3mJ3ct̍T$tp32 J3%̍M3WM+WT$|x3 J3܎̋T$B J3v̍MT$B J3J3hDhuYYhuYYhuYYhuYYhuxYYhuhYYhuXYYËT$B J3J3huYYËT$B J3J3PphuYYhuYYhuYYhuYYËT$B J3\J3R|huzYYhujYYËT$B J3J3hu0YYhu YYhuYYhuYYËT$B J3J3R̋M`mM(mM4mM@mMLmT$B J3J8̋M mM(nmM4cmT$B J3 ̋T$B J3J3̋MlM(mM4lM@lMLlMXlT$B J37̋MElM(lM4lM@lT$B J3:l̋T$B J3J3̋T$B J3J3̍M鹆M鱆T$BJ3 J3p]̍MkkMkMErT$BJ3q%̍T$B 3CJ39̍MT$B J3J3 hu/YYËT$B̋J3 J3l~huYYhuYYËT$B J3J34̋MT$B J3XJ3N̔̍M'T$B J3&J3̋T$B J302e̹5hTYt̹-(3(3"jL"jjj@Z"k0kLLDk@"xkk-Mk@"kkaMkM l@"@l`lMMtl@t"llMMl@X"m0mN"NDm@I"xmWN"mN"mN"mN"(n%O"TnWO"nnn@"nnOO o@"@oOOO P"ooAPIPop@t@"| ? ?\(B B=̗(:9ܗ (( (T ('Xl'$','8'@'8LH(   h((p 0H^:,rƚ|j֚O EXuao.I $)DZNetApiBufferFreeDsRoleGetPrimaryDomainInformationDsRoleFreeMemoryNetDfsGetClientInfoDsGetDcNameWGetUserNameExWTranslateNameWLsaConnectUntrustedLsaLookupAuthenticationPackageLsaLogonUserLsaFreeReturnBufferLsaDeregisterLogonProcessWNetGetConnectionWwnsprintfWPathIsUNCWPathIsRootWPathRemoveFileSpecWPathAddBackslashWPathRemoveBackslashWPathCreateFromUrlWUrlUnescapeW',PT,,Ȝx(`Pzy |{ z``Pa_yz0zy`Z@p2322 S}P~~}   @ _`K-.@..`_@`pŞٞ&;Zlyȟ%5EZgt̠ՠ#5G  !"#$%&'()*+azroles.DLLAzAddPropertyItemAzApplicationCloseAzApplicationCreateAzApplicationDeleteAzApplicationEnumAzApplicationOpenAzAuthorizationStoreDeleteAzCloseHandleAzContextAccessCheckAzContextGetAssignedScopesPageAzContextGetRolesAzFreeMemoryAzGetPropertyAzGroupCreateAzGroupDeleteAzGroupEnumAzGroupOpenAzInitializeAzInitializeContextFromNameAzInitializeContextFromTokenAzOperationCreateAzOperationDeleteAzOperationEnumAzOperationOpenAzRemovePropertyItemAzRoleCreateAzRoleDeleteAzRoleEnumAzRoleOpenAzScopeCreateAzScopeDeleteAzScopeEnumAzScopeOpenAzSetPropertyAzSubmitAzTaskCreateAzTaskDeleteAzTaskEnumAzTaskOpenAzUpdateCacheDllCanUnloadNowDllGetClassObjectDllRegisterServerDllUnregisterServerp|p|p|@|p|p|L@p|p|@DP>N@ (S0ПММpSPММpS00ММp```@ 0p0 @`8LN0OOW P@P`PQL0MQR`SSS^Ta0QpQPQ^^_a`b8p@0 @`TSUSUSUS TSTSTSTSTSTSUS@TSUS USSS0US@USTSPUS`USPTSSSpUS`TS0TSUSpTSUSUSTSUSUSdtepflghhxȯ: !\(||,tLtLtL̺ܺx ̾h h8  0 $ P0 ܻx T @ t    0  T d      @ . - ,@ /t 0 1  \      0   !   h  def  g0 hL Q0Xd88dHXwGg@ \T p k Xh( $p(8Ddh-D.d0,/10 !d(fTegh@-.01-.0)()+*+   p/,1 !1 !defghi           .0- 1defghi !.0-1 !defghif2H{I4f2H{I4L)EgddL)Eg`c0c c dl8dldd\d40e4`e4e4e4e f$ Dfh hf fHfg8g|gg|gt`hThhhPiik, Ll|l l m(@mmn@nxnnn4oPoco<ldopXppqXqTPqLHr\X`rD@d\rsHsstptt(uu,u$ 8v$ v,(v,( dlXw\ w<8w40xDxxPx8dxnx n4&.?AVCAtlException@ATL@@&.?AVout_of_range@std@@&.?AVlogic_error@std@@&.?AVbad_alloc@std@@&.?AVexception@@&.?AVlength_error@std@@ . D^tBRbt^H0hL0tzfTB0 ">b8Pr ,xdF*"(:NZr*8D^r"6Jdz@dnPok+ M H  :MdVJjTH>4* znR:xp8Tj"rP. z`D&&8J\n9$@x0DH4(z0D . D^tBRbt^H0hL0tzfTB0 ">b8Pr ,xdF*"(:NZr*8D^r"6Jdz@dnPok+ M H  :MdVJjTH>4* znR:xp8Tj"rP. z`D&&8J\n/srandPswscanf_vsnwprintfwcsrchr_wcsicmp~wcsncpy_smallocfree memcpy_svwcscpy_sqwcscat_s_purecall_vsnprintf ??0exception@@QAE@ABV0@@Z9?what@exception@@UBEPBDXZ??1exception@@UAE@XZ ??0exception@@QAE@ABQBD@Zmemmove_s ??0exception@@QAE@XZEstrrchrldivrwcschrwcspbrkiswspace|wcsncmp_wtol_wcsnicmpqsortbsearch+_wcsuprwcsstr\towloweriswxdigitwcstol_wtoi64 memmovememset$_callnewhf_CxxThrowException{__CxxFrameHandler3q_XcptFilter_amsg_exit_initterm7?terminate@@YAXXZmsvcrt.dll??1type_info@@UAE@XZi_errno reallocb_lock_unlock__dllonexit _onexitl_except_handler4_common{RtlAcquireResourceSharedRtlReleaseResourcezRtlAcquireResourceExclusiveRtlCopySidHRtlLengthSidRtlInitializeResourceRtlInitializeCriticalSection+RtlDeleteResource$RtlDeleteCriticalSectionnRtlNtStatusToDosErrorRtlConvertSharedToExclusiveNtAllocateLocallyUniqueIdURtlEnterCriticalSectionERtlLeaveCriticalSectionRtlIdentifierAuthoritySidaRtlEqualSidRtlInitStringRtlConvertExclusiveToSharedRtlInitializeGenericTableAvlRtlInsertElementGenericTableAvl&RtlDeleteElementGenericTableAvlYRtlLookupElementGenericTableAvlRtlInitUnicodeStringBRtlDosPathNameToNtPathName_UNtCreateFileRtlFreeHeapNtCloseYRtlEnumerateGenericTableAvlqRtlNumberGenericTableElementsAvlaRtlValidSid`RtlValidSecurityDescriptorntdll.dll1CharNextW<CharUpperWHUnregisterClassAUSER32.dllCreateFileWPGetLastErrorCloseHandleMultiByteToWideCharFindResourceWQSizeofResourceLoadResourceLockResourceFreeLibraryGetProcAddressLoadLibraryExWgGetModuleHandleWlstrcmpiWLeaveCriticalSection@RaiseException%EnterCriticalSectionFindResourceExWcGetModuleFileNameWGInitializeCriticalSectionDeleteCriticalSectionDisableThreadLibraryCallsWideCharToMultiByteLocalAllocLocalFree)GetEnvironmentVariableWCreateDirectoryW GetCurrentProcessIdWriteFileQGetLocalTimeGetVersionExWCreateTimerQueueDeleteTimerQueueExCreateTimerQueueTimerDeleteTimerQueueTimer GetCurrentThread GetCurrentProcessGetComputerNameWGetSystemTimeAsFileTime5GetFileAttributesWGetVolumeInformationW2GetFileAttributesExWCompareFileTime DeleteFileWIGetFullPathNameWLoadLibraryW SetLastErrorCompareStringWFormatMessageWRSleepUnhandledExceptionFilterCSetUnhandledExceptionFilteraTerminateProcessOutputDebugStringA-QueryPerformanceCounterGetCurrentThreadIdGetTickCountKERNEL32.dll{CoTaskMemFree|CoTaskMemRealloczCoTaskMemAllocCoCreateInstanceStringFromGUID2 CLSIDFromStringPCoInitializeExCoUninitialize CLSIDFromProgIDStringFromCLSIDole32.dllOLEAUT32.dllLsaOpenPolicyLsaNtStatusToWinErrorLsaQueryInformationPolicyLsaFreeMemoryLsaCloseCreateWellKnownSidTRegCloseKeyRegQueryInfoKeyWsRegEnumKeyExWRegOpenKeyExWRegSetValueExW]RegCreateKeyExWlRegDeleteValueWLookupAccountNameWLookupAccountSidW{ConvertSidToStringSidWConvertStringSidToSidWRegQueryValueExWJGetLengthSidoGetTokenInformationOpenThreadTokenSetThreadTokenEqualDomainSidOpenProcessTokenDuplicateTokenExCopySidInitializeAclAddAccessAllowedAceInitializeSecurityDescriptorSetSecurityDescriptorDaclSetSecurityDescriptorOwnerVGetNamedSecurityInfoWaGetSecurityDescriptorSacl\GetSecurityDescriptorDaclSetNamedSecurityInfoW^GetSecurityDescriptorLength7GetAclInformation6GetAceIsValidSidAddAccessAllowedAceExAddAccessAllowedObjectAceAddAuditAccessAceExSetSecurityDescriptorSaclAdjustTokenPrivilegesMakeSelfRelativeSDCryptReleaseContextCryptAcquireContextWCryptCreateHashCryptHashDataCryptGetHashParamCryptDestroyHashADVAPI32.dll'AuthziFreeAuditEventType,AuthziInitializeAuditEventType%AuthziAllocateAuditParams/AuthziInitializeAuditParamsWithRM+AuthziInitializeAuditEvent2AuthziLogAuditEventAuthzFreeAuditEvent(AuthziFreeAuditParamsAuthzInitializeResourceManager AuthzFreeResourceManagerAuthzFreeContext AuthzGetInformationFromContextAuthzAddSidsToContextAuthzInitializeContextFromTokenAuthzInitializeContextFromSidAuthzAccessCheckAUTHZ.dllUuidFromStringWUuidToStringWRpcStringFreeW UuidCreateUuidToStringARpcStringFreeARPCRT4.dllDsQuoteRdnValueWDSPARSE.dllDsCrackNamesW$DsFreeNameResultWDsBindWoDsUnBindWNTDSAPI.dllODBC32.dllVirtualQueryVirtualAllocGetSystemInfoVirtualProtect4SetThreadStackGuaranteeRtlAllocateHeapRtlImageNtHeaderDelayLoadFailureHookResolveDelayLoadedAPI3PerfSetCounterRefValuePerfCreateInstance4PerfSetCounterSetInfo7PerfStartProvider9PerfStopProvider memcmp memcpy@JpJpKKLKKK0LL L`K@K0K KKJPKIIIIIIJIHHHHHHHHIpI`IPI@I0II IpH`HI0HJJJ84`x$fghe(u@Xp        GzC  /E=G @xREGISTRYFILETYPELIBMUIx4VS_VERSION_INFOD%D%?StringFileInfo040904B0LCompanyNameMicrosoft CorporationFFileDescriptionazroles Modulep(FileVersion6.3.9600.17415 (winblue_r4.141028-1500)0InternalNameazroles.LegalCopyright Microsoft Corporation. All rights reserved.8OriginalFilenameazrolesj%ProductNameMicrosoft Windows Operating SystemBProductVersion6.3.9600.17415DVarFileInfo$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<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]vpfPropWW mGetPropertyW^lPropIdW varReservedW5pvarProp4 'SetPropertyWIvarPropWAddPropertyItemWDeletePropertyItemWW:PolicyAdministrators RpvarAdminsWW "PolicyReadersWWW pvarReadersWzAddPolicyAdministratorWW 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 BizRuleLanguageW BizRuleImportedPathW1IsRoleDefinitionObstrOpWW(bstrTaskOpenTask _bstrTaskNameppTaskWW CreateTaskWW ϦCanBeDelegatedWWP QBizrulesWritablepPolicyAdministratorsNamed qPolicyReadersNameWWW$jAddPolicyAdministratorNameWWcDeletePolicyAdministratorNameWWWAddPolicyReaderNameW<>DeletePolicyReaderNameWW DaOpenScopeWWW +bstrScopeNameWWWppScopeW ѓCreateScopeW| ZDeleteScopeWL4 8IAzOperationsWWW BppOperationCollectionWWW 8 IAzOperation tOperationIDW OpenOperationWWW |bstrOperationNameWWW` a9ppOperationW (CreateOperationW48IAzClientContextD AccessCheckWbstrObjectNameWW  YvarScopeNamesWWWt n#varOperationsWWWVvarParameterNamesWWW IvarParameterValuesWWvarInterfaceNamesWWW -varInterfaceFlagsWWW rvarInterfacesWWW pvarResultsW GetBusinessRuleStringWWWXgpbstrBusinessRuleStringWUserDnWW UserSamCompatWWWH AddDelegatedPolicyUserNameWW sDeleteDelegatedPolicyUserNameWWW%OpenApplicationW4 KbstrApplicationNameW( ڃppApplicationWWWCreateApplicationWWWL DeleteApplicationWWW TargetMachineWWW| gpbstrTargetMachineWW opbApplyStoreSacl CloseApplication| OrlFlagWWWx 8IAzAuthorizationStore2WW8lIAzApplication2W@08}mIAzClientContext2WWW@ZGetAssignedScopesPageWWWSPageSizeD BpvarCursorWW ]pvarScopeNamesWW@;AddRolesvarRoles@AddApplicationGroupsdvarApplicationGroups@ fAddStringSidsWWWP varStringSidsWWW@X 3LDAPQueryDNWpbstrLDAPQueryDND!InitializeClientContextFromToken2WWWlulTokenHandleLowPartl~ulTokenHandleHighPartWWWInitializeClientContext2IdentifyingStringWWWxJEOpenApplication2xCreateApplication2WW8IAzAuthorizationStore3WW2IsUpdateNeededWW$PpbIsUpdateNeeded`BizruleGroupSupportedWWW ?pbSupportedWUpgradeStoresFunctionalLevel8lFunctionalLevel!IsFunctionalLevelUpgradeSupportedWWWGetSchemaVersionOplMajorVersionWWplMinorVersionWW$8mIAzApplication3W ScopeExistsWdpbExistWl4 8IAzScope2WWW 8hIAzRoleDefinitionsWWl$ RoleDefinitionsW@ppRoleDefinitionsWWW4 8IAzRoleDefinitionWWW8)IAzRoleAssignmentsWW4pVRoleAssignmentsW |bRecursiveWW~ppRoleAssignmentsWWW4AddRoleDefinitionWWWhIbstrRoleDefinitionWW4D uDeleteRoleDefinitionl8CreateRoleDefinition4bstrRoleDefinitionNameWWlKuOpenRoleDefinitionWW 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 QBizRuleParametersWWWppBizRuleParamWWT 8IAzBizRuleInterfacesT  fAddInterface6bstrInterfaceNameWWWh4lInterfaceFlagWW varInterfaceT ´AddInterfacesWWWT &GetInterfaceValueWWW XBizRuleInterfacesWWWppBizRuleInterfacesW $ (`GetGroupsWWW [ulOptionsWWW rpGroupArrayW XSids=pStringSidArrayW 80gIAzBizRuleContextWWW Tٍ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$$0AZ_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$ 04?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}ԏ'F 9?On: FILEREGISTRYTYPELIBMUIMUIen-US 00 00000 0$0(0,080 666;;;;;;;;;;;;<<<< <$<(<,<0<4<8<<<@>> >>>>> >$>(>,>0>4>8><>@>D>H>L>P>T>X>\>`>d>h>l>p>t>x>|>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??? ????? ?$?(?,?0?4?8?>> >>>>> >$>(>,>0>4>8><>@>D>H>L>P>T>X>\>`>d>h>l>p>t>x>|>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??? ????? ?$?(?,?0?4?8?>>> >%>*>/>4>9>>>C>H>M>R>W>\>a>f>q>v>{>>>>>>>>>>>>>>>>>>>>>? ?????"?'?,?1?6?A?K?a?k??????000m11`22233%4O445<5c555 66Q6w666f777777D8~8888$9>9g999:n:u:\;d;;<$<<<'=9=K=]=r=====>7>u>>>>>>I???? 01000v12%223#3\3}333&4P444535d5u555616K6666666k7778G88888889:E:O:::::;;<>D>{>>>>?P?[???g0000011L1d1111111272Q22223a3g3t33333>4I4V4c4u44442585E5Y555566+686J66666666677U7b777777888"8<8L8]8j8888879o99999:7:V:u::::::;;\;t;;;;;<>%>2>W>>>|67c7778F8f88889F9b9999|::::;K;V;j;;;;;;<7<@3>@>_>n>>>>> ?@?F?t????0%0R0000001Z111111D222:3g3x33333404G4S4_4g4|444455"5(5s5555556/6=6K66666 7,7:7L7v77777738_88899V9r9991:O:c::::;;B;M;X;o;;;;;;; <7>:>K>Z>_>s>z>>>>>>>>>? ?;?[????0*0Z0001 1$1W1e1j1x111J2^2z22L3n334405A5Z5s555O6667u778888889?9Z9u999:h:::0;m;;"<3M>s???L0r011S22(333334#44445D5Y5t5z5555555555Z6t6667)7777$838:8H8889999:U:d:::::;;;J>_> ?0?o????30l0001y1112}222k3z333404O4i4v44475>5E5L5S5Z55536O6V6[666677`7777&8-8m8v88888 9>9999: :L:U::::::+;C;T;p;;;;;;3Q>_>>>>> ?+?e?p????0=0H000001 1`1k11112A2L222223"3U3[3e3333333333333333334&4C4I4|445 55D5O5l555556 66C6N6k6~6666=7C7J7{77777778?8U888888E9w9}9999d;;;;;;<="=======(>I>^>{>>???0?9???E?l?~?????0'070K0R0X00 1(1F111111 22>2E2K2233%303=3333444"4)4d444/5555Z6u6{6666666777<7777778y8888888H9O9999*:0:;:Q:::::;&;; <<_?>P>>>>>>>> ??*?5?M?Z?e?o???????  070B0l0y00000 11b111111202`2222 3P33334@4s4445=5E5s55555 636I6i6666657u77758u888909C9m9t9999:4:;:]::::;;Y;`;{;;;>3>J>c>>>??E?Q?{?????00'0U0g000000C1I1111112E2223C3s333334,434D4V4~455#535i5555)6Y66667I7y77 88i88889h9999::9:c:u:::::;Y;;;)>@>k>{>>>>>?9?U?y??????@ 0I0f00000 1131H1c11111202[2k222223)3E3i33334 4g44444455M5S55555626E6u6{66 777^7f777777Y8_888889)9I999::2:E::::;;3;F;;;;;;;;<&>3>F>>>>>>>??3?F??????P 0#0.0C0V000001*1K1]1h11111122^2o2|2222222>3O3\3f333333 44I444444H5v5|55556,696R6Z666667*717Q7c77777778L8|888 9<9l999:L:[:d:::;;,;?;;;;;<%<,<=>>>>>> ??J?}??????` 0<0l0000,1\11112L222222393y333<4i444 5N5V55556!6C6N6c6v6666797D7\7o7777798D8\8o88888+9:9H9Z9j9p99999::7:D::::: ;;$;O;];{;;;;;;<<(>">L>|>>> ?0F0000001C1U1{1111192y22293y334;4K4c4w4444555i5555555516D6J6`6666666 77$7*7X7p777777777)8?8k8{888889I9e999999k:q::::;;S;g;m;;;;;;"<=M>m>>>>>??C?W?]?????? 00$0H0c0n0000001(1I1T1l11111 22!2J2X2v222222 3D3J3V3_3s333 4<4s44444 535E5k555556+6S6e6666 7<7l7777,8\888 9K9\9t9999:Y:::;Y;;; >s>~>>>>>????M?k??????090?0K0T0h0000,1\11111#252[2222223C3U3{3334[4l4444445,5P5{55555 6I666 7977778&8[8m888889-9F9i999999 :: :+:;:h:::!;+;1;7;M;X;;;;<+<1<=7>K>>>>>H?N?4000000000f1y1111222>2L2f2y2223303c3l333344$4:4K4e4l44445/5B5K5f5r555566G6P6667D7M7d7m7t7z77777+8>8E8L8x88888888L999*:3:;Y;d;;;===>>?=?[??????? 00$000:0G0Q0^0c0i0o0000111<1L1R122=2K2Q2V2222223&3z333344/454444 5'5;5O5U55556G6[6e6666G7M7W7n7777788889<9B9m9x99999:7:=:j:z:::::::;L;;;;;;,%>+>Y>i>o>>>>>,?O?[??????(000001121o1{1112222m2y222222(3.343<3]33333334/4444$515o55556'6K6R6c666666 77J7R777777778 8;8K8m888888999I9\9b9s99:::%:M:Z::::::::;;i;x;;;;;;<>>,>9>g>>>>>???"?3?@?g?????000,090g00000111,191g1111122'2422222 3$343G3T333333 4$444G4T444444 5$545G5T555555 6$646G6T666666667%727L77777778"8<8|888888Y:<=0=f??0 1D1a1112s222%3`3}33424444D5|555.6K6666Z777 8D8a8889p999":Z:w:: ;);X;d;q;;;;<<.6>D>`>~>>>>>4?V????? 0<0J0011111122G2f2m2s222222223E3d3k3r3x333333344J4i4p4v44444455@5n5t55555566>6l6r66666667<7I7|77777788(8L8z8888889999p:::;E<1#2V2v2222#3V3v3333#4V4v4444#5V5v5555#6V6v6666#7V7v7777#8V8v8888#9V9v9999#:V:v::::#;V;v;;;;#V>v>>>>#?V?|????? 0l11111$2Y2222D3T3g3t3334444444455 66 646l66667i7y77778$8?8|888899L9y9999I:Y:l:y:::;;\;t;;;;;,T>>>>> ?9????0 00,090h0000141111112d2o2222 33H333334m4s44444D5O5t55555(6r66666M7S7`7t777$8/8T888889R9d9999:9:L:q:::::;?;U;;<=%=5=Z===>,>I>\>>>?"?(?J?P?????@D 0001v22222 313F3W44445;55a6666.777777778 88!8/8=8h8r8888889'9N9\9b999999999:":6:<::::::; ;;?;R;z;;;;;;;;;">>-><>C>P>a>r>}>>>>>>>>>>? ???.?3?>?D?J?Q?W?\?b?h?n?u?{?????????????P0%0<0S0j000'1`11111 2D2N222222223333334G4`4g4t4}444445,5y5566666<7R7a7r77788K888889h9p99999":J:p:y:::;g;;<%3>c>n>>> ??J?P?k?r??`` 000m000000 1)1/11111122|22222222%383E3V3\3333327S7p7889 =;>p000111122)2:2I223333]4455(5Y5d556663777788.88888 9[9j9a:g:::;;%;K;;;;|<<<<<< =4=S=p===8>>Q?????0 0G0i0y000000011A1}1111112232D2V2222222-3I3x3333333444/444585g55555 6:6C6Z6w6666666677$707T7z77777778S8y8~88888899*929}9999:+:0:K:h:::::: ;(;2;C;;;;>1>W>a>g>>>>>>>?)?B?z????? 0#0(0a000000 11161P111111%2*2D2]2222222 3%3@3f3~333333*494Z4{44445 5#5H5n5s5555566T66677C7V7m7t777778X8s8z88888859;99':H::::: ;2;M;W;q;;;;;;;;<)<6H>a>>>>> ?1?8?????0;0M0000 1&121E1Q1a1m111112n2v22222233N3j333334R4j444444 545e555556r6y666 7:7V7k77`88K9[9t999999t:}::::::&;`;;;;;;<9j>>>D?N?p?z?????????90E0c0o00001L1W1111111222G334G4h445-64667 7?7m9X:y::1;~;;;;"<.X>h>}>>>>> ?a????000*090001I1N1S1`11112i3333!4+434P4W4a4q44444444455(505d555E6O6W66 7+7J7P7v77778T8X8\8`8d8h8l8p8t8x889:::::;>;H;P;b;k;;;;;;J>F??????00H001o111J223~333344424k444E5n5555556#60696W6i6y666787H7^7z7777778U8889E9w999:P::::;9;\;n;u;;;;;;<=>>[?u??0(0D0N0_0i0x000000119112k2w23"3@3J3444&595C5U55516h6666666677G7Q7Y7q7{777778D8o88L9V9`9m9w999999999::O::3;l;;;;;;2[>>???@?J?t??????60V0a0i00000"1,141`112202F2P2X222222333?33333#4\44455/5<5}5-646N6a666677s888888d99"::::::;;i<<<7={==*>U>U?|????0$0B0Q00l1u11112_2e2}2223'343;3E3M333544444455566-8o88%9R9999:/:X: ;;*;0;};;;;;;;;x<<<<<<=-=====>'>L>>>>>>?!?B?n?u???????B0A23X333S4Y4p4v45555556:6A6P6]66677U8`888%9 :0:::::6;<;K;R;\;;><"=(===|===>>>>?.?W?w???????? 070G0P0|0001112223<3[33'4,414D4555&6/6y6666 7C777?8L88889'9Z9o999999:5:z:::::::F;a;;;;;<.>D>u>>>???0i0{0[1v1k2223393l3r33W4t444445$5z555=6C6k666667^7l777777-8I8O8i88888 999:*:Z:e:::::g;{;;;;;;;C<\>>>>>> ?q???@t00911J2U22222"363^3333I45555r6.77]888888r999@;r;};;<<3>>>P0p000011233E3V3344o55g6697i7!8 9H9e9::::::/;@;P;_;t;;;;;;<\<<<<==6=I=Q========.>8>`>h>>??``0d0:111112#252A2U2r22222333 7.7K7 ;_;=5>P>T>X>\>`>d>h>l>p>t>x>> ?(?7?H??p0'0:0K00000(1m11142M2\2m2233W333J4c4r4445$5C55556$6;6J6[666717P7z777778 8]8(9%>>????? 0*0E0u00O112$2.2@2Q2^2o222343O3u334$4M4h444444445?5[5o5x555#606>6S66V7k77777(838;8i8849O9Z9m9z99i:x::::::::;+;Y;;;<)<>%>*>8>I>v>>>>??;?R?_?i????030U0x0000 11@1]1t111111162Y223=3~33333!494Y4f4444444,5:5b5l555555/6u66666(7I7m777778\8j888899:9[99999:+:::V:::::::;&;O;;&>M>h>>>??Y?d?v??90A0o0w001!1t1}11112(2-2d2}2222222 33K3n3z334'4-4K4q4w44444 575<5Y5^5556.66677l7778G8s8 949U9`9999:: ;>;r;;;<4`>p>>>>?'?=?i??????!0B0l00000011&151`1|1111122+262]22222 33O3Z3y333334r44445*5C5]5j5555566$6K6g66666677:7f7777 888888889!9n999999:+:Y:{::::::::;;9;E;Y;|;;;;;;0<@<`>>(>R>^>e>>a????0@000000101l11112(2E2Q2Z2v222222233$313p3u4~4444E5W5e555-6:666666667*777@7W7n7|7778 8o888888`9999999 :[:::::;<G>^>>> ?-?@?i???????0 00<0g0~0000000y11111122"20282F2U2c2v2222233$313:3Y3`3u33333334$484?4L4z44444444(5i5555566'6B6K6`6z6666767A7`7|7777777 88B888889@9R9f999999 ::>:F:::&;O;^;m;t;;;;=W======== >>H>S>y>>>>?&??000001G1U1b1111 2K2e2222 3(343]33444@4O4W4e4m44444445+5R5Z5r55$6^6i6667,7>7[7777)848H8q8888889*9@9999+:2:U:c:k:::::::::G;U;];y;;;;;<<<7> >*>@>N>d>r>>>> ?b?l??????0&020u0000&1.1G11O2333 454>4{4444+5Q55555(6F6a66 7&7<7Y7{77777'888>8K8W8e8o888 969@9U9[9x99999::":u::::;;);];k;t;;;;;;<83>A>>>>???? 00)0.0G0T0b0g0 111K2e2m2u22263T3[3~333333j4q444^555555&6T6m6{6666677:7F7a7777798O8Z888888[99999J::::;3;A;h;y;;;;; <(<4>>>??!0>0J0y000 1'101>1O1^1f111111122)212B2N2a2o2y222222233;3D3R3c3q3y3333333 4/4=4G4_4m4{444444*545u555555566[6k66667707A7N777777&8^8q89999999::*:x::::::::;!;;;J;V;;;;*0{000000'1f1)2/2N256!666J777)8m889C99:":Z:c:::;';G;;;J=p==>c?@001112.2222223B3O333333334 44!4=4C4444444 55 5Y5y5555556*606=6U6^6f6m6666 777;7D7L77778 88(868<8[8c8o8u8888 99!9'9u9:::::::;7;k;r;};;0<7<<<<<==V=r=x=)>/>>>?e?|????P~0002252V2n2w22233$3E3l33 4"4g444v55556"6:6D6{66667%7788u999::;;X;a;;_<<<<6=?=g=u=====>>(>1>>`000T1v1111115233334+424F4M4445(5I5Z55555686666-787w77718;8E8O8888909F9V9^9o9999999:.:9:N:\:f::::::::::;H;N;~;;<$<[<<<>2>=>>>>?po000?111112x2223334 4464y4444444 55*585@5T5b5j5555555!6d6o66666H7`77777788838L8`88 9979M9V99990:E::::::;*;8;P;m;;;;;;;;<+<<<<<<<$=+=2=9=@=_=f=m=t=z=====/>P>V>t>>>>>>???"?;?F?_?o?|??????????0000)0/050<0|0011W11112D223'3S3z333424e444444d5n5v5555g6663777838R8i888899*949<9R9\9d9999::I:y::::: ;;Z;;;<'<;>>>>>?? ?n?w?}????30e0000$1T1[11111)22222223'3333[4444445@5Q5m55677A7e77778]8889.9K9r999999):C:d::::::;;$;>;w;;;;;;;<==>?T?j?????0 0$0(0a000011112[223$3y333333344$4)4q44443555567L7777?8M8j888889979D9Q9V99a:::W;;;; <6<<E>L>i>>>X??0.0W0m00S112P2f2222223!3.3;3@333#4c4444G5v55555636M6Z6666d7`8o889929I999"::4;[;;;;>>?K?a????0q000'1D1[1111111122&232x222222333!3n33244-525b5v5555 66`66777d7v77777 8X8\8`8d8h8l8p8t8x8|888W99999999999Y:::;;P;f;;; <6<\">9>i>>>>>>>>>??.?i??????0*0t00011j123345444 6666"7,7C7Y7 8+898d88888'9999:E:R:v:::3;;; <_>>>>??.?]?q???????0'0;0J0g0q0000K1i11112K2\222222223%3/343G34!4&4L4R4b4{444444445"5.575@5E5L5Q5d5r5555555"6I6a6u666666\77778*8<8I8~8888889+9K9j9w99999:F:O:;H;Q;;;;;;;C)><>E>>>>!?1?]?y????? 0020E0R0h0y00000131=1Q1g1s11111+2Y2c2w222424K4`4p4445$5=5S5`5g55506D6L6U6x66667*7n7777>8_8x8888889[999999+:::; ;";k;r;w;;;;;)<:<<<<<<=!=D={=====$>@>V>y>>>>>?r????0D000h111112O2z222 3333344"474M444>5i555566g6u666707P7g777778Q8k8888 9929B9999:/:O:]:u:::::/;:;N;Y;r;;;;;<+<8&>I>>>>>>>>?.?;?u??????p0000011-1U1e1o111112}222;3J3%4[4p4x444445U5555546y666667707D7Q7{9999:::::G;k;u;;;;;;;<#=V=q===>&>5>K>a>>>?s?? 40-0F0001111112 2222#2)2/252;2A2G2M2S2Y2_2e2p2t2x2|22222222222222222222444444444444444455 5555%5+51575=5C5I5O5U5[5a5g5m5x5|5555555555555555555555555555555556r7w7}77777777777777777777778 88888 8$8(8,8084888<8@8D8H8L8P8T8X8\8`8d8h88.93999?9E9K9Q9W9]9c9i9o9u99999999999999:::::::::::::::::::;;; ;;;;; ;$;(;,;0;4;J;;;;;;;<< <<<$<(<,<0<4<8<<<@H>v>>>>>]?????0h*0?0r00000000000000%1U1i11112222%232B2H2\2b2n22222222223 33343U3d333445 55#5_555556%6*686B6V66666666667$7.7M7g7l7q7777777 8848<8B8e8m8t8z88888888999.969I9U9]9999:&:;:_;w;;; :>>>>>>>>>>>?????$?+?3?;?C?O?X?]?c?m?w????????????@D00 000!0(0/060=0C0O0Z0_0d0j0t0~00000000011r1~11222*2I222223r3w333$40444 5G5p5|55556-6A6G6 7$707?7H7Q7f7{777777777718C8a8q88888888899!919A9Q9a9q999999999::#:A:S:q:::::::;!;1;A;Q;a;q;;;;;;;<I>{>>>?I?~???P30c0001Q111+2S22223C3333 4G4}44444)5[5555#6U6666!7S7777#8W8888'9[9999+:_:::';c;;;<'L>b>>>>?!?S?s????`@#0K0s000171b1y111!2[22222 3N3333!404@4P4`4p44444455$545_5n5~5555556g666.7w7778@8x88888919c9999999:::!:2:6:;:R:V:[:p::::::::;$;@;P;\;d;;;;;;;;<<$<, >,>8>X>d>l>>>>>>>??$?D?L?T?\?t?x???????p00 0@0L0l0t0000000111<1D1P1X1p1x111111122$2D2L2T2\2h2222222 3383D3d3p333333334$404P4X4d4444444445 5,585X5`5l555555566<6H6h6t66666667 7,7L7X7`77777777 88 8@8\8l8x888888899,989@9`9|99999999: :<:L:X:`:::::::: ;; ;@;\;l;x;;;;;;;<<,<8<@<`<|<<<<<<<<=$=4=t===========>>0>8>T>d>p>x>>>>>>>? ?,?4?@?`?l?t???????? 0(040T0`0h0000000001$10181X1`1|1111111122(202L2\2h2p2222222233,383X3d3l3333334,404L4P4\4d444444555$5,545@5H55555555646D6\6`6h6l6t6x6666666666666666677 7$7<7@7H7L7T7X7`7d7l7p7777777777777778(8D8H8T8t888888888889 9,9L9X9`9x99999999: :: :@:H:T:t:::::::::; ;;$;,;8;X;d;;;;;;;;;;<<<>>,>0>L>P>p>|>>>>>>>? ?? ?T?\?d?p?????????(0$0,040<0D0L0X0x00000000001$1,141@1`1h1p1x111111112 22 2@2H2P2X2`2h2t222222222333\3d3l3x33333333444<4X4`4h4t4444444 555$5X5`5d5l5p5x5|555555555555556,686@6p6666666666777$7,7@7H7P7X7l7t7|77777777777777$0004080<0h0l0p0t000000000000111 1$1(1,10141L1`1h1l1p1t1111111111111111111222 22222 2,2024282<2@2D2H2L2P2T2`2d2h2l2p2t2|22222222222222222222222222222222333 3333 3$3@3D3`3d33333333344 4$4@4D4`4d44444444455 5$5@5D5`5d55555555566 6$6@6D6`6d66666666677(747@7L7X7x:::::::; ;;;;;$;(;,;0;8;@;H;L;P;T;X;`;h;l;;;;;;< <<4<`8>@>H>P>X>x>>>>>>> ? ?4?H?\?p???????????000 080H0L0d0h000000000000000011 11,1<1L1\1l1|111111 22,2<2L2l22222222 33D3T3d333h4x444::::::::;;;;;$;,;0;8;@;D;L;T;X;h;l;|;;;;;;;;;;;;;;< << <0<4>>>>$>(>0>8><>L>P>X>`>d>t>x>>>>>>>>>>>>>>>>?? ??? ?(?,?4?