1 tx
2 calls
constructor
constructor(address initialAdmin)
functions
addressRegistry
viewfunction addressRegistry() view returns (address)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (uint64)
allowlistEnabled
viewfunction allowlistEnabled() view returns (bool)
canCall
viewfunction canCall(address caller, address target, bytes4 selector) view returns (bool immediate, uint32 delay)
expiration
viewfunction expiration() view returns (uint32)
getAccess
viewfunction getAccess(uint64 roleId, address account) view returns (uint48 since, uint32 currentDelay, uint32 pendingDelay, uint48 effect)
getLabel
viewfunction getLabel(uint64 roleId) view returns (string)
getMemberCount
viewfunction getMemberCount(uint64 roleId) view returns (uint256)
getNonce
viewfunction getNonce(bytes32 id) view returns (uint32)
getRoleAdmin
viewfunction getRoleAdmin(uint64 roleId) view returns (uint64)
getRoleGrantDelay
viewfunction getRoleGrantDelay(uint64 roleId) view returns (uint32)
getRoleGuardian
viewfunction getRoleGuardian(uint64 roleId) view returns (uint64)
getSchedule
viewfunction getSchedule(bytes32 id) view returns (uint48)
getSingleMember
viewfunction getSingleMember(uint64 roleId) view returns (address)
getTargetAdminDelay
viewfunction getTargetAdminDelay(address target) view returns (uint32)
getTargetFunctionRole
viewfunction getTargetFunctionRole(address target, bytes4 selector) view returns (uint64)
hashOperation
viewfunction hashOperation(address caller, address target, bytes data) view returns (bytes32)
hasRole
viewfunction hasRole(uint64 roleId, address account) view returns (bool isMember, uint32 executionDelay)
isSingleMemberRole
viewfunction isSingleMemberRole(uint64 roleId) view returns (bool)
isTargetClosed
viewfunction isTargetClosed(address target) view returns (bool)
minSetback
viewfunction minSetback() view returns (uint32)
PUBLIC_ROLE
viewfunction PUBLIC_ROLE() view returns (uint64)
cancel
nonpayablefunction cancel(address caller, address target, bytes data) returns (uint32)
consumeScheduledOp
nonpayablefunction consumeScheduledOp(address caller, bytes data)
disableAllowlist
nonpayablefunction disableAllowlist()
enableAllowlist
nonpayablefunction enableAllowlist()
execute
payablefunction execute(address target, bytes data) payable returns (uint32)
grantRole
nonpayablefunction grantRole(uint64 roleId, address account, uint32 executionDelay)
grantSingleMemberRole
nonpayablefunction grantSingleMemberRole(uint64 roleId, address account, uint32 executionDelay)
initializeAddressRegistry
nonpayablefunction initializeAddressRegistry(address _addressRegistry)
labelRole
nonpayablefunction labelRole(uint64 roleId, string label)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
renounceRole
nonpayablefunction renounceRole(uint64 roleId, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(uint64 roleId, address account)
schedule
nonpayablefunction schedule(address target, bytes data, uint48 when) returns (bytes32 operationId, uint32 nonce)
setGrantDelay
nonpayablefunction setGrantDelay(uint64 roleId, uint32 newDelay)
setRoleAdmin
nonpayablefunction setRoleAdmin(uint64 roleId, uint64 admin)
setRoleGuardian
nonpayablefunction setRoleGuardian(uint64 roleId, uint64 guardian)
setTargetAdminDelay
nonpayablefunction setTargetAdminDelay(address target, uint32 newDelay)
setTargetClosed
nonpayablefunction setTargetClosed(address target, bool closed)
setTargetFunctionRole
nonpayablefunction setTargetFunctionRole(address target, bytes4[] selectors, uint64 roleId)
updateAuthority
nonpayablefunction updateAuthority(address target, address newAuthority)
events
AllowlistDisabled
event AllowlistDisabled(address indexed caller)
AllowlistEnabled
event AllowlistEnabled(address indexed caller)
OperationCanceled
event OperationCanceled(bytes32 indexed operationId, uint32 indexed nonce)
OperationExecuted
event OperationExecuted(bytes32 indexed operationId, uint32 indexed nonce)
OperationScheduled
event OperationScheduled(bytes32 indexed operationId, uint32 indexed nonce, uint48 schedule, address caller, address target, bytes data)
RoleAdminChanged
event RoleAdminChanged(uint64 indexed roleId, uint64 indexed admin)
RoleGrantDelayChanged
event RoleGrantDelayChanged(uint64 indexed roleId, uint32 delay, uint48 since)
RoleGranted
event RoleGranted(uint64 indexed roleId, address indexed account, uint32 delay, uint48 since, bool newMember)
RoleGuardianChanged
event RoleGuardianChanged(uint64 indexed roleId, uint64 indexed guardian)
RoleLabel
event RoleLabel(uint64 indexed roleId, string label)
RoleRevoked
event RoleRevoked(uint64 indexed roleId, address indexed account)
SingleMemberSet
event SingleMemberSet(uint64 indexed roleId, address indexed member)
SingleMemberUnset
event SingleMemberUnset(uint64 indexed roleId, address indexed member)
TargetAdminDelayUpdated
event TargetAdminDelayUpdated(address indexed target, uint32 delay, uint48 since)
TargetClosed
event TargetClosed(address indexed target, bool closed)
TargetFunctionRoleUpdated
event TargetFunctionRoleUpdated(address indexed target, bytes4 selector, uint64 indexed roleId)
errors
AccessManagerAlreadyScheduled
error AccessManagerAlreadyScheduled(bytes32 operationId)
AccessManagerBadConfirmation
error AccessManagerBadConfirmation()
AccessManagerExpired
error AccessManagerExpired(bytes32 operationId)
AccessManagerInvalidInitialAdmin
error AccessManagerInvalidInitialAdmin(address initialAdmin)
AccessManagerLockedRole
error AccessManagerLockedRole(uint64 roleId)
AccessManagerNotReady
error AccessManagerNotReady(bytes32 operationId)
AccessManagerNotScheduled
error AccessManagerNotScheduled(bytes32 operationId)
AccessManagerUnauthorizedAccount
error AccessManagerUnauthorizedAccount(address msgsender, uint64 roleId)
AccessManagerUnauthorizedCall
error AccessManagerUnauthorizedCall(address caller, address target, bytes4 selector)
AccessManagerUnauthorizedCancel
error AccessManagerUnauthorizedCancel(address msgsender, address caller, address target, bytes4 selector)
AccessManagerUnauthorizedConsume
error AccessManagerUnauthorizedConsume(address target)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressRegistryAlreadyInitialized
error AddressRegistryAlreadyInitialized()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidAddress
error InvalidAddress()
MultipleMembersNotAllowed
error MultipleMembersNotAllowed(uint64 roleId)
ReservedRole
error ReservedRole(uint64 roleId)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SingleMemberAlreadySet
error SingleMemberAlreadySet(uint64 roleId, address member)
SingleMemberNotSet
error SingleMemberNotSet(uint64 roleId)
creation bytecode
0x60806040523461002f576100196100146100f4565b6103f9565b610021610034565b6154aa610ffa82396154aa90f35b61003a565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906100669061003e565b810190811060018060401b0382111761007e57604052565b610048565b9061009661008f610034565b928361005c565b565b5f80fd5b60018060a01b031690565b6100b09061009c565b90565b6100bc816100a7565b036100c357565b5f80fd5b905051906100d4826100b3565b565b906020828203126100ef576100ec915f016100c7565b90565b610098565b6101126164a48038038061010781610083565b9283398101906100d6565b90565b5f1b90565b9061012660ff91610115565b9181191691161790565b151590565b61013e90610130565b90565b90565b9061015961015461016092610135565b610141565b825461011a565b9055565b5f90565b60018060401b031690565b90565b61018a61018561018f92610168565b610173565b610168565b90565b9061019c90610176565b5f5260205260405f2090565b634e487b7160e01b5f52602260045260245ffd5b90600160028304921680156101dc575b60208310146101d757565b6101a8565b91607f16916101cc565b5f5260205f2090565b601f602091010490565b1b90565b919060086102189102916102125f19846101f9565b926101f9565b9181191691161790565b90565b61023961023461023e92610222565b610173565b610222565b90565b90565b919061025a61025561026293610225565b610241565b9083546101fd565b9055565b5f90565b61027c91610276610266565b91610244565b565b5b81811061028a575050565b806102975f60019361026a565b0161027f565b9190601f81116102ad575b505050565b6102b96102de936101e6565b9060206102c5846101ef565b830193106102e6575b6102d7906101ef565b019061027e565b5f80806102a8565b91506102d7819290506102ce565b610309600a61030383546101bc565b8361029d565b60147f41444d494e5f524f4c4500000000000000000000000000000000000000000000019055565b61033a906102f4565b565b60018060401b0390565b61035b600b61035583546101bc565b8361029d565b60167f5055424c49435f524f4c45000000000000000000000000000000000000000000019055565b61038c90610346565b565b90565b6103a56103a06103aa9261038e565b610173565b610222565b90565b906103b790610176565b5f5260205260405f2090565b906103cf5f1991610115565b9181191691161790565b906103ee6103e96103f592610225565b610241565b82546103c3565b9055565b610402906104dd565b61040e60016008610144565b610429610424600761041e610164565b90610192565b610331565b61044461043f600761043961033c565b90610192565b610383565b6104696104516001610391565b610464600561045e610164565b906103ad565b6103d9565b565b90565b61048261047d6104879261046b565b610173565b61009c565b90565b6104939061046e565b90565b61049f906100a7565b9052565b91906104b6905f60208501940190610496565b565b63ffffffff1690565b6104d56104d06104da9261046b565b610173565b6104b8565b90565b806104f86104f26104ed5f61048a565b6100a7565b916100a7565b146105285761052590610509610164565b905f9061051f6105195f936104c1565b926104c1565b926105b3565b50565b6105526105345f61048a565b61053c610034565b918291630409d6d160e11b8352600483016104a3565b0390fd5b5f90565b5f1c90565b90565b61056e6105739161055a565b61055f565b90565b6105809054610562565b90565b634e487b7160e01b5f52601160045260245ffd5b6105a090610222565b5f1981146105ae5760010190565b610583565b926105cb926105c0610556565b5084929091926108f6565b90816105d6575b5090565b6105e46105fb9160056103ad565b6105f56105f082610576565b610597565b906103d9565b5f6105d2565b61060a90610168565b9052565b9190610621905f60208501940190610601565b565b9061062d90610176565b5f5260205260405f2090565b61064d6106486106529261009c565b610173565b61009c565b90565b61065e90610639565b90565b61066a90610655565b90565b9061067790610661565b5f5260205260405f2090565b65ffffffffffff1690565b61069a61069f9161055a565b610683565b90565b6106ac905461068e565b90565b65ffffffffffff1690565b6106ce6106c96106d39261046b565b610173565b6106af565b90565b5f90565b60301c90565b60018060701b031690565b6106f76106fc916106da565b6106e0565b90565b61070990546106eb565b90565b60301b90565b9061072a6601000000000000600160a01b039161070c565b9181191691161790565b60018060701b031690565b61075361074e61075892610734565b610173565b610734565b90565b90565b9061077361076e61077a9261073f565b61075b565b8254610712565b9055565b61079261078d610797926104b8565b610173565b6106af565b90565b6107a66107ac916106af565b916106af565b019065ffffffffffff82116107bd57565b610583565b6107cc6040610083565b90565b906107d9906106af565b9052565b906107e790610734565b9052565b6107f590516106af565b90565b9061080965ffffffffffff91610115565b9181191691161790565b61082761082261082c926106af565b610173565b6106af565b90565b90565b9061084761084261084e92610813565b61082f565b82546107f8565b9055565b61085c9051610734565b90565b9061088960205f61088f9461088182820161087b8488016107eb565b90610832565b019201610852565b9061075e565b565b9061089b9161085f565b565b6108a6906104b8565b9052565b6108b3906106af565b9052565b6108c090610130565b9052565b6040906108ed6108f494969593966108e360608401985f85019061089d565b60208301906108aa565b01906108b7565b565b919290610901610556565b508261091c61091661091161033c565b610168565b91610168565b14610a81576109435f61093d8161093560018890610623565b01849061066d565b016106a2565b61095561094f5f6106ba565b916106af565b149361095f6106d6565b50845f14610a21576109829061097c610976610bb2565b9161077e565b9061079a565b926109cd846109b061099386610be3565b6109a761099e6107c2565b935f85016107cf565b602083016107dd565b6109c85f6109c060018690610623565b01859061066d565b610891565b5b9091928493610a1b610a09610a037ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf95610176565b95610661565b95610a12610034565b938493846108c4565b0390a390565b50610a7c92610a5b610a4b5f610a4581610a3d60018790610623565b01869061066d565b016106ff565b84610a555f6104c1565b91610b0a565b94905f610a7681610a6e60018790610623565b01869061066d565b0161075e565b6109ce565b610aa383610a8d610034565b91829163061c6a4360e21b83526004830161060e565b0390fd5b5f90565b610ab7610abd916104b8565b916104b8565b90039063ffffffff8211610acd57565b610583565b610ae6610ae1610aeb926104b8565b610173565b610222565b90565b610b02610afd610b0792610222565b610173565b6104b8565b90565b90610b90610b79610b74610b35610b9995979697610b26610aa7565b50610b2f6106d6565b50610bfc565b9687610b49610b43876104b8565b916104b8565b115f14610b9d57610b6e610b68610b618a8890610aab565b925b610ad2565b91610ad2565b90610c13565b610aee565b610b8a610b84610bb2565b9161077e565b9061079a565b93908491610cc6565b9190565b610b6e610b68610bac5f6104c1565b92610b63565b610bba6106d6565b50610bc442610db2565b90565b610bdb610bd6610be0926104b8565b610173565b610734565b90565b610bf590610bef610aa7565b50610bc7565b90565b5f90565b610c0e90610c08610bf8565b50610e0c565b505090565b610c3c91610c1f610266565b5081610c33610c2d83610222565b91610222565b11919091610e4e565b90565b610c53610c4e610c58926106af565b610173565b610734565b90565b90565b60ff1690565b610c78610c73610c7d92610c5b565b610173565b610c5e565b90565b610c9f90610c99610c93610ca494610c5e565b91610734565b906101f9565b610734565b90565b90565b610cbe610cb9610cc392610ca7565b610173565b610c5e565b90565b610d1590610d0e610cfe610cf8610ce8610d1b97610ce2610aa7565b50610c3f565b610cf26040610c64565b90610c80565b92610bc7565b610d086020610caa565b90610c80565b1791610bc7565b1761073f565b90565b610d32610d2d610d37926106af565b610173565b610222565b90565b90565b610d51610d4c610d5692610d3a565b610173565b610c5e565b90565b610d6290610d3d565b9052565b610d6f90610222565b9052565b916020610d94929493610d8d60408201965f830190610d59565b0190610d66565b565b610daa610da5610daf92610222565b610173565b6106af565b90565b610dba6106d6565b5080610dd4610dce65ffffffffffff610d1e565b91610222565b11610de557610de290610d96565b90565b6030610e08610df2610034565b9283926306dfcc6560e41b845260048401610d73565b0390fd5b610e3990610e18610bf8565b50610e21610bf8565b50610e2a6106d6565b50610e33610bb2565b90610eaf565b9192909190565b90610e4b9102610222565b90565b610e68610e6e9293610e5e610266565b5080941891610f18565b90610e40565b1890565b610e86610e81610e8b926104b8565b610173565b6104b8565b90565b610ea6610ea0610eac92959395610e72565b946104c1565b926106ba565b90565b610ed390610ebb610bf8565b50610ec4610bf8565b50610ecd6106d6565b50610f89565b92909192919290610eed610ee784926106af565b916106af565b11155f14610f0d575050610f03905f8091610e8e565b919290925b929190565b929092919291610f08565b610f20610266565b50151590565b610f3a610f35610f3f92610734565b610173565b6104b8565b90565b1c90565b610f6590610f5f610f59610f6a94610c5e565b91610734565b90610f42565b610734565b90565b610f81610f7c610f8692610734565b610173565b6106af565b90565b610fad90610f95610bf8565b50610f9e610bf8565b50610fa76106d6565b5061073f565b90610fb782610f26565b90610ff0610feb610fda610fd586610fcf6020610caa565b90610f46565b610f26565b94610fe56040610c64565b90610f46565b610f6d565b9291929192919056fe60806040526004361015610013575b611566565b61001d5f356102bc565b806308d6122d146102b75780630a50dcd8146102b25780630b0a93ba146102ad57806312be8727146102a8578063167bd395146102a357806318ff183c1461029e5780631cff79cd1461029957806325c471a014610294578063301933cd1461028f5780633078f1141461028a57806330cae187146102855780633adc277a146102805780633ca7c02a1461027b5780634136a33c146102765780634665096d146102715780634c1da1e21461026c5780635296295214610267578063530dd456146102625780635706c2c31461025d5780636d5115bd1461025857806375b238fc146102535780637f38c1ad1461024e578063853551b81461024957806394c7d7ee1461024457806394c8e4ff1461023f578063a166aa891461023a578063a64d95ce14610235578063abd9bd2a14610230578063ac9650d81461022b578063b700961314610226578063b7d2b16214610221578063c6a2aac81461021c578063cc1b6c8114610217578063cf8e629a14610212578063d078ce711461020d578063d1f856ee14610208578063d22b598914610203578063d6bb62c6146101fe578063f3ad65f4146101f9578063f801a698146101f4578063fba34aa8146101ef5763fe0776f50361000e57611532565b6114fe565b6114c4565b6113f6565b611324565b6112f0565b61128c565b611257565b6111ff565b6111ca565b611197565b611163565b61112c565b611099565b610f08565b610e60565b610dfe565b610dc9565b610d56565b610d22565b610c68565b610c11565b610bcc565b610b3d565b610b08565b610ad4565b610a9f565b610a4c565b610a17565b6109e2565b610987565b6108fa565b610893565b6107db565b610785565b6106fc565b610643565b6105e2565b610558565b6104f8565b6104a1565b6103e1565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b60018060a01b031690565b6102e8906102d4565b90565b6102f4816102df565b036102fb57565b5f80fd5b9050359061030c826102eb565b565b5f80fd5b5f80fd5b5f80fd5b909182601f830112156103545781359167ffffffffffffffff831161034f57602001926020830284011161034a57565b610316565b610312565b61030e565b67ffffffffffffffff1690565b61036f81610359565b0361037657565b5f80fd5b9050359061038782610366565b565b906060828203126103d7576103a0815f84016102ff565b92602083013567ffffffffffffffff81116103d2576103c4836103cf92860161031a565b93909460400161037a565b90565b6102d0565b6102cc565b5f0190565b34610413576103fd6103f4366004610389565b9291909161164f565b6104056102c2565b8061040f816103dc565b0390f35b6102c8565b906020828203126104315761042e915f0161037a565b90565b6102cc565b5190565b60209181520190565b90825f9392825e0152565b601f801991011690565b6104776104806020936104859361046e81610436565b9384809361043a565b95869101610443565b61044e565b0190565b61049e9160208201915f818403910152610458565b90565b346104d1576104cd6104bc6104b7366004610418565b6117e8565b6104c46102c2565b91829182610489565b0390f35b6102c8565b6104df90610359565b9052565b91906104f6905f602085019401906104d6565b565b346105285761052461051361050e366004610418565b611855565b61051b6102c2565b918291826104e3565b0390f35b6102c8565b63ffffffff1690565b61053f9061052d565b9052565b9190610556905f60208501940190610536565b565b346105885761058461057361056e366004610418565b6118b4565b61057b6102c2565b91829182610543565b0390f35b6102c8565b151590565b61059b8161058d565b036105a257565b5f80fd5b905035906105b382610592565b565b91906040838203126105dd57806105d16105da925f86016102ff565b936020016105a6565b90565b6102cc565b34610611576105fb6105f53660046105b5565b906118fd565b6106036102c2565b8061060d816103dc565b0390f35b6102c8565b919060408382031261063e578061063261063b925f86016102ff565b936020016102ff565b90565b6102cc565b346106725761065c610656366004610616565b906119fa565b6106646102c2565b8061066e816103dc565b0390f35b6102c8565b909182601f830112156106b15781359167ffffffffffffffff83116106ac5760200192600183028401116106a757565b610316565b610312565b61030e565b9190916040818403126106f7576106cf835f83016102ff565b92602082013567ffffffffffffffff81116106f2576106ee9201610677565b9091565b6102d0565b6102cc565b61072461071361070d3660046106b6565b91611b84565b61071b6102c2565b91829182610543565b0390f35b6107318161052d565b0361073857565b5f80fd5b9050359061074982610728565b565b90916060828403126107805761077d610766845f850161037a565b9361077481602086016102ff565b9360400161073c565b90565b6102cc565b346107b45761079e61079836600461074b565b91611d25565b6107a66102c2565b806107b0816103dc565b0390f35b6102c8565b6107c2906102df565b9052565b91906107d9905f602085019401906107b9565b565b3461080b576108076107f66107f1366004610418565b611da0565b6107fe6102c2565b918291826107c6565b0390f35b6102c8565b9190604083820312610838578061082c610835925f860161037a565b936020016102ff565b90565b6102cc565b65ffffffffffff1690565b6108519061083d565b9052565b61088a61089194610880606094989795610876608086019a5f870190610848565b6020850190610536565b6040830190610536565b0190610848565b565b346108c8576108c46108af6108a9366004610810565b90611e84565b906108bb9492946102c2565b94859485610855565b0390f35b6102c8565b91906040838203126108f557806108e96108f2925f860161037a565b9360200161037a565b90565b6102cc565b346109295761091361090d3660046108cd565b90611f12565b61091b6102c2565b80610925816103dc565b0390f35b6102c8565b90565b61093a8161092e565b0361094157565b5f80fd5b9050359061095282610931565b565b9060208282031261096d5761096a915f01610945565b90565b6102cc565b9190610985905f60208501940190610848565b565b346109b7576109b36109a261099d366004610954565b611f34565b6109aa6102c2565b91829182610972565b0390f35b6102c8565b5f9103126109c657565b6102cc565b67ffffffffffffffff90565b6109df6109cb565b90565b34610a12576109f23660046109bc565b610a0e6109fd6109d7565b610a056102c2565b918291826104e3565b0390f35b6102c8565b34610a4757610a43610a32610a2d366004610954565b611f9e565b610a3a6102c2565b91829182610543565b0390f35b6102c8565b34610a7c57610a5c3660046109bc565b610a78610a67611fde565b610a6f6102c2565b91829182610543565b0390f35b6102c8565b90602082820312610a9a57610a97915f016102ff565b90565b6102cc565b34610acf57610acb610aba610ab5366004610a81565b61202d565b610ac26102c2565b91829182610543565b0390f35b6102c8565b34610b0357610aed610ae73660046108cd565b90612076565b610af56102c2565b80610aff816103dc565b0390f35b6102c8565b34610b3857610b34610b23610b1e366004610418565b6120a3565b610b2b6102c2565b918291826104e3565b0390f35b6102c8565b34610b6b57610b55610b50366004610a81565b612212565b610b5d6102c2565b80610b67816103dc565b0390f35b6102c8565b63ffffffff60e01b1690565b610b8581610b70565b03610b8c57565b5f80fd5b90503590610b9d82610b7c565b565b9190604083820312610bc75780610bbb610bc4925f86016102ff565b93602001610b90565b90565b6102cc565b34610bfd57610bf9610be8610be2366004610b9f565b9061223f565b610bf06102c2565b918291826104e3565b0390f35b6102c8565b5f90565b610c0e610c02565b90565b34610c4157610c213660046109bc565b610c3d610c2c610c06565b610c346102c2565b918291826104e3565b0390f35b6102c8565b610c4f9061058d565b9052565b9190610c66905f60208501940190610c46565b565b34610c9857610c94610c83610c7e366004610418565b61226c565b610c8b6102c2565b91829182610c53565b0390f35b6102c8565b909182601f83011215610cd75781359167ffffffffffffffff8311610cd2576020019260018302840111610ccd57565b610316565b610312565b61030e565b919091604081840312610d1d57610cf5835f830161037a565b92602082013567ffffffffffffffff8111610d1857610d149201610c9d565b9091565b6102d0565b6102cc565b34610d5157610d3b610d35366004610cdc565b916124fd565b610d436102c2565b80610d4d816103dc565b0390f35b6102c8565b34610d8557610d6f610d693660046106b6565b91612537565b610d776102c2565b80610d81816103dc565b0390f35b6102c8565b1c90565b60ff1690565b610da4906008610da99302610d8a565b610d8e565b90565b90610db79154610d94565b90565b610dc660085f90610dac565b90565b34610df957610dd93660046109bc565b610df5610de4610dba565b610dec6102c2565b91829182610c53565b0390f35b6102c8565b34610e2e57610e2a610e19610e14366004610a81565b61264a565b610e216102c2565b91829182610c53565b0390f35b6102c8565b9190604083820312610e5b5780610e4f610e58925f860161037a565b9360200161073c565b90565b6102cc565b34610e8f57610e79610e73366004610e33565b9061268b565b610e816102c2565b80610e8b816103dc565b0390f35b6102c8565b91606083830312610ee157610eab825f85016102ff565b92610eb983602083016102ff565b92604082013567ffffffffffffffff8111610edc57610ed89201610677565b9091565b6102d0565b6102cc565b610eef9061092e565b9052565b9190610f06905f60208501940190610ee6565b565b34610f3c57610f38610f27610f1e366004610e94565b92919091612703565b610f2f6102c2565b91829182610ef3565b0390f35b6102c8565b909182601f83011215610f7b5781359167ffffffffffffffff8311610f76576020019260208302840111610f7157565b610316565b610312565b61030e565b90602082820312610fb1575f82013567ffffffffffffffff8111610fac57610fa89201610f41565b9091565b6102d0565b6102cc565b5190565b60209181520190565b60200190565b5190565b60209181520190565b610ff5610ffe60209361100393610fec81610fc9565b93848093610fcd565b95869101610443565b61044e565b0190565b9061101191610fd6565b90565b60200190565b9061102e61102783610fb6565b8092610fba565b908161103f60208302840194610fc3565b925f915b83831061105257505050505090565b9091929394602061107461106e83856001950387528951611007565b97611014565b9301930191939290611043565b6110969160208201915f81840391015261101a565b90565b346110ca576110c66110b56110af366004610f80565b906129b7565b6110bd6102c2565b91829182611081565b0390f35b6102c8565b9091606082840312611104576111016110ea845f85016102ff565b936110f881602086016102ff565b93604001610b90565b90565b6102cc565b91602061112a92949361112360408201965f830190610c46565b0190610536565b565b3461115e5761114561113f3660046110cf565b91612b0e565b9061115a6111516102c2565b92839283611109565b0390f35b6102c8565b346111925761117c611176366004610810565b90612c0f565b6111846102c2565b8061118e816103dc565b0390f35b6102c8565b346111c5576111a73660046109bc565b6111af612cc1565b6111b76102c2565b806111c1816103dc565b0390f35b6102c8565b346111fa576111da3660046109bc565b6111f66111e5612cea565b6111ed6102c2565b91829182610543565b0390f35b6102c8565b3461122d5761120f3660046109bc565b611217612d62565b61121f6102c2565b80611229816103dc565b0390f35b6102c8565b90565b61123e90611232565b9052565b9190611255905f60208501940190611235565b565b346112875761128361127261126d366004610418565b612da6565b61127a6102c2565b91829182611242565b0390f35b6102c8565b346112be576112a561129f366004610810565b90612dc5565b906112ba6112b16102c2565b92839283611109565b0390f35b6102c8565b91906040838203126112eb57806112df6112e8925f86016102ff565b9360200161073c565b90565b6102cc565b3461131f576113096113033660046112c3565b90612e7b565b6113116102c2565b8061131b816103dc565b0390f35b6102c8565b346113585761135461134361133a366004610e94565b92919091612f60565b61134b6102c2565b91829182610543565b0390f35b6102c8565b60018060a01b031690565b61137890600861137d9302610d8a565b61135d565b90565b9061138b9154611368565b90565b61139a60045f90611380565b90565b90565b6113b46113af6113b9926102d4565b61139d565b6102d4565b90565b6113c5906113a0565b90565b6113d1906113bc565b90565b6113dd906113c8565b9052565b91906113f4905f602085019401906113d4565b565b34611426576114063660046109bc565b61142261141161138e565b6114196102c2565b918291826113e1565b0390f35b6102c8565b6114348161083d565b0361143b57565b5f80fd5b9050359061144c8261142b565b565b9060608282031261149c57611465815f84016102ff565b92602083013567ffffffffffffffff81116114975761148983611494928601610677565b93909460400161143f565b90565b6102d0565b6102cc565b9160206114c29294936114bb60408201965f830190610ee6565b0190610536565b565b346114f9576114e06114d736600461144e565b9291909161326f565b906114f56114ec6102c2565b928392836114a1565b0390f35b6102c8565b3461152d5761151761151136600461074b565b9161365b565b61151f6102c2565b80611529816103dc565b0390f35b6102c8565b346115615761154b611545366004610810565b90613668565b6115536102c2565b8061155d816103dc565b0390f35b6102c8565b5f80fd5b9061157e9392916115796136e6565b6115e8565b565b90565b61159761159261159c92611580565b61139d565b611232565b90565b60016115ab9101611232565b90565b5090565b634e487b7160e01b5f52603260045260245ffd5b91908110156115d6576020020190565b6115b2565b356115e581610b7c565b90565b93929190936115f65f611583565b5b8061161461160e6116098987906115ae565b611232565b91611232565b1015611647576116429061163d836116366116318a8886916115c6565b6115db565b87916137ee565b61159f565b6115f7565b505050509050565b9061165b93929161156a565b565b606090565b61167661167161167b92610359565b61139d565b610359565b90565b9061168890611662565b5f5260205260405f2090565b634e487b7160e01b5f52602260045260245ffd5b90600160028304921680156116c8575b60208310146116c357565b611694565b91607f16916116b8565b60209181520190565b5f5260205f2090565b905f92918054906116fe6116f7836116a8565b80946116d2565b916001811690815f146117555750600114611719575b505050565b61172691929394506116db565b915f925b81841061173d57505001905f8080611714565b6001816020929593955484860152019101929061172a565b92949550505060ff19168252151560200201905f8080611714565b9061177a916116e4565b90565b634e487b7160e01b5f52604160045260245ffd5b9061179b9061044e565b810190811067ffffffffffffffff8211176117b557604052565b61177d565b906117da6117d3926117ca6102c2565b93848092611770565b0383611791565b565b6117e5906117ba565b90565b6117ff611804916117f761165d565b50600761167e565b6117dc565b90565b5f90565b9061181590611662565b5f5260205260405f2090565b60401c90565b67ffffffffffffffff1690565b61184061184591611821565b611827565b90565b6118529054611834565b90565b600161186d61187392611866611807565b508261180b565b01611848565b90565b5f90565b60801c90565b6dffffffffffffffffffffffffffff1690565b61189f6118a49161187a565b611880565b90565b6118b19054611893565b90565b6118d560016118cf6118da936118c8611876565b508261180b565b016118a7565b61385e565b90565b906118ef916118ea6136e6565b6118f1565b565b906118fb916138b4565b565b90611907916118dd565b565b9061191b916119166136e6565b61196a565b565b611926906113a0565b90565b6119329061191d565b90565b61193e906113bc565b90565b5f80fd5b60e01b90565b5f91031261195557565b6102cc565b6119626102c2565b3d5f823e3d90fd5b61197661197b91611929565b611935565b90637a9e5e4b90823b156119f5576119b2926119a75f809461199b6102c2565b96879586948593611945565b8352600483016107c6565b03925af180156119f0576119c4575b50565b6119e3905f3d81116119e9575b6119db8183611791565b81019061194b565b5f6119c1565b503d6119d1565b61195a565b611941565b90611a0491611909565b565b611a1a611a15611a1f92611580565b61139d565b61052d565b90565b611a2b90610b70565b9052565b604090611a58611a5f9496959396611a4e60608401985f8501906107b9565b60208301906107b9565b0190611a22565b565b611a75611a70611a7a92611580565b61139d565b61083d565b90565b5f1c90565b90565b611a91611a9691611a7d565b611a82565b90565b611aa39054611a85565b90565b5f1b90565b90611ab75f1991611aa6565b9181191691161790565b611aca9061092e565b90565b611ad690611a7d565b90565b90611aee611ae9611af592611ac1565b611acd565b8254611aab565b9055565b5f80fd5b90611b10611b096102c2565b9283611791565b565b67ffffffffffffffff8111611b3057611b2c60209161044e565b0190565b61177d565b90825f939282370152565b90929192611b55611b5082611b12565b611afd565b93818552602085019082840111611b7157611b6f92611b35565b565b611af9565b611b81913691611b40565b90565b611bb09192611b91611876565b50611b9a61390f565b611ba8818487908592613953565b94901561058d565b80611cb2575b611c7f57611bc8908386908492612703565b611bd0611876565b93611be3611bdd5f611a06565b9161052d565b14158015611c5c575b611c42575b50611c3790611c3f9394611c31611c086003611a99565b94611c28611c2182611c1b868890613a3a565b90613beb565b6003611ad9565b91923493611b76565b90613c91565b506003611ad9565b90565b611c3f935090611c54611c3792613a71565b935090611bf1565b50611c6681611f34565b611c78611c725f611a61565b9161083d565b1415611bec565b611c90859392611cae929394613a3a565b611c986102c2565b9384936381c6f24b60e01b855260048501611a2f565b0390fd5b5083611cc6611cc05f611a06565b9161052d565b14611bb6565b90611cdf9291611cda6136e6565b611ce1565b565b9291611cec8461226c565b611cff57611cfd9293919091613d46565b565b611d2184611d0b6102c2565b918291630873efff60e11b8352600483016104e3565b0390fd5b90611d309291611ccc565b565b5f90565b90611d4090611662565b5f5260205260405f2090565b60018060a01b031690565b611d63611d6891611a7d565b611d4c565b90565b611d759054611d57565b90565b611d8c611d87611d9192611580565b61139d565b6102d4565b90565b611d9d90611d78565b90565b611da8611d32565b50611dbd611db860068390611d36565b611d6b565b9081611dd9611dd3611dce5f611d94565b6102df565b916102df565b14611de2575090565b611e0490611dee6102c2565b918291636a2fe3d360e11b8352600483016104e3565b0390fd5b5f90565b611e15906113bc565b90565b90611e2290611e0c565b5f5260205260405f2090565b90565b65ffffffffffff1690565b611e48611e4d91611a7d565b611e31565b90565b611e5a9054611e3c565b90565b60301c90565b611e6f611e7491611e5d565b611880565b90565b611e819054611e63565b90565b611ec6915f611ebb611ec193611e98611e08565b50611ea1611876565b50611eaa611876565b50611eb3611e08565b50600161180b565b01611e18565b611e2e565b90611ee5611ee05f611ed9818601611e50565b9401611e77565b613d53565b9391939290929193929190565b90611f0491611eff6136e6565b611f06565b565b90611f1091613d87565b565b90611f1c91611ef2565b565b90611f2890611ac1565b5f5260205260405f2090565b5f611f4c611f5292611f44611e08565b506002611f1e565b01611e50565b611f5b81613e57565b5f14611f6f5750611f6b5f611a61565b5b90565b611f6c565b63ffffffff1690565b611f89611f8e91611e5d565b611f74565b90565b611f9b9054611f7d565b90565b5f611fb6611fbc92611fae611876565b506002611f1e565b01611f91565b90565b90565b611fd6611fd1611fdb92611fbf565b61139d565b61052d565b90565b611fe6611876565b50611ff362093a80611fc2565b90565b9061200090611e0c565b5f5260205260405f2090565b61201861201d91611a7d565b611880565b90565b61202a905461200c565b90565b61204e600161204861205393612041611876565b505f611ff6565b01612020565b61385e565b90565b90612068916120636136e6565b61206a565b565b9061207491613ee3565b565b9061208091612056565b565b61208e61209391611a7d565b611827565b90565b6120a09054612082565b90565b60016120bb6120c1926120b4611807565b508261180b565b01612096565b90565b6120d5906120d06136e6565b612166565b565b6120e36120e891611a7d565b61135d565b90565b6120f590546120d7565b90565b612101906113a0565b90565b61210d906120f8565b90565b612119906102df565b90565b9061212d60018060a01b0391611aa6565b9181191691161790565b612140906120f8565b90565b90565b9061215b61215661216292612137565b612143565b825461211c565b9055565b8061218161217b6121765f611d94565b6102df565b916102df565b146121ef5761219060046120eb565b6121b26121ac6121a76121a25f611d94565b612104565b612110565b91612110565b036121cc576121c36121ca91612104565b6004612146565b565b6121d46102c2565b6365641b4160e01b8152806121eb600482016103dc565b0390fd5b6121f76102c2565b63e6c4247b60e01b81528061220e600482016103dc565b0390fd5b61221b906120c4565b565b61222690610b70565b90565b906122339061221d565b5f5260205260405f2090565b612265915f61225a61226093612253611807565b5082611ff6565b01612229565b612096565b90565b5f90565b6122836122889161227b612268565b506006611d36565b611d6b565b6122a261229c6122975f611d94565b6102df565b916102df565b141590565b906122ba92916122b56136e6565b6124d8565b565b634e487b7160e01b5f525f60045260245ffd5b5090565b601f602091010490565b1b90565b919060086122fc9102916122f65f19846122dd565b926122dd565b9181191691161790565b61231a61231561231f92611232565b61139d565b611232565b90565b90565b919061233b61233661234393612306565b612322565b9083546122e1565b9055565b5f90565b61235d91612357612347565b91612325565b565b5b81811061236b575050565b806123785f60019361234b565b01612360565b9190601f811161238e575b505050565b61239a6123bf936116db565b9060206123a6846122d3565b830193106123c7575b6123b8906122d3565b019061235f565b5f8080612389565b91506123b8819290506123af565b906123e5905f1990600802610d8a565b191690565b816123f4916123d5565b906002021790565b9161240790826122cf565b9067ffffffffffffffff82116124c65761242b8261242585546116a8565b8561237e565b5f90601f831160011461245e5791809161244d935f92612452575b50506123ea565b90555b565b90915001355f80612446565b601f1983169161246d856116db565b925f5b8181106124ae57509160029391856001969410612494575b50505002019055612450565b6124a4910135601f8416906123d5565b90555f8080612488565b91936020600181928787013581550195019201612470565b61177d565b906124d692916123fc565b565b90916124f66124fb936124ed848285916140b8565b9192600761167e565b6124cb565b565b9061250892916122a7565b565b9050519061251782610b7c565b565b906020828203126125325761252f915f0161250a565b90565b6102cc565b919061254161390f565b9261256e602061255861255387611929565b611935565b638fb36037906125666102c2565b938492611945565b8252818061257e600482016103dc565b03915afa90811561261e575f916125f0575b506125aa6125a4638fb3603760e01b610b70565b91610b70565b036125ca57916125c793916125c29392909192612703565b613a71565b50565b6125ec846125d66102c2565b918291630641fee960e31b8352600483016107c6565b0390fd5b612611915060203d8111612617575b6126098183611791565b810190612519565b5f612590565b503d6125ff565b61195a565b60701c90565b61263561263a91612623565b610d8e565b90565b6126479054612629565b90565b60016126626126689261265b612268565b505f611ff6565b0161263d565b90565b9061267d916126786136e6565b61267f565b565b9061268991614166565b565b906126959161266b565b565b5f90565b60209181520190565b91906126be816126b7816126c39561269b565b8095611b35565b61044e565b0190565b6126ed6126fa95939492946126e360608401965f8501906107b9565b60208301906107b9565b60408185039101526126a4565b90565b60200190565b61273a929361272b91612714612697565b50929461271f6102c2565b958694602086016126c7565b60208201810382520382611791565b61274c61274682610fc9565b916126fd565b2090565b606090565b5090565b634e487b7160e01b5f52601160045260245ffd5b61277c61278291939293611232565b92611232565b820391821161278d57565b612759565b5f80fd5b5f80fd5b909392938483116127ba5784116127b5576001820201920390565b612796565b612792565b906127d16127cc83611b12565b611afd565b918252565b369037565b906128006127e8836127bf565b926020806127f68693611b12565b92019103906127d6565b565b5090565b67ffffffffffffffff811161281e5760208091020190565b61177d565b9061283561283083612806565b611afd565b918252565b606090565b5f5b82811061284d57505050565b60209061285861283a565b8184015201612841565b9061288761286f83612823565b9260208061287d8693612806565b920191039061283f565b565b612892906113bc565b90565b5f80fd5b5f80fd5b5f80fd5b9035906001602003813603038212156128e3570180359067ffffffffffffffff82116128de576020019160018202360383136128d957565b61289d565b612899565b612895565b908210156129035760206128ff92028101906128a1565b9091565b6115b2565b905090565b90918261291d8161292493612908565b8093611b35565b0190565b61294d6129449260209261293b81610fc9565b94858093612908565b93849101610443565b0190565b612965939261295f9261290d565b90612928565b90565b906129959193929361298961297b6102c2565b958693602085019384612951565b90810382520383611791565b565b906129a182610fb6565b8110156129b2576020809102010190565b6115b2565b6129bf612750565b50336129da6129d46129cf61390f565b6102df565b916102df565b145f14612a89576129f26129ed5f611583565b6127db565b5b612a06612a01838590612802565b612862565b92612a105f611583565b5b80612a2e612a28612a23878690612802565b611232565b91611232565b1015612a8257612a7d90612a76612a63612a4730612889565b612a5d612a56898887916128e8565b8991612968565b90614253565b878391612a708383612997565b52612997565b515061159f565b612a11565b5050505090565b612abb612ab55f36612aad612a9f5f3690612755565b612aa761423e565b9061276d565b90809261279a565b90611b76565b6129f3565b612acc612ad191611a7d565b610d8e565b90565b612ade9054612ac0565b90565b90505190612aee82610592565b565b90602082820312612b0957612b06915f01612ae1565b90565b6102cc565b91612b17612268565b50612b20611876565b50612b2b6008612ad4565b80612b58575b612b4757612b4192919091614282565b91909190565b5050505f90612b555f611a06565b90565b50612b9a6020612b70612b6b60046120eb565b6113c8565b635dbe47e890612b8f8692612b836102c2565b95869485938493611945565b8352600483016107c6565b03915afa8015612be957612bb6915f91612bbb575b501561058d565b612b31565b612bdc915060203d8111612be2575b612bd48183611791565b810190612af0565b5f612baf565b503d612bca565b61195a565b90612c0091612bfb6136e6565b612c02565b565b90612c0c91614373565b50565b90612c1991612bee565b565b612c236136e6565b612c2b612c72565b565b90612c3960ff91611aa6565b9181191691161790565b612c4c9061058d565b90565b90565b90612c67612c62612c6e92612c43565b612c4f565b8254612c2d565b9055565b612c7e60016008612c52565b33612ca97f29485581a613e93424650f3fa6d63a0c80315f06f25c469ace587b08cbc2755491611e0c565b90612cb26102c2565b80612cbc816103dc565b0390a2565b612cc9612c1b565b565b90565b612ce2612cdd612ce792612ccb565b61139d565b61052d565b90565b612cf2611876565b50612cff62069780612cce565b90565b612d0a6136e6565b612d12612d14565b565b612d1f5f6008612c52565b33612d4a7fbcb66ff05bd6be5d6d687cca763ed48c7f4afaa5a048d2f006ae3a6f274d790591611e0c565b90612d536102c2565b80612d5d816103dc565b0390a2565b612d6a612d02565b565b90612d7690611662565b5f5260205260405f2090565b90565b612d91612d9691611a7d565b612d82565b90565b612da39054612d85565b90565b612dbd612dc291612db5612347565b506005612d6c565b612d99565b90565b90612dce612268565b50612dd7611876565b5081612df2612dec612de76109cb565b610359565b91610359565b145f14612e0a575050600190612e075f611a06565b90565b612e1391611e84565b5050919080612e2a612e245f611a61565b9161083d565b14159081612e38575b509190565b9050612e53612e4d612e4861443d565b61083d565b9161083d565b11155f612e33565b90612e6d91612e686136e6565b612e6f565b565b90612e7991614495565b565b90612e8591612e5b565b565b612ebc612ec394612eb2606094989795612ea8608086019a5f8701906107b9565b60208501906107b9565b60408301906107b9565b0190611a22565b565b91906008612ee5910291612edf65ffffffffffff846122dd565b926122dd565b9181191691161790565b612f03612efe612f089261083d565b61139d565b61083d565b90565b90565b9190612f24612f1f612f2c93612eef565b612f0b565b908354612ec5565b9055565b612f4291612f3c611e08565b91612f0e565b565b612f58612f53612f5d9261052d565b61139d565b61052d565b90565b909192612f6b611876565b50612f8f612f7761390f565b94612f83818490613a3a565b92849186909192612703565b93612fa65f612fa060028890611f1e565b01611e50565b612fb8612fb25f611a61565b9161083d565b145f14612fe557612fe185612fcb6102c2565b91829163060a299b60e41b835260048301610ef3565b0390fd5b82612ff8612ff2836102df565b916102df565b0361307d575b505050506130195f8061301360028590611f1e565b01612f30565b61302f5f61302960028490611f1e565b01611f91565b908161306461305e7fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f793611ac1565b91612f44565b9161306d6102c2565b80613077816103dc565b0390a390565b61308f613088610c02565b8290612dc5565b506130b86130b06130a96130a488879061223f565b611855565b8490612dc5565b50911561058d565b90816130ee575b5015612ffe57906130ea9192936130d46102c2565b948594630ff89d4760e21b865260048601612e87565b0390fd5b6130f991501561058d565b5f6130bf565b61311361310e6131189261052d565b61139d565b61083d565b90565b61312761312d9161083d565b9161083d565b019065ffffffffffff821161313e57565b612759565b61315761315261315c9261083d565b61139d565b611232565b90565b61317361316e61317892611232565b61139d565b61083d565b90565b90565b61319261318d6131979261317b565b61139d565b61052d565b90565b906131a5910161052d565b90565b906131b965ffffffffffff91611aa6565b9181191691161790565b906131d86131d36131df92612eef565b612f0b565b82546131a8565b9055565b60301b90565b906131fe69ffffffff000000000000916131e3565b9181191691161790565b90565b9061322061321b61322792612f44565b613208565b82546131e9565b9055565b90939161326c959361325561325f9261324b60808601985f870190610848565b60208501906107b9565b60408301906107b9565b60608185039101526126a4565b90565b9391613279612697565b50613282611876565b5061328b61390f565b9361329a858785908592613953565b9050906132b76132a861443d565b6132b1846130ff565b9061311b565b916132ca6132c45f611a06565b9161052d565b1480156133f2575b6133bf576132fa916132ef6132e96132f593613143565b91613143565b90614526565b61315f565b90613309858785908492612703565b9561331387614552565b61333c61332c5f61332660028b90611f1e565b01611f91565b613336600161317e565b9061319a565b95613354845f61334e60028c90611f1e565b016131c3565b61336b875f61336560028c90611f1e565b0161320b565b6133ba889388959293966133a86133a27f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b497611ac1565b97612f44565b976133b16102c2565b9586958661322b565b0390a3565b83876133ee6133d0868a9394613a3a565b6133d86102c2565b9384936381c6f24b60e01b855260048501611a2f565b0390fd5b50806134066134005f611a61565b9161083d565b1180613412575b6132d2565b50806134266134208461083d565b9161083d565b1061340d565b9061343f929161343a6136e6565b613487565b565b91602061346292949361345b60408201965f8301906104d6565b01906107b9565b565b90565b9061347c61347761348392611e0c565b613464565b825461211c565b9055565b9091826134a461349e6134995f611d94565b6102df565b916102df565b14613638576134bd6134b860068490611d36565b611d6b565b6134d76134d16134cc5f611d94565b6102df565b916102df565b036135fe576134e582612da6565b6134f76134f15f611583565b91611232565b116135d8578161351661351061350b610c02565b610359565b91610359565b1480156135b7575b61359157613530908290849091613d46565b6135458261354060068490611d36565b613467565b906135796135737f7802e8d7fc8e1534158d85cc6f4f98c9532a46023c28df43bff52ac07d411f8d93611662565b91611e0c565b916135826102c2565b8061358c816103dc565b0390a3565b6135b38261359d6102c2565b918291630ca5736b60e01b8352600483016104e3565b0390fd5b50816135d26135cc6135c76109cb565b610359565b91610359565b1461351e565b6135fa826135e46102c2565b918291630873efff60e11b8352600483016104e3565b0390fd5b5061361261360d826006611d36565b611d6b565b9061363461361e6102c2565b928392632ad95ead60e11b845260048401613441565b0390fd5b6136406102c2565b63e6c4247b60e01b815280613657600482016103dc565b0390fd5b90613666929161342c565b565b908061368361367d61367861390f565b6102df565b916102df565b036136945761369191614373565b50565b61369c6102c2565b635f159e6360e01b8152806136b3600482016103dc565b0390fd5b6136c0906113bc565b90565b9160206136e49294936136dd60408201965f8301906107b9565b01906104d6565b565b6136ee61390f565b9061370c613704836136fe6145d2565b9161461b565b91901561058d565b613716575b509050565b6137286137225f611a06565b9161052d565b145f1461376a575061374161373b6145d2565b90614812565b509050906137666137506102c2565b92839263f07e038f60e01b8452600484016136c3565b0390fd5b9061378c6137919161377b306136b7565b906137846145d2565b929091612703565b613a71565b50805f613711565b906137ac67ffffffffffffffff91611aa6565b9181191691161790565b90565b906137ce6137c96137d592611662565b6137b6565b8254613799565b9055565b91906137ec905f60208501940190611a22565b565b61380e836138095f613801818690611ff6565b018590612229565b6137b9565b9091906138596138476138417f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde94915193611e0c565b93611662565b936138506102c2565b918291826137d9565b0390a3565b6138709061386a611876565b50613d53565b505090565b60701b90565b9061388a60ff60701b91613875565b9181191691161790565b906138a96138a46138b092612c43565b612c4f565b825461387b565b9055565b6138cb8260016138c55f8590611ff6565b01613894565b61390a6138f87f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb13892611e0c565b926139016102c2565b91829182610c53565b0390a2565b613917611d32565b503390565b90565b61393361392e6139389261391c565b61139d565b611232565b90565b61394a61395091939293612c43565b92611a06565b90565b9061395c612268565b50613965611876565b508061398161397b613976306136b7565b6102df565b916102df565b145f1461399c5750916139969291909161461b565b91909190565b91906139a9828590612755565b6139bc6139b6600461391f565b91611232565b105f146139d857505050506139d15f8061393b565b91905b9190565b6139ed936139e7919392613a3a565b91612b0e565b91906139d4565b5f90565b90613a06613a0d9183612755565b9135610b70565b9060048110613a1b575b5090565b613a339063ffffffff60e01b906004036008026122dd565b165f613a17565b613a6e91613a6891613a4a6139f4565b50905f90613a62613a5c600493611583565b9261391f565b9261279a565b906139f8565b90565b613a79611876565b50613a905f613a8a60028490611f1e565b01611e50565b613aa65f613aa060028590611f1e565b01611f91565b9080613aba613ab45f611a61565b9161083d565b145f14613ae757613ae383613acd6102c2565b91829163060a299b60e41b835260048301610ef3565b0390fd5b80613b01613afb613af661443d565b61083d565b9161083d565b115f14613b2e57613b2a83613b146102c2565b918291630c65b5bd60e11b835260048301610ef3565b0390fd5b613b3a90929192613e57565b613ba257613b555f80613b4f60028590611f1e565b01612f30565b81613b89613b837f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d93611ac1565b91612f44565b91613b926102c2565b80613b9c816103dc565b0390a390565b613bc490613bae6102c2565b918291631e2975b960e21b835260048301610ef3565b0390fd5b916020613be9929493613be260408201965f8301906107b9565b0190611a22565b565b613c1e90613bf7612697565b50613c0f613c036102c2565b93849260208401613bc8565b60208201810382520382611791565b613c30613c2a82610fc9565b916126fd565b2090565b606090565b613c42906113bc565b90565b916020613c66929493613c5f60408201965f830190611235565b0190611235565b565b3d5f14613c8357613c783d6127bf565b903d5f602084013e5b565b613c8b613c34565b90613c81565b90929192613c9d613c34565b50613ca730613c39565b31613cba613cb486611232565b91611232565b10613ce7575f613ce4939481928491602082019151925af190613cdb613c68565b90919091614b12565b90565b83613cf130613c39565b31613d13613cfd6102c2565b92839263cf47918160e01b845260048401613c45565b0390fd5b90613d2a9291613d256136e6565b613d2c565b565b91613d4392613d3c8193916118b4565b9192614bb9565b50565b90613d519291613d17565b565b613d8090613d5f611876565b50613d68611876565b50613d71611e08565b50613d7a61443d565b90614c28565b9192909190565b80613da1613d9b613d96610c02565b610359565b91610359565b148015613e36575b613e1057613dc4826001613dbe81859061180b565b016137b9565b90613df8613df27f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e634093611662565b91611662565b91613e016102c2565b80613e0b816103dc565b0390a3565b613e3290613e1c6102c2565b91829163061c6a4360e21b8352600483016104e3565b0390fd5b5080613e51613e4b613e466109cb565b610359565b91610359565b14613da9565b613e7a90613e63612268565b50613e74613e6f611fde565b6130ff565b9061311b565b613e93613e8d613e8861443d565b61083d565b9161083d565b111590565b60401b90565b90613eb96fffffffffffffffff000000000000000091613e98565b9181191691161790565b90613ed8613ed3613edf92611662565b6137b6565b8254613e9e565b9055565b80613efd613ef7613ef2610c02565b610359565b91610359565b148015613f92575b613f6c57613f20826001613f1a81859061180b565b01613ec3565b90613f54613f4e7f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae293611662565b91611662565b91613f5d6102c2565b80613f67816103dc565b0390a3565b613f8e90613f786102c2565b91829163061c6a4360e21b8352600483016104e3565b0390fd5b5080613fad613fa7613fa26109cb565b610359565b91610359565b14613f05565b90613fc69291613fc16136e6565b614005565b565b9190613fe281613fdb81613fe79561043a565b8095611b35565b61044e565b0190565b90916140029260208301925f818503910152613fc8565b90565b8061401f614019614014610c02565b610359565b91610359565b148015614097575b6140715790916140577f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a45092611662565b9261406c6140636102c2565b92839283613feb565b0390a2565b6140939061407d6102c2565b91829163061c6a4360e21b8352600483016104e3565b0390fd5b50806140b26140ac6140a76109cb565b610359565b91610359565b14614027565b906140c39291613fb3565b565b60801b90565b906140e76dffffffffffffffffffffffffffff60801b916140c5565b9181191691161790565b6dffffffffffffffffffffffffffff1690565b61411861411361411d926140f1565b61139d565b6140f1565b90565b90565b9061413861413361413f92614104565b614120565b82546140cb565b9055565b91602061416492949361415d60408201965f830190610536565b0190610848565b565b91908261418261417c6141776109cb565b610359565b91610359565b14614218576141d29192614194611e08565b506141bd6141ae60016141a881859061180b565b016118a7565b836141b7612cea565b91614cbc565b939060016141cc81859061180b565b01614123565b90916141fe7ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b4892611662565b9261421361420a6102c2565b92839283614143565b0390a2565b61423a836142246102c2565b91829163061c6a4360e21b8352600483016104e3565b0390fd5b614246612347565b506142505f611583565b90565b5f8061427f93614261613c34565b508390602081019051915af490614276613c68565b90919091614b12565b90565b91909161428d612268565b50614296611876565b506142a08361264a565b5f146142b7575050505f906142b45f611a06565b90565b806142d26142cc6142c7306136b7565b6102df565b916102df565b145f146142f057506142e391614d64565b906142ed5f611a06565b90565b906142fe906143039361223f565b612dc5565b91905f14614324578161431e6143185f611a06565b9161052d565b145b9190565b90506143305f8061393b565b9190614320565b61434090611232565b5f811461434e576001900390565b612759565b9061436861436361436f92612306565b612322565b8254611aab565b9055565b61437b612268565b50614387818390614db5565b9182614393575b505090565b816143b1916143a46143c89461226c565b6143cf575b506005612d6c565b6143c26143bd82612d99565b614337565b90614353565b5f8061438e565b6143ec6143db5f611d94565b6143e760068590611d36565b613467565b819061442161441b7f5d31dcf9eb76157bd7c0539ad920b249a4c367e70ac8abae2054b977da4d80b593611662565b91611e0c565b9161442a6102c2565b80614434816103dc565b0390a35f6143a9565b614445611e08565b5061444f42614f07565b90565b9061446b6dffffffffffffffffffffffffffff91611aa6565b9181191691161790565b9061448a61448561449192614104565b614120565b8254614452565b9055565b906144e0916144a2611e08565b506144cb6144bc60016144b65f8590611ff6565b01612020565b836144c5612cea565b91614cbc565b939060016144da5f8590611ff6565b01614475565b909161450c7fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c92611e0c565b926145216145186102c2565b92839283614143565b0390a2565b61454f91614532612347565b508161454661454083611232565b91611232565b11919091614f6f565b90565b6145685f61456260028490611f1e565b01611e50565b8061457b6145755f611a61565b9161083d565b141590816145b2575b5061458c5750565b6145ae906145986102c2565b91829163813e945960e01b835260048301610ef3565b0390fd5b6145c691506145c090613e57565b1561058d565b5f614584565b36905f90565b6145da6145cc565b9050505f903690565b6145f76145f26145fc9261052d565b61139d565b611232565b90565b61461361460e61461892611232565b61139d565b61052d565b90565b9190614625612268565b5061462e611876565b5061463a818390612755565b61464d614647600461391f565b91611232565b1061474e578261466d614667614662306136b7565b6102df565b916102df565b146147225761468a9161467f91614812565b91929091921561058d565b8061470b575b6146fa576146a9926146a191612dc5565b92901561058d565b6146ea576146d1916146c66146c06146cc936145e3565b916145e3565b90614526565b6145ff565b90816146e56146df5f611a06565b9161052d565b149190565b50505f906146f75f611a06565b90565b5050505f906147085f611a06565b90565b5061471d614718306136b7565b61264a565b614690565b90614741925061473b90614735306136b7565b92613a3a565b90614d64565b9061474b5f611a06565b90565b5050505f9061475c5f611a06565b90565b61477361476e61477892611580565b61139d565b610359565b90565b61478f61478a6147949261052d565b611945565b610b70565b90565b90565b6147ae6147a96147b392614797565b61139d565b611232565b90565b91565b6147c2906102d4565b90565b6147ce816147b9565b036147d557565b5f80fd5b905035906147e6826147c5565b565b90602082820312614801576147fe915f016147d9565b90565b6102cc565b61480f906113bc565b90565b9061481b612268565b50614824611807565b5061482d611876565b50614839828290612755565b61484c614846600461391f565b91611232565b10614af65761485c828290613a3a565b918261487c61487661487163853551b861477b565b610b70565b91610b70565b148015614ad0575b8015614aaa575b8015614a84575b8015614a5e575b614a4157826148bc6148b66148b16318ff183c61477b565b610b70565b91610b70565b148015614a1b575b80156149f5575b61499957826148ee6148e86148e36325c471a061477b565b610b70565b91610b70565b148015614973575b61491f57505061490f5f9161490a306136b7565b61223f565b9161491c5f929392611a06565b90565b61495892506149509161494a919060049061494461493e60249361391f565b9261479a565b9261279a565b906147b6565b810190610418565b6149636001916120a3565b916149705f929392611a06565b90565b508261499361498d61498863b7d2b16261477b565b610b70565b91610b70565b146148f6565b6149e292506149d06149ca6149dd936149d893906004906149c46149be60249361391f565b9261479a565b9261279a565b906147b6565b8101906147e8565b614806565b61202d565b906001906149ee610c02565b9291929190565b5082614a15614a0f614a0a6308d6122d61477b565b610b70565b91610b70565b146148cb565b5082614a3b614a35614a3063167bd39561477b565b610b70565b91610b70565b146148c4565b5050506001614a4e610c02565b91614a5b5f929392611a06565b90565b5082614a7e614a78614a7363d22b598961477b565b610b70565b91610b70565b14614899565b5082614aa4614a9e614a9963a64d95ce61477b565b610b70565b91610b70565b14614892565b5082614aca614ac4614abf635296295261477b565b610b70565b91610b70565b1461488b565b5082614af0614aea614ae56330cae18761477b565b610b70565b91610b70565b14614884565b50505f8091614b0f614b095f939461475f565b92611a06565b90565b90614b2690614b1f613c34565b501561058d565b5f14614b325750614f93565b614b3b82610fc9565b614b4d614b475f611583565b91611232565b1480614b82575b614b5c575090565b614b7e90614b686102c2565b918291639996b31560e01b8352600483016107c6565b0390fd5b50803b614b97614b915f611583565b91611232565b14614b54565b614ba690611232565b5f198114614bb45760010190565b612759565b92614bd192614bc6612268565b5084929091926150dc565b9081614bdc575b5090565b614bea614c01916005612d6c565b614bfb614bf682612d99565b614b9d565b90614353565b5f614bd8565b614c1f614c19614c2592959395612f44565b94611a06565b92611a61565b90565b614c4c90614c34611876565b50614c3d611876565b50614c46611e08565b5061532a565b92909192919290614c66614c60849261083d565b9161083d565b11155f14614c86575050614c7c905f8091614c07565b919290925b929190565b929092919291614c81565b5f90565b614ca1614ca79161052d565b9161052d565b90039063ffffffff8211614cb757565b612759565b90614d42614d2b614d26614ce7614d4b95979697614cd8614c91565b50614ce1611e08565b5061385e565b9687614cfb614cf58761052d565b9161052d565b115f14614d4f57614d20614d1a614d138a8890614c95565b925b6145e3565b916145e3565b90614526565b6145ff565b614d3c614d3661443d565b916130ff565b9061311b565b939084916153f9565b9190565b614d20614d1a614d5e5f611a06565b92614d15565b90614d8d614d88614d9392614d77612268565b50614d826003611a99565b94613beb565b61092e565b9161092e565b1490565b5f80910155565b905f03614db057614dae90614d97565b565b6122bc565b614dbd612268565b5080614dd8614dd2614dcd6109cb565b610359565b91610359565b14614e8c57614dff5f614df981614df16001869061180b565b018590611e18565b01611e50565b614e11614e0b5f611a61565b9161083d565b14614e8657614e375f614e3281614e2a6001869061180b565b018590611e18565b614d9e565b90614e6b614e657ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c16693611662565b91611e0c565b91614e746102c2565b80614e7e816103dc565b0390a3600190565b50505f90565b614eae90614e986102c2565b91829163061c6a4360e21b8352600483016104e3565b0390fd5b90565b60ff1690565b614ecf614eca614ed492614eb2565b61139d565b614eb5565b90565b614ee090614ebb565b9052565b916020614f05929493614efe60408201965f830190614ed7565b0190611235565b565b614f0f611e08565b5080614f29614f2365ffffffffffff613143565b91611232565b11614f3a57614f379061315f565b90565b6030614f5d614f476102c2565b9283926306dfcc6560e41b845260048401614ee4565b0390fd5b90614f6c9102611232565b90565b614f89614f8f9293614f7f612347565b5080941891615451565b90614f61565b1890565b614f9c81610fc9565b614fae614fa85f611583565b91611232565b115f14614fbd57805190602001fd5b614fc56102c2565b63d6bda27560e01b815280614fdc600482016103dc565b0390fd5b90614fff73ffffffffffffffffffffffffffff000000000000916131e3565b9181191691161790565b9061501e61501961502592614104565b614120565b8254614fe0565b9055565b6150336040611afd565b90565b906150409061083d565b9052565b9061504e906140f1565b9052565b61505c905161083d565b90565b61506990516140f1565b90565b9061509660205f61509c9461508e828201615088848801615052565b906131c3565b01920161505f565b90615009565b565b906150a89161506c565b565b6040906150d36150da94969593966150c960608401985f850190610536565b6020830190610848565b0190610c46565b565b9192906150e7612268565b50826151026150fc6150f76109cb565b610359565b91610359565b14615267576151295f6151238161511b6001889061180b565b018490611e18565b01611e50565b61513b6151355f611a61565b9161083d565b1493615145611e08565b50845f14615207576151689061516261515c61443d565b916130ff565b9061311b565b926151b3846151966151798661545f565b61518d615184615029565b935f8501615036565b60208301615044565b6151ae5f6151a66001869061180b565b018590611e18565b61509e565b5b90919284936152016151ef6151e97ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf95611662565b95611e0c565b956151f86102c2565b938493846150aa565b0390a390565b50615262926152416152315f61522b816152236001879061180b565b018690611e18565b01611e77565b8461523b5f611a06565b91614cbc565b94905f61525c816152546001879061180b565b018690611e18565b01615009565b6151b4565b615289836152736102c2565b91829163061c6a4360e21b8352600483016104e3565b0390fd5b6152a161529c6152a6926140f1565b61139d565b61052d565b90565b90565b6152c06152bb6152c5926152a9565b61139d565b614eb5565b90565b6152e7906152e16152db6152ec94614eb5565b916140f1565b90610d8a565b6140f1565b90565b90565b61530661530161530b926152ef565b61139d565b614eb5565b90565b61532261531d615327926140f1565b61139d565b61083d565b90565b61534e90615336611876565b5061533f611876565b50615348611e08565b50614104565b906153588261528d565b9061539161538c61537b6153768661537060206152ac565b906152c8565b61528d565b9461538660406152f2565b906152c8565b61530e565b92919291929190565b6153ae6153a96153b39261083d565b61139d565b6140f1565b90565b6153d5906153cf6153c96153da94614eb5565b916140f1565b906122dd565b6140f1565b90565b6153f16153ec6153f69261052d565b61139d565b6140f1565b90565b6154489061544161543161542b61541b61544e97615415614c91565b5061539a565b61542560406152f2565b906153b6565b926153dd565b61543b60206152ac565b906153b6565b17916153dd565b17614104565b90565b615459612347565b50151590565b6154719061546b614c91565b506153dd565b9056fea26469706673582212203dea04c6ae71e3cf21ae9891435ba78a6491e5b6284d59553ed1b2f7cc6451ca64736f6c63430008190033000000000000000000000000b4005db54adecf669babc3efb19b9b7e3978ebc2