0 txs
422 calls
constructor
constructor()
functions
AA_BAS_USDC_CV
viewfunction AA_BAS_USDC_CV() view returns (address)
AA_FAS_USDC_CV
viewfunction AA_FAS_USDC_CV() view returns (address)
allYieldSources
viewfunction allYieldSources(uint256) view returns (address token, address source, address vaultToken, uint256 maxCap, uint8 vaultType)
BAS_USDC_CV
viewfunction BAS_USDC_CV() view returns (address)
BUY_GEM_SIG
viewfunction BUY_GEM_SIG() view returns (bytes4)
CLAIM_INSTANT_REQ_SIG
viewfunction CLAIM_INSTANT_REQ_SIG() view returns (bytes4)
CLAIM_REQ_SIG
viewfunction CLAIM_REQ_SIG() view returns (bytes4)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEPLOYER
viewfunction DEPLOYER() view returns (address)
DEPOSIT_4626_SIG
viewfunction DEPOSIT_4626_SIG() view returns (bytes4)
DEPOSIT_AA_SIG
viewfunction DEPOSIT_AA_SIG() view returns (bytes4)
epochNumber
viewfunction epochNumber() view returns (uint256)
epochPending
viewfunction epochPending(uint256) view returns (uint256)
FAS_USDC_CV
viewfunction FAS_USDC_CV() view returns (address)
getAllYieldSources
viewfunction getAllYieldSources() view returns (tuple[])
getCollateralsYieldSourceScaled
viewfunction getCollateralsYieldSourceScaled(address _source) view returns (uint256 assets)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTotalCollateralsScaled
viewfunction getTotalCollateralsScaled() view returns (uint256 totCollaterals)
getUnlentBalanceScaled
viewfunction getUnlentBalanceScaled() view returns (uint256 totCollateralBal)
getYieldSource
viewfunction getYieldSource(address _source) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
HYPERNATIVE_PAUSER
viewfunction HYPERNATIVE_PAUSER() view returns (address)
isParetoDollarCollateralized
viewfunction isParetoDollarCollateralized() view returns (bool)
isPausable
viewfunction isPausable() view returns (bool)
KEYRING_POLICY
viewfunction KEYRING_POLICY() view returns (uint256)
KEYRING_WHITELIST
viewfunction KEYRING_WHITELIST() view returns (address)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
owner
viewfunction owner() view returns (address)
par
viewfunction par() view returns (address)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
REDEEM_4626_SIG
viewfunction REDEEM_4626_SIG() view returns (bytes4)
SELL_GEM_SIG
viewfunction SELL_GEM_SIG() view returns (bytes4)
sPar
viewfunction sPar() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
SUSDS
viewfunction SUSDS() view returns (address)
THRESHOLD
viewfunction THRESHOLD() view returns (uint256)
TL_MULTISIG
viewfunction TL_MULTISIG() view returns (address)
totCreditVaultsRequestedScaled
viewfunction totCreditVaultsRequestedScaled() view returns (uint256)
totReservedWithdrawals
viewfunction totReservedWithdrawals() view returns (uint256)
USDC_FEED
viewfunction USDC_FEED() view returns (address)
USDC
viewfunction USDC() view returns (address)
USDS_FEED
viewfunction USDS_FEED() view returns (address)
USDS_USDC_PSM
viewfunction USDS_USDC_PSM() view returns (address)
USDS
viewfunction USDS() view returns (address)
USDT_FEED
viewfunction USDT_FEED() view returns (address)
USDT
viewfunction USDT() view returns (address)
userWithdrawalsEpochs
viewfunction userWithdrawalsEpochs(address, uint256) view returns (uint256)
WITHDRAW_4626_SIG
viewfunction WITHDRAW_4626_SIG() view returns (bytes4)
WITHDRAW_AA_SIG
viewfunction WITHDRAW_AA_SIG() view returns (bytes4)
yieldSources
viewfunction yieldSources(address) view returns (address token, address source, address vaultToken, uint256 maxCap, uint8 vaultType)
accountGainsLosses
nonpayablefunction accountGainsLosses()
addYieldSource
nonpayablefunction addYieldSource(address _source, address _token, address _vaultToken, uint256 _maxCap, tuple[] _allowedMethods, uint8 _vaultType)
callWhitelistedMethods
nonpayablefunction callWhitelistedMethods(address[] _sources, bytes4[] _methods, bytes[] _args)
claimRedeemRequest
nonpayablefunction claimRedeemRequest(address _receiver, uint256 _epoch) returns (uint256)
depositFunds
nonpayablefunction depositFunds(address[] _sources, bytes4[] _methods, bytes[] _args)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _admin, address _pauser, address _par, address _sPar, address[] _managers)
pause
nonpayablefunction pause()
redeemFunds
nonpayablefunction redeemFunds(address[] _sources, bytes4[] _methods, bytes[] _args, uint256 _epoch)
removeYieldSource
nonpayablefunction removeYieldSource(address _source)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
requestRedeem
nonpayablefunction requestRedeem(address _receiver, uint256 _amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
stopEpoch
nonpayablefunction stopEpoch()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateYieldSource
nonpayablefunction updateYieldSource(address _source, uint256 _maxCap, tuple[] _allowedMethods)
events
Initialized
event Initialized(uint64 version)
NewEpoch
event NewEpoch(uint256 indexed epoch)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
YieldSourceAdded
event YieldSourceAdded(address indexed source, address indexed token)
YieldSourceCall
event YieldSourceCall(address indexed source, bytes4 indexed method, bytes args)
YieldSourceDeposit
event YieldSourceDeposit(address indexed source, address indexed token, uint256 amount)
YieldSourceRedeem
event YieldSourceRedeem(address indexed source, address indexed token, uint256 amount)
YieldSourceRemoved
event YieldSourceRemoved(address indexed source)
YieldSourceUpdated
event YieldSourceUpdated(address indexed source, uint256 maxCap)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InsufficientBalance
error InsufficientBalance()
Invalid
error Invalid()
InvalidInitialization
error InvalidInitialization()
MaxCap
error MaxCap()
NotAllowed
error NotAllowed()
NotInitializing
error NotInitializing()
NotReady
error NotReady()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ParamNotAllowed
error ParamNotAllowed()
PSMFeesNotZero
error PSMFeesNotZero()
SafeERC20FailedDecreaseAllowance
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
YieldSourceInvalid
error YieldSourceInvalid()
YieldSourceNotEmpty
error YieldSourceNotEmpty()
creation bytecode
0x6080806040523460aa575f516020615cde5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b604051615c2f90816100af8239f35b6001600160401b0319166001600160401b039081175f516020615cde5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a7146104745780630bf3b0981461046f5780630fe6040a1461046a578063200f02c814610465578063248a9ca3146104605780632c6aca641461045b5780632f2ff15d1461045657806331cd906514610451578063340ea2801461044c57806336568abe146104475780633f4ba83a14610442578063451ac7eb1461043d578063457a107d146104385780634719160214610433578063495d32cb1461042e5780635b03fb6c146104295780635b223e52146104245780635c975abb1461041f5780635d32272f1461041a57806362e994ab1461041557806365b89f9f1461041057806366bcad7f1461040b57806366c86fcb146104065780636bccefbd14610401578063715018a6146103fc57806374b7a6a1146103f757806376983f36146103f2578063785ffb37146103ed5780637a8d1c8f146103e85780638456cb59146103e3578063876f0761146103de57806389a30271146103d95780638d9e3017146103d45780638da5cb5b146103cf57806391217151146103ca578063914001fb146103c557806391d14854146103c057806395ccea67146103bb57806396c1778a146103b65780639b1385d0146103b1578063a09a1601146103ac578063a201e414146103a7578063a217fddf146103a2578063a8f978371461039d578063b0349b0c14610398578063b69af17d14610393578063c1b8411a1461038e578063c213c73b14610389578063c406584a14610384578063c54e44eb1461037f578063c8ef95ae1461037a578063c944577314610375578063cdb5998214610370578063d0a9471c1461036b578063d547741f14610366578063d5c976ea14610361578063d5f1b5b71461035c578063d7f531b514610357578063d90fdff114610352578063db2dde201461034d578063dc97da8d14610348578063df08b37214610343578063e1d4658b1461033e578063e63ab1e914610339578063ec87621c14610334578063ef55bd2e1461032f578063f2fde38b1461032a578063f4145a8314610325578063f8453e7c146103205763fdabbeb81461031b575f80fd5b6127ad565b6124fd565b6123c3565b612396565b61235c565b612322565b6122e8565b6122ae565b612294565b61220f565b6121e9565b6121bb565b61218d565b612153565b612119565b6120b9565b61207f565b612054565b612026565b611ff8565b611fca565b611de7565b611a19565b6119eb565b6119c4565b61194c565b6115e6565b6115cc565b611592565b611551565b611523565b6114e9565b6114ad565b61143b565b611411565b61138e565b611318565b6112ea565b6112bc565b6111aa565b611095565b611078565b611057565b610fbd565b610f83565b610ed4565b610e77565b610d7a565b610d4c565b610cbd565b610c8f565b610c61565b610c20565b610bd6565b6109b6565b610955565b610931565b610914565b6108e6565b610829565b6107c8565b6107ae565b6106c3565b61065c565b61062e565b6105dc565b6105ae565b610580565b610552565b6104a7565b7fffffffff000000000000000000000000000000000000000000000000000000008116036104a357565b5f80fd5b346104a35760206003193601126104a35760207fffffffff000000000000000000000000000000000000000000000000000000006004356104e781610479565b167f7965db0b00000000000000000000000000000000000000000000000000000000811490811561051e575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f610513565b5f9103126104a357565b346104a3575f6003193601126104a357602060405173a188eec8f81263234da3622a406892f3d630f98c8152f35b346104a3575f6003193601126104a3576020604051736351370a1c982780da2d8c85dfedd421f7193fa58152f35b346104a3575f6003193601126104a357602060405173c49b4ecc14aa31ef0ad077edcf53fab4201b724c8152f35b346104a35760206003193601126104a35760206106266004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b346104a3575f6003193601126104a3576020600654604051908152f35b6001600160a01b038116036104a357565b346104a35760406003193601126104a3576106c160243560043561067f8261064b565b6106bc6106b7825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b614373565b61463a565b005b346104a3575f6003193601126104a3576106db6142eb565b6007546106e6612bc6565b905f1981018181116107a9575f52600560205266038d7ea4c6800060405f205411806107a2575b61077a576107339115610759575b61072e6107296007546128db565b600755565b6128db565b7febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3355f80a2005b5f610774610766836128b2565b5f52600560205260405f2090565b5561071b565b7f9488aaa6000000000000000000000000000000000000000000000000000000005f5260045ffd5b508161070d565b612885565b346104a3575f6003193601126104a35760206106266129f2565b346104a35760406003193601126104a3576004356024356107e88161064b565b336001600160a01b03821603610801576106c191614712565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a3575f6003193601126104a3576108416147e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff8116156108be5760ff19167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a3575f6003193601126104a357602060405173ff30586cd0f29ed462364c7e81375fc0c71219b18152f35b346104a3575f6003193601126104a3576020600854604051908152f35b346104a3575f6003193601126104a357602061094b612bc6565b6040519015158152f35b346104a3575f6003193601126104a35760206001600160a01b035f5416604051908152f35b9181601f840112156104a35782359167ffffffffffffffff83116104a3576020808501948460061b0101116104a357565b60ff8116036104a357565b346104a35760c06003193601126104a3576004356109d38161064b565b602435906109e08261064b565b6044356109ec8161064b565b6064359160843567ffffffffffffffff81116104a357610a1090369060040161097a565b909260a43594610a1f866109ab565b610a276147e2565b6001600160a01b03610a69610a5d610a50876001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b16610bae576001600160a01b0384169586158015610b9d575b8015610b8c575b8015610b84575b610b5c57610af8610b3696610b3095610b07946001600160a01b03610aec9c169b8c97610acd610abe61246d565b6001600160a01b03909a168a52565b6001600160a01b038b1660208a01526001600160a01b03166040890152565b60608701523691612bec565b608084015260ff1660a0830152565b610b2b81610b26856001600160a01b03165f52600260205260405f2090565b612d0e565b612eec565b836148b9565b7fe707395e33aba2b86eeb8427d34294bf318cfbc202805d3452f1f9a753bb77bc5f80a3005b7f6dac6a09000000000000000000000000000000000000000000000000000000005f5260045ffd5b508315610a90565b506001600160a01b03831615610a89565b506001600160a01b03881615610a82565b7f5a7e258d000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a35760406003193601126104a357600435610bf38161064b565b6001600160a01b0360243591165f52600460205260405f20905f52602052602060405f2054604051908152f35b346104a3575f6003193601126104a357602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346104a3575f6003193601126104a3576020604051738fffffd4afb6115b954bd326cbe7b4ba576818f68152f35b346104a3575f6003193601126104a3576020604051734462ed748b8f7985a4ac6b538dfc105fce2dd1658152f35b346104a35760406003193601126104a357600435610cda8161064b565b60243590610ce6614a1f565b610cee614a72565b6001600160a01b0360075491165f52600460205260405f20815f5260205260405f208054908382018092116107a957555f52600560205260405f208054918083018093116107a9576106c192610d4792556006546128e9565b600655565b346104a3575f6003193601126104a357602060405173fb3bd022d5dacf95ee28a6b07825d4ff9c5b38148152f35b346104a3575f6003193601126104a35760206040517f33986ffa000000000000000000000000000000000000000000000000000000008152f35b9060c08101916001600160a01b0381511682526001600160a01b0360208201511660208301526001600160a01b0360408201511660408301526060810151606083015260808101519260c060808401528351809152602060e084019401905f5b818110610e305750505060a09081015160ff1691015290565b90565b825180517fffffffff0000000000000000000000000000000000000000000000000000000016875260209081015160ff168188015260409096019590920191600101610e14565b346104a35760206003193601126104a3576001600160a01b03600435610e9c8161064b565b610ea4612f22565b50165f526002602052610ed0610ebc60405f20612fde565b604051918291602083526020830190610db4565b0390f35b346104a3575f6003193601126104a357610eec6147e2565b5f6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346104a3575f6003193601126104a35760206040517f8d7ef9bb000000000000000000000000000000000000000000000000000000008152f35b346104a3575f6003193601126104a357610fd561304c565b6040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061100c57505050500390f35b91936020611047827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851610db4565b9601920192018594939192610ffd565b346104a3575f6003193601126104a357602060405166038d7ea4c680008152f35b346104a3575f6003193601126104a357602060405162a8ad418152f35b346104a3575f6003193601126104a357335f9081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b602052604090205460ff161561115a576110e3614a1f565b600160ff197fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60245260445ffd5b346104a35760606003193601126104a3576004356111c78161064b565b60243560443567ffffffffffffffff81116104a3576111ea90369060040161097a565b916111f36147e2565b6001600160a01b03841693845f5260026020526001600160a01b036112248160405f2054166001600160a01b031690565b1615610bae577f3873ba1b315bac9fc26e3ba3a0f29bf6e239c09bd350fdddb5a28cb4437dfbab936112899383600361126e856001600160a01b03165f52600260205260405f2090565b01558161128e575b5050604051918252509081906020820190565b0390a2005b60046112ae6112b4946001600160a01b03165f52600260205260405f2090565b016130cb565b5f8080611276565b346104a3575f6003193601126104a357602060405173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488152f35b346104a3575f6003193601126104a35760206040517345054c6753b4bce40c5d54418dabc20b070f85be8152f35b346104a3575f6003193601126104a35760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b9181601f840112156104a35782359167ffffffffffffffff83116104a3576020808501948460051b0101116104a357565b346104a35760806003193601126104a35760043567ffffffffffffffff81116104a3576113bf90369060040161135d565b9060243567ffffffffffffffff81116104a3576113e090369060040161135d565b926044359367ffffffffffffffff85116104a3576114056106c195369060040161135d565b9390926064359561324e565b346104a35760206003193601126104a3576004355f526005602052602060405f2054604051908152f35b346104a35760406003193601126104a357602060ff6114a16024356004356114628261064b565b5f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b346104a35760406003193601126104a3576106c16004356114cd8161064b565b602435906114d96147e2565b6001600160a01b033391166152cd565b346104a3575f6003193601126104a35760206040517fccc143b8000000000000000000000000000000000000000000000000000000008152f35b346104a3575f6003193601126104a357602060405173a3931d71877c0e7a3148cb7eb4463524fec27fbd8152f35b346104a3575f6003193601126104a357602060ff7f34255c687a9ae703b4ae30638c7776ee81513fdfa4b4dd654e5578b21b95d80054166040519015158152f35b346104a3575f6003193601126104a35760206040517f95991276000000000000000000000000000000000000000000000000000000008152f35b346104a3575f6003193601126104a35760206040515f8152f35b346104a3575f6003193601126104a3576115fe6142eb565b6116176116096129f2565b611611614841565b9061367d565b5f81131561171857611633610a5d5f546001600160a01b031690565b803b156104a3575f60405180927f2dca441600000000000000000000000000000000000000000000000000000000825281838161167888600483019190602083019252565b03925af180156116ff57611704575b5061169d610a5d6001546001600160a01b031690565b803b156104a3576040517f8bdf67f200000000000000000000000000000000000000000000000000000000815260048101929092525f908290602490829084905af180156116ff576116eb57005b806116f95f6106c19361244a565b80610548565b61297a565b806116f95f6117129361244a565b5f611687565b5f811261172157005b611735610a5d5f546001600160a01b031690565b6117476001600160a01b038216610a5d565b61175c610a5d6001546001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015290939091602090839060249082905afa9182156116ff575f926118b4575b50816117ba82613695565b11156118a45750915b803b156104a3576040517f95ccea670000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152602482018390525f908290604490829084905af180156116ff57611890575b50611835610a5d5f546001600160a01b031690565b803b156104a3576040517fdfff856800000000000000000000000000000000000000000000000000000000815260048101929092525f908290602490829084905af180156116ff57156106c157806116f95f6106c19361244a565b806116f95f61189e9361244a565b5f611820565b6118ae9150613695565b916117c3565b6118d791925060203d6020116118de575b6118cf818361244a565b810190612999565b905f6117af565b503d6118c5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60035481101561192e5760035f52600660205f20910201905f90565b6118e5565b805482101561192e575f52600660205f20910201905f90565b346104a35760206003193601126104a3576004356003548110156104a35761197390611912565b508054600182015460028301546003840154600590940154604080516001600160a01b03958616815293851660208501529390911692820192909252606081019290925260ff16608082015260a090f35b346104a35760206003193601126104a35760206106266004356119e68161064b565b6136c1565b346104a3575f6003193601126104a357602060405173e5dab8208c1f4cce15883348b72086dbace3e64b8152f35b346104a35760206003193601126104a357600435611a368161064b565b611a3e6147e2565b611a61611a5c826001600160a01b03165f52600260205260405f2090565b612fde565b9060208201916001600160a01b03611a8084516001600160a01b031690565b1615610bae57600160ff611a9860a084015160ff1690565b161480611d6b575b611aa9836136c1565b1515908180611d63575b611d3b57611c40575b5051611ad0906001600160a01b0316610a5d565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383166024820152602081604481855afa9081156116ff57611b2e9284915f93611c1f575b506157f4565b611b51611b4c826001600160a01b03165f52600260205260405f2090565b613772565b611b5961304c565b80515f5b818110611b95575b6001600160a01b0384167fe7816966a8707500235695bccaf160aa49f5d2cb6356db2408ded57832c8b9165f80a2005b611bb36020611ba48386612985565b5101516001600160a01b031690565b6001600160a01b03611bcf610a5d88516001600160a01b031690565b911614611bde57600101611b5d565b906001600160a01b039450611c02611c0f93611bfc611c09936128b2565b90612985565b5191611912565b90612ed8565b611c1761379b565b5f8080611b65565b611c3991935060203d6020116118de576118cf818361244a565b915f611b28565b90600490611c4d846156ac565b926020611c64610a5d84516001600160a01b031690565b604051948580927f313ce5670000000000000000000000000000000000000000000000000000000082525afa9283156116ff57611ad094611cbb611cb6610a5d96611cc1945f91611d0c575b506129bd565b6129ce565b906129df565b9080611d03575b611cd5575b509150611abc565b60085481811115611cf857611cf291611ced916128ce565b600855565b5f611ccd565b5050611cf25f611ced565b50801515611cc8565b611d2e915060203d602011611d34575b611d26818361244a565b8101906129a8565b5f611cb0565b503d611d1c565b7f3ad69e2b000000000000000000000000000000000000000000000000000000005f5260045ffd5b508015611ab3565b506040517f69e25ec10000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b0387165afa9081156116ff575f91611db8575b50611aa0565b611dda915060203d602011611de0575b611dd2818361244a565b81019061375a565b5f611db2565b503d611dc8565b346104a35760606003193601126104a35760043567ffffffffffffffff81116104a357611e1890369060040161135d565b60243567ffffffffffffffff81116104a357611e3890369060040161135d565b9160443567ffffffffffffffff81116104a357611e5990369060040161135d565b9093611e63614a1f565b611e6b6142eb565b82158015611fc0575b8015611fb6575b610b5c575f5b838110611e8a57005b8085611fad7f293fd31fc9330af6e8ded58e129ab615ec6c97318fc310339efd980fc1d8d47a7fffffffff000000000000000000000000000000000000000000000000000000008a611f92868a8f611f1f838f611f868f9160019f818f97611f80898e611f7a611f73878f611f8c9f611f1f838f611f67611f3a9f83611f3a918f611f62611f24611f1f8589611f6d9d613182565b6130c1565b611f5c6004611f56611f3f611f3a898989613182565b613192565b6001600160a01b03165f52600260205260405f2090565b01612f53565b90614a85565b613182565b99613182565b9461319c565b3691613218565b91614e11565b50613182565b9b613182565b9361319c565b6001600160a01b03604096929651948594169716958361380f565b0390a301611e81565b5081831415611e7b565b5080831415611e74565b346104a3575f6003193601126104a357602060405173dac17f958d2ee523a2206206994597c13d831ec78152f35b346104a3575f6003193601126104a357602060405173dc035d45d973e3ec169d2276ddab16f1e407384f8152f35b346104a3575f6003193601126104a357602060405173f6223c567f21e33e859ed7a045773526e9e3c2d58152f35b346104a35760406003193601126104a35760206106266004356120768161064b565b60243590613889565b346104a3575f6003193601126104a35760206040517fb450dfce000000000000000000000000000000000000000000000000000000008152f35b346104a35760406003193601126104a3576106c16024356004356120dc8261064b565b6121146106b7825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b614712565b346104a3575f6003193601126104a35760206040517f6e553f65000000000000000000000000000000000000000000000000000000008152f35b346104a3575f6003193601126104a35760206040517fba087652000000000000000000000000000000000000000000000000000000008152f35b346104a3575f6003193601126104a357602060405173baecba470c229984b75bc860efe8e97ae082bb9f8152f35b346104a3575f6003193601126104a3576020604051733e7d1eab13ad0104d2750b8863b489d65364e32d8152f35b346104a3575f6003193601126104a35760206001600160a01b0360015416604051908152f35b346104a35760206003193601126104a3576001600160a01b036004356122348161064b565b165f908152600260208181526040928390208054600182015493820154600383015460059093015486516001600160a01b039384168152958316948601949094521693830193909352606082019290925260ff909116608082015260a090f35b346104a3575f6003193601126104a3576020610626613b97565b346104a3575f6003193601126104a35760206040517f991052b7000000000000000000000000000000000000000000000000000000008152f35b346104a3575f6003193601126104a35760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b346104a3575f6003193601126104a35760206040517f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088152f35b346104a3575f6003193601126104a35760206040517fb460af94000000000000000000000000000000000000000000000000000000008152f35b346104a35760206003193601126104a3576106c16004356123b68161064b565b6123be6147e2565b613cfa565b346104a3575f6003193601126104a3576020600754604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761242957604052565b6123e0565b60c0810190811067ffffffffffffffff82111761242957604052565b90601f601f19910116810190811067ffffffffffffffff82111761242957604052565b6040519061247c60c08361244a565b565b67ffffffffffffffff81116124295760051b60200190565b9080601f830112156104a35781356124ad8161247e565b926124bb604051948561244a565b81845260208085019260051b8201019283116104a357602001905b8282106124e35750505090565b6020809183356124f28161064b565b8152019101906124d6565b346104a35760a06003193601126104a35760043561251a8161064b565b602435906125278261064b565b6044356125338161064b565b60643561253f8161064b565b60843567ffffffffffffffff81116104a35761255f903690600401612496565b917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549467ffffffffffffffff6125b26125a46125a08960ff9060401c1690565b1590565b9767ffffffffffffffff1690565b16801590816127a5575b600114908161279b575b159081612792575b5061276a5761264f948661264660017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6126ef57613dcd565b61265557005b6126c07fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b612765680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b613dcd565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f6125ce565b303b1591506125c6565b8791506125bc565b346104a35760606003193601126104a35760043567ffffffffffffffff81116104a3576127de903690600401612496565b60243567ffffffffffffffff81116104a357366023820112156104a35780600401359061280a8261247e565b91612818604051938461244a565b8083526024602084019160051b830101913683116104a357602401905b82821061286b575050506044359167ffffffffffffffff83116104a3576128636106c193369060040161135d565b929091613f72565b60208091833561287a81610479565b815201910190612835565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b905f1982019182116107a957565b60120390601282116107a957565b919082039182116107a957565b90600182018092116107a957565b919082018092116107a957565b6020818303126104a35780519067ffffffffffffffff82116104a357019080601f830112156104a357815161292a8161247e565b92612938604051948561244a565b81845260208085019260051b8201019283116104a357602001905b8282106129605750505090565b60208091835161296f8161064b565b815201910190612953565b6040513d5f823e3d90fd5b805182101561192e5760209160051b010190565b908160209103126104a3575190565b908160209103126104a35751610e2d816109ab565b60ff166012039060ff82116107a957565b60ff16604d81116107a957600a0a90565b818102929181159184041417156107a957565b5f9060045f612a0b610a5d82546001600160a01b031690565b604051928380927f78b926360000000000000000000000000000000000000000000000000000000082525afa9081156116ff575f91612ba4575b5080515f915b818310612a9b575050506003545f905b808210612a66575050565b9092612a93600191612a8d6119e684612a7e89611912565b5001546001600160a01b031690565b906128e9565b930190612a5b565b9091936001600160a01b03612ac3610a5d612ab68886612985565b516001600160a01b031690565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152911691602082602481865afa9182156116ff575f92612b81575b50602060049293604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa9182156116ff57600193611cbb611cb6612b6095612a8d945f91612b6957506129bd565b94019190612a4b565b611d2e915060203d8111611d3457611d26818361244a565b60049250612b9d602091823d81116118de576118cf818361244a565b9250612b09565b612bc091503d805f833e612bb8818361244a565b8101906128f6565b5f612a45565b612bce6129f2565b66038d7ea4c6800081018091116107a957612be7614841565b111590565b929192612bf88261247e565b93612c06604051958661244a565b602085848152019260061b8201918183116104a357925b828410612c2a5750505050565b6040848303126104a35760206040918251612c448161240d565b8635612c4f81610479565b815282870135612c5e816109ab565b83820152815201930192612c1d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b8054905f815581612ca8575050565b5f5260205f20908101905b818110612cbe575050565b5f8155600101612cb3565b9068010000000000000000811161242957815491818155828210612cec57505050565b5f5260205f2091820191015b818110612d03575050565b5f8155600101612cf8565b815181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039190911617815590612d8c6001600160a01b0360208301511660018401906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b612dd46001600160a01b0360408301511660028401906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60608101516003830155600482016080820151906020825192612df78484612cc9565b01905f5260205f205f915b838310612e325750505050906005612e2160a061247c94015160ff1690565b91019060ff1660ff19825416179055565b6001602082612ecc60ff83859651612e957fffffffff000000000000000000000000000000000000000000000000000000008251168a9060e01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055565b015187547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16911660201b64ff0000000016178655565b01920192019190612e02565b9190612ee75761247c91612d0e565b612c6d565b6003546801000000000000000081101561242957806001612f1292016003556003611933565b919091612ee75761247c91612d0e565b60405190612f2f8261242e565b5f60a083828152826020820152826040820152826060820152606060808201520152565b908154612f5f8161247e565b92612f6d604051948561244a565b81845260208401905f5260205f205f915b838310612f8b5750505050565b600160208192604051612f9d8161240d565b60ff86547fffffffff000000000000000000000000000000000000000000000000000000008160e01b168352841c1683820152815201920192019190612f7e565b9061247c604051612fee8161242e565b83546001600160a01b039081168252600185015481166020830152600285015416604082015292839060a090613044906005906003810154606086015261303760048201612f53565b6080860152015460ff1690565b60ff16910152565b600354906130598261247e565b91613067604051938461244a565b80835260035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b602085015b8383106130a35750505050565b600660206001926130b385612fde565b815201920192019190613096565b35610e2d81610479565b906130d68383612cc9565b905f5260205f205f915b8383106130ed5750505050565b600160408261312f83943561310181610479565b869060e01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055565b6131766020820135613140816109ab565b86547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1660209190911b64ff0000000016178655565b019201920191906130e0565b919081101561192e5760051b0190565b35610e2d8161064b565b919081101561192e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156104a357019081359167ffffffffffffffff83116104a35760200182360381136104a3579190565b67ffffffffffffffff811161242957601f01601f191660200190565b929192613224826131fc565b91613232604051938461244a565b8294818452818301116104a3578281602093845f960137010152565b919093949261325b614a1f565b6132636142eb565b84158015613673575b8015613669575b801561365e575b610b5c57613286612f22565b50613299875f52600560205260405f2090565b54955f955f5b8181106132fe575050505050505060075483036132bb57505050565b8181106132da57506132ca5750565b5f90815260056020526040812055565b916132fa91506132f2905f52600560205260405f2090565b9182546128ce565b9055565b61330c611f3a828489613182565b61332a611a5c826001600160a01b03165f52600260205260405f2090565b61334661333b611f1f85898b613182565b608083015190614b3f565b61335a610a5d82516001600160a01b031690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290602090829060249082905afa80156116ff578a85898b945f94613626575b50816133bf611f1f6133c694611f73946133cd9899613182565b938b61319c565b9085614e11565b506133e2610a5d83516001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529190602090839060249082905afa80156116ff57613433925f91613608575b506128ce565b9182613445575b50505060010161329f565b6134b8610a5d83602093613466610a5d60049897516001600160a01b031690565b7f5fbaf84d3e4b0852ffdf50e317f255a9e2f63d8875ebb1e3f5b954300e3e8a546001600160a01b03806040519316931691806134a88a829190602083019252565b0390a3516001600160a01b031690565b604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa80156116ff57611cb6611cbb91613501945f91612b6957506129bd565b896135f1575b906001917f33986ffa000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061355b611f1f858a8c613182565b16148015613599575b613570575b819261343a565b6008548181111561358e5761358891611ced916128ce565b5f613569565b50506135885f611ced565b507f991052b7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006135ea611f1f858a8c613182565b1614613564565b97906135ff896001936128e9565b98909150613507565b613620915060203d81116118de576118cf818361244a565b5f61342d565b6133cd9450916133bf611f1f82611f73946136516133c69760203d81116118de576118cf818361244a565b98509450945050506133a5565b50600754871161327a565b5083851415613273565b508085141561326c565b81810392915f1380158285131691841216176107a957565b7f800000000000000000000000000000000000000000000000000000000000000081146107a9575f0390565b906001600160a01b035f92165f5260026020526136e060405f20612fde565b60a081015160ff16600181036137375750610e2d91925061370b60208201516001600160a01b031690565b9061373161372360408301516001600160a01b031690565b91516001600160a01b031690565b916154bd565b6002146137415750565b60400151909150610e2d906001600160a01b0316615327565b908160209103126104a3575180151581036104a35790565b60055f9182815582600182015582600282015582600382015561379760048201612c99565b0155565b60035480156137e2575f19016137b2816003611933565b612ee7576005815f8093558260018201558260028201558260038201556137db60048201612c99565b0155600355565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b8115613840570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f1981146107a95760010190565b604d81116107a957600a0a90565b919091613894614a1f565b61389c614a72565b66038d7ea4c680006138b6845f52600560205260405f2090565b54118015613b84575b61077a576138ef836138e2836001600160a01b03165f52600460205260405f2090565b905f5260205260405f2090565b54928315613b7d576139175f916138e2846001600160a01b03165f52600460205260405f2090565b5560045f61392f610a5d82546001600160a01b031690565b604051928380927f78b926360000000000000000000000000000000000000000000000000000000082525afa9081156116ff575f91613b63575b50805192846139796125a0612bc6565b613b3f575b5f5b85811080613b36575b15613aea576001600160a01b036139a6610a5d612ab68488612985565b166040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481855afa80156116ff5760ff915f91613acc575b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291169190602081602481855afa80156116ff57613a43915f91613aae575b50611cbb613a3e856128c0565b61387b565b80613a5a575b505050613a559061386d565b613980565b9087613a8f613a5595949b613a95948181115f14613a9d5750613a89613a3e613a8383806128ce565b9e6128c0565b90613836565b916152cd565b905f80613a49565b613a3e613a83613a899280946128ce565b613ac6915060203d81116118de576118cf818361244a565b5f613a31565b613ae4915060203d8111611d3457611d26818361244a565b5f6139e6565b50935093905066038d7ea4c68000915011613b0e57610e2d610d47826006546128ce565b7ff4d678b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b50861515613989565b9450613b5d613b55613b4f6129f2565b876129df565b613a89614841565b9461397e565b613b7791503d805f833e612bb8818361244a565b5f613969565b505f925050565b50613b906007546128b2565b83116138bf565b5f9060045f613bb0610a5d82546001600160a01b031690565b604051928380927f78b926360000000000000000000000000000000000000000000000000000000082525afa9081156116ff575f91613ce0575b5080515f915b818310613bfc57505050565b9091936001600160a01b03613c17610a5d612ab68886612985565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152911691602082602481865afa9182156116ff575f92613cbd575b50602060049293604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa9182156116ff57600193611cbb611cb6613cb495612a8d945f91612b6957506129bd565b94019190613bf0565b60049250613cd9602091823d81116118de576118cf818361244a565b9250613c5d565b613cf491503d805f833e612bb8818361244a565b5f613bea565b6001600160a01b03168015613da1576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b039291613e6c613e729297959697613dea615bcb565b613df2615bcb565b613dfa615bcb565b613e0333613cfa565b613e0b615bcb565b613e13615bcb565b60ff197fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330055613e63615bcb565b613e6c816144c4565b5061456e565b50600160ff197f34255c687a9ae703b4ae30638c7776ee81513fdfa4b4dd654e5578b21b95d8005416177f34255c687a9ae703b4ae30638c7776ee81513fdfa4b4dd654e5578b21b95d800551691613ef6836001600160a01b03167fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555f5b8451811015613f535780613f4c613f47612ab660019489612985565b6143f3565b5001613f2b565b50909250613f6a91613f656001600755565b6148b9565b61247c614950565b92613f7b614a1f565b613f836142eb565b613f8e6125a0612bc6565b6142c357835192825184148015906142b9575b610b5c57613fad612f22565b505f5b84811061401e57505050505050600754613fc8613b97565b613fd4600854826128e9565b613ff3600654613fec855f52600560205260405f2090565b54906128ce565b11613b0e57614004610766836128b2565b54111561400e5750565b61401b6107665f926128b2565b55565b614031611a5c611f3f612ab6848a612985565b906140736140686140428388612985565b517fffffffff000000000000000000000000000000000000000000000000000000001690565b608084015190614bf3565b614087610a5d83516001600160a01b031690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290602090829060249082905afa9081156116ff575f9161429b575b506140fa6140df612ab6848b612985565b6140ec614042858a612985565b611f7a611f73868a8a61319c565b5061410f610a5d84516001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529190602090839060249082905afa9081156116ff57614160925f9261427b57506128ce565b9160046141736119e6612ab6858c612985565b6020614189610a5d85516001600160a01b031690565b604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa80156116ff57611cb6613a89916141d2945f91612b6957506129bd565b60608201518015159182614271575b5050614249576001927ff155ed2659dcb48d4b2a72975078c1e97c5b13012b866374ee0312a364ce60486001600160a01b03614234610a5d614226612ab6888f612985565b95516001600160a01b031690565b6040519384528116931691602090a301613fb0565b7f2b676364000000000000000000000000000000000000000000000000000000005f5260045ffd5b1190505f806141e1565b61429491925060203d81116118de576118cf818361244a565b905f61342d565b6142b3915060203d81116118de576118cf818361244a565b5f6140ce565b5081841415613fa1565b7f3d693ada000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f9081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff161561432357565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0860245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6143ba3360405f20906001600160a01b03165f5260205260405f2090565b5416156143c45750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b6001600160a01b0381165f9081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff166144bf576001600160a01b03165f8181527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a60205260408120805460ff191660011790553391907f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b505f90565b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166144bf576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b6001600160a01b0381165f9081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b602052604090205460ff166144bf576001600160a01b03165f8181527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b60205260408120805460ff191660011790553391907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6146818360405f20906001600160a01b03165f5260205260405f2090565b541661470c57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526146cc8260405f20906001600160a01b03165f5260205260405f2090565b600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6147598360405f20906001600160a01b03165f5260205260405f2090565b54161561470c57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526147a58260405f20906001600160a01b03165f5260205260405f2090565b60ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361481557565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b600460206001600160a01b035f5416604051928380927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa9081156116ff575f9161489a575b5060065481018091116107a95790565b6148b3915060203d6020116118de576118cf818361244a565b5f61488a565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03831660248201529091602082806044810103816001600160a01b0387165afa9182156116ff575f9261492f575b505f1982018092116107a95761247c926158c9565b61494991925060203d6020116118de576118cf818361244a565b905f61491a565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273a188eec8f81263234da3622a406892f3d630f98c602482015260208160448173dc035d45d973e3ec169d2276ddab16f1e407384f5afa9081156116ff575f91614a00575b505f1981018091116107a95761247c9073a188eec8f81263234da3622a406892f3d630f98c73dc035d45d973e3ec169d2276ddab16f1e407384f6158c9565b614a19915060203d6020116118de576118cf818361244a565b5f6149c1565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416614a4a57565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b035f541633036142c357565b908051915f5b838110614aba577f3d693ada000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffff00000000000000000000000000000000000000000000000000000000614ae58285612985565b5151167fffffffff0000000000000000000000000000000000000000000000000000000083161480614b24575b614b1e57600101614a8b565b50505050565b50600160ff6020614b358487612985565b5101511614614b12565b908051915f5b838110614b74577f3d693ada000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffff00000000000000000000000000000000000000000000000000000000614b9f8285612985565b5151167fffffffff0000000000000000000000000000000000000000000000000000000083161480614bd8575b614b1e57600101614b45565b50600260ff6020614be98487612985565b5101511614614bcc565b908051915f5b838110614c28577f3d693ada000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffff00000000000000000000000000000000000000000000000000000000614c538285612985565b5151167fffffffff0000000000000000000000000000000000000000000000000000000083161480614c8c575b614b1e57600101614bf9565b5060ff6020614c9b8386612985565b5101511615614c80565b91908260409103126104a35760208251920151610e2d8161064b565b908160209103126104a35751610e2d8161064b565b908160609103126104a35780519160406020830151614cf48161064b565b920151610e2d8161064b565b91908260409103126104a35760208251614d198161064b565b92015190565b5f5b838110614d305750505f910152565b8181015183820152602001614d21565b7fffffffff0000000000000000000000000000000000000000000000000000000060049392168152614d7b8251809360208685019101614d1f565b010190565b3d15614daa573d90614d91826131fc565b91614d9f604051938461244a565b82523d5f602084013e565b606090565b15614db75750565b6044601f91601f196040519384927f08c379a000000000000000000000000000000000000000000000000000000000845260206004850152614e088151809281602488015260208888019101614d1f565b01168101030190fd5b919091307fffffffff0000000000000000000000000000000000000000000000000000000084167f8d7ef9bb00000000000000000000000000000000000000000000000000000000811480156152a4575b156150275750506001600160a01b03614e846020845185010160208501614d00565b50166040517f568d4b6f00000000000000000000000000000000000000000000000000000000815260208160048173a188eec8f81263234da3622a406892f3d630f98c5afa9081156116ff575f91615008575b5015801590614f8f575b614f67575b6001600160a01b0330911603614f3f575f9283614f12614f208295604051928391602083019687614d40565b03601f19810183528261244a565b51925af1610e2d614f2f614d80565b91614f3983615a9b565b90614daf565b7f8e194f33000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6bef704f000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040517ffae036d500000000000000000000000000000000000000000000000000000000815260208160048173a188eec8f81263234da3622a406892f3d630f98c5afa9081156116ff575f91614fe9575b501515614ee1565b615002915060203d6020116118de576118cf818361244a565b5f614fe1565b615021915060203d6020116118de576118cf818361244a565b5f614ed7565b7f6e553f650000000000000000000000000000000000000000000000000000000081036150745750506001600160a01b0361506b6020845185010160208501614ca5565b9050165b614ee6565b7fb460af94000000000000000000000000000000000000000000000000000000008114801561527b575b156150c95750506001600160a01b036150c06020845185010160208501614cd6565b50905016614ee6565b7fccc143b8000000000000000000000000000000000000000000000000000000000361506f576001600160a01b03821661510c6020855186010160208601614ca5565b5090604051917f44966ba0000000000000000000000000000000000000000000000000000000008352602083600481855afa9283156116ff57615196936020915f9161524e575b506040517f9290d4270000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015293849081906024820190565b0381855afa9283156116ff576004936020926151b9925f9261522f575b506129df565b91604051938480927fa27eccc10000000000000000000000000000000000000000000000000000000082525afa9182156116ff5761506f92611ced92615206925f9261520e575b50613836565b6008546128e9565b61522891925060203d6020116118de576118cf818361244a565b905f615200565b615247919250843d86116118de576118cf818361244a565b905f6151b3565b61526e9150823d8411615274575b615266818361244a565b810190614cc1565b5f615153565b503d61525c565b507fba08765200000000000000000000000000000000000000000000000000000000811461509e565b507f95991276000000000000000000000000000000000000000000000000000000008114614e62565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0392909216602483015260448083019390935291815261247c9161532260648361244a565b615b5e565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152906001600160a01b0316602082602481845afa9182156116ff576153b4926020915f916154a0575b50604051809481927f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381845afa9081156116ff576004925f9261547e575b50602090604051938480927f38d52e0f0000000000000000000000000000000000000000000000000000000082525afa9182156116ff576001600160a01b03926020915f91615461575b506004604051809581937f313ce567000000000000000000000000000000000000000000000000000000008352165afa80156116ff57611cb6611cbb91610e2d945f91611d0c57506129bd565b6154789150823d841161527457615266818361244a565b5f615414565b602091925061549990823d84116118de576118cf818361244a565b91906153ca565b6154b79150823d84116118de576118cf818361244a565b5f61537b565b906001600160a01b036020818416946004604051809481937f313ce567000000000000000000000000000000000000000000000000000000008352165afa80156116ff5760ff61551a91615526935f9161568d575b5016936156ac565b611cbb613a3e856128c0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290929091602090839060249082906001600160a01b03165afa9182156116ff575f9261566c575b506040517f44966ba0000000000000000000000000000000000000000000000000000000008152602081600481885afa80156116ff57615602956020925f9261564d575b5060405180809881947f9290d427000000000000000000000000000000000000000000000000000000008352600483019190916001600160a01b036020820193169052565b03915afa9182156116ff5761562861562e93613a8992610e2d975f9261563357506129df565b9161387b565b6128e9565b61524791925060203d6020116118de576118cf818361244a565b615665919250833d851161527457615266818361244a565b905f6155bd565b61568691925060203d6020116118de576118cf818361244a565b905f615579565b6156a6915060203d602011611d3457611d26818361244a565b5f615512565b60206001600160a01b03916004604051809481937fa8c62e76000000000000000000000000000000000000000000000000000000008352165afa80156116ff576001600160a01b03915f916157d5575b506040517facfd7dce000000000000000000000000000000000000000000000000000000008152306004820152911690602081602481855afa9081156116ff575f916157b6575b506040517f9bf5bbe700000000000000000000000000000000000000000000000000000000815230600482015291602090839060249082905afa9081156116ff57610e2d925f92615795575b506128e9565b6157af91925060203d6020116118de576118cf818361244a565b905f61578f565b6157cf915060203d6020116118de576118cf818361244a565b5f615743565b6157ee915060203d60201161527457615266818361244a565b5f6156fc565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383166024820152929392909190602081806044810103816001600160a01b0387165afa9081156116ff575f916158aa575b5084811061586e579361247c939403916158c9565b6001600160a01b0385927fe570110f000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b6158c3915060203d6020116118de576118cf818361244a565b5f615859565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b0385166024840152604480840196909652948252929390925f9061592160648661244a565b84519082855af15f51903d8161599a575b501590505b61594057505050565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000060208201526001600160a01b0390931660248401525f604484015261247c92615322906159948160648101614f12565b82615b5e565b151590506159ba57506159376001600160a01b0382163b15155b5f615932565b600161593791146159b4565b604051906159d560408361244a565b600282527f52310000000000000000000000000000000000000000000000000000000000006020830152565b6020818303126104a35780519067ffffffffffffffff82116104a3570181601f820112156104a3578051615a34816131fc565b92615a42604051948561244a565b818452602082840101116104a357610e2d9160208085019101614d1f565b60405190615a6f60408361244a565b600282527f52430000000000000000000000000000000000000000000000000000000000006020830152565b6004815110615b22577f08c379a0000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208301511614615afa5750610e2d615a60565b6044815110615b1957806024806004610e2d9401518301019101615a01565b50610e2d6159c6565b50604051615b3160408261244a565b600281527f5230000000000000000000000000000000000000000000000000000000000000602082015290565b905f602091828151910182855af11561297a575f513d615bc257506001600160a01b0381163b155b615b8d5750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415615b86565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615615bfa57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffdfea164736f6c634300081d000af0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00