1 tx
2 calls
constructor
No constructor.
functions
accruedProtocolFees
viewfunction accruedProtocolFees() view returns (uint256)
allowance
viewfunction allowance(address, address) view returns (uint256)
annualInterestBips
viewfunction annualInterestBips() view returns (uint256)
archController
viewfunction archController() view returns (address)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
borrowableAssets
viewfunction borrowableAssets() view returns (uint256)
borrower
viewfunction borrower() view returns (address)
coverageLiquidity
viewfunction coverageLiquidity() view returns (uint256)
currentState
viewfunction currentState() view returns (tuple state)
decimals
viewfunction decimals() view returns (uint8)
delinquencyFeeBips
viewfunction delinquencyFeeBips() view returns (uint256)
delinquencyGracePeriod
viewfunction delinquencyGracePeriod() view returns (uint256)
factory
viewfunction factory() view returns (address)
feeRecipient
viewfunction feeRecipient() view returns (address)
getAccountWithdrawalStatus
viewfunction getAccountWithdrawalStatus(address accountAddress, uint32 expiry) view returns (tuple status)
getAvailableWithdrawalAmount
viewfunction getAvailableWithdrawalAmount(address accountAddress, uint32 expiry) view returns (uint256)
getUnpaidBatchExpiries
viewfunction getUnpaidBatchExpiries() view returns (uint32[])
getWithdrawalBatch
viewfunction getWithdrawalBatch(uint32 expiry) view returns (tuple batch)
hooks
viewfunction hooks() view returns (uint256)
isClosed
viewfunction isClosed() view returns (bool)
maximumDeposit
viewfunction maximumDeposit() view returns (uint256)
maxTotalSupply
viewfunction maxTotalSupply() view returns (uint256)
name
viewfunction name() view returns (string)
previousState
viewfunction previousState() view returns (tuple)
reserveRatioBips
viewfunction reserveRatioBips() view returns (uint256)
scaledBalanceOf
viewfunction scaledBalanceOf(address account) view returns (uint256)
scaledTotalSupply
viewfunction scaledTotalSupply() view returns (uint256)
scaleFactor
viewfunction scaleFactor() view returns (uint256)
sentinel
viewfunction sentinel() view returns (address)
sphereXEngine
viewfunction sphereXEngine() view returns (address)
sphereXOperator
viewfunction sphereXOperator() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalDebts
viewfunction totalDebts() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
version
purefunction version() pure returns (string)
withdrawableProtocolFees
viewfunction withdrawableProtocolFees() view returns (uint128)
withdrawalBatchDuration
viewfunction withdrawalBatchDuration() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
borrow
nonpayablefunction borrow(uint256 amount)
changeSphereXEngine
nonpayablefunction changeSphereXEngine(address newSphereXEngine)
closeMarket
nonpayablefunction closeMarket()
collectFees
nonpayablefunction collectFees()
deposit
nonpayablefunction deposit(uint256 amount)
depositUpTo
nonpayablefunction depositUpTo(uint256 amount) returns (uint256)
executeWithdrawal
nonpayablefunction executeWithdrawal(address accountAddress, uint32 expiry) returns (uint256)
executeWithdrawals
nonpayablefunction executeWithdrawals(address[] accountAddresses, uint32[] expiries) returns (uint256[] amounts)
nukeFromOrbit
nonpayablefunction nukeFromOrbit(address accountAddress)
queueFullWithdrawal
nonpayablefunction queueFullWithdrawal() returns (uint32 expiry)
queueWithdrawal
nonpayablefunction queueWithdrawal(uint256 amount) returns (uint32 expiry)
repay
nonpayablefunction repay(uint256 amount)
repayAndProcessUnpaidWithdrawalBatches
nonpayablefunction repayAndProcessUnpaidWithdrawalBatches(uint256 repayAmount, uint256 maxBatches)
rescueTokens
nonpayablefunction rescueTokens(address token)
setAnnualInterestAndReserveRatioBips
nonpayablefunction setAnnualInterestAndReserveRatioBips(uint16 _annualInterestBips, uint16 _reserveRatioBips)
setMaxTotalSupply
nonpayablefunction setMaxTotalSupply(uint256 _maxTotalSupply)
setProtocolFeeBips
nonpayablefunction setProtocolFeeBips(uint16 _protocolFeeBips)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
updateState
nonpayablefunction updateState()
events
AccountSanctioned
event AccountSanctioned(address indexed account)
AnnualInterestBipsUpdated
event AnnualInterestBipsUpdated(uint256 annualInterestBipsUpdated)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Borrow
event Borrow(uint256 assetAmount)
ChangedSpherexEngineAddress
event ChangedSpherexEngineAddress(address oldEngineAddress, address newEngineAddress)
ChangedSpherexOperator
event ChangedSpherexOperator(address oldSphereXAdmin, address newSphereXAdmin)
DebtRepaid
event DebtRepaid(address indexed from, uint256 assetAmount)
Deposit
event Deposit(address indexed account, uint256 assetAmount, uint256 scaledAmount)
FeesCollected
event FeesCollected(uint256 assets)
InterestAndFeesAccrued
event InterestAndFeesAccrued(uint256 fromTimestamp, uint256 toTimestamp, uint256 scaleFactor, uint256 baseInterestRay, uint256 delinquencyFeeRay, uint256 protocolFees)
MarketClosed
event MarketClosed(uint256 timestamp)
MaxTotalSupplyUpdated
event MaxTotalSupplyUpdated(uint256 assets)
ProtocolFeeBipsUpdated
event ProtocolFeeBipsUpdated(uint256 protocolFeeBips)
ReserveRatioBipsUpdated
event ReserveRatioBipsUpdated(uint256 reserveRatioBipsUpdated)
SanctionedAccountAssetsQueuedForWithdrawal
event SanctionedAccountAssetsQueuedForWithdrawal(address indexed account, uint256 expiry, uint256 scaledAmount, uint256 normalizedAmount)
SanctionedAccountAssetsSentToEscrow
event SanctionedAccountAssetsSentToEscrow(address indexed account, address escrow, uint256 amount)
SanctionedAccountWithdrawalSentToEscrow
event SanctionedAccountWithdrawalSentToEscrow(address indexed account, address escrow, uint32 expiry, uint256 amount)
StateUpdated
event StateUpdated(uint256 scaleFactor, bool isDelinquent)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
WithdrawalBatchClosed
event WithdrawalBatchClosed(uint256 indexed expiry)
WithdrawalBatchCreated
event WithdrawalBatchCreated(uint256 indexed expiry)
WithdrawalBatchExpired
event WithdrawalBatchExpired(uint256 indexed expiry, uint256 scaledTotalAmount, uint256 scaledAmountBurned, uint256 normalizedAmountPaid)
WithdrawalBatchPayment
event WithdrawalBatchPayment(uint256 indexed expiry, uint256 scaledAmountBurned, uint256 normalizedAmountPaid)
WithdrawalExecuted
event WithdrawalExecuted(uint256 indexed expiry, address indexed account, uint256 normalizedAmount)
WithdrawalQueued
event WithdrawalQueued(uint256 indexed expiry, address indexed account, uint256 scaledAmount, uint256 normalizedAmount)
errors
AccountBlocked
error AccountBlocked()
AnnualInterestBipsTooHigh
error AnnualInterestBipsTooHigh()
AprChangeOnClosedMarket
error AprChangeOnClosedMarket()
BadLaunchCode
error BadLaunchCode()
BadRescueAsset
error BadRescueAsset()
BorrowAmountTooHigh
error BorrowAmountTooHigh()
BorrowFromClosedMarket
error BorrowFromClosedMarket()
BorrowWhileSanctioned
error BorrowWhileSanctioned()
BuyBackOnDelinquentMarket
error BuyBackOnDelinquentMarket()
CapacityChangeOnClosedMarket
error CapacityChangeOnClosedMarket()
CloseMarketWithUnpaidWithdrawals
error CloseMarketWithUnpaidWithdrawals()
DepositToClosedMarket
error DepositToClosedMarket()
FIFOQueueOutOfBounds
error FIFOQueueOutOfBounds()
InsufficientReservesForFeeWithdrawal
error InsufficientReservesForFeeWithdrawal()
InsufficientReservesForNewLiquidityRatio
error InsufficientReservesForNewLiquidityRatio()
InsufficientReservesForOldLiquidityRatio
error InsufficientReservesForOldLiquidityRatio()
InvalidArrayLength
error InvalidArrayLength()
MarketAlreadyClosed
error MarketAlreadyClosed()
MaxSupplyExceeded
error MaxSupplyExceeded()
NoReentrantCalls
error NoReentrantCalls()
NotApprovedBorrower
error NotApprovedBorrower()
NotApprovedLender
error NotApprovedLender()
NotFactory
error NotFactory()
NullBurnAmount
error NullBurnAmount()
NullBuyBackAmount
error NullBuyBackAmount()
NullFeeAmount
error NullFeeAmount()
NullMintAmount
error NullMintAmount()
NullRepayAmount
error NullRepayAmount()
NullTransferAmount
error NullTransferAmount()
NullWithdrawalAmount
error NullWithdrawalAmount()
ProtocolFeeChangeOnClosedMarket
error ProtocolFeeChangeOnClosedMarket()
ProtocolFeeTooHigh
error ProtocolFeeTooHigh()
RepayToClosedMarket
error RepayToClosedMarket()
ReserveRatioBipsTooHigh
error ReserveRatioBipsTooHigh()
SphereXOperatorRequired
error SphereXOperatorRequired()
WithdrawalBatchNotExpired
error WithdrawalBatchNotExpired()
creation bytecode
0x6102606040523461020357610012610207565b6040516155ef908161045b8239608051818181610f8f015261107a015260a051818181610ca701528181610de2015281816112000152818161190d01528181611b1e01528181611d33015281816120bb0152818161221e01528181612321015281816124db015281816134e50152818161372901528181613c020152818161401a015261418f015260c051818181612053015281816125df01528181614666015261511a015260e05181818161041c01528181610d9d0152818161169301528181611ca2015281816120090152818161247b0152818161463801526150c7015261010051818181611a770152611c6c015261012051818181610efd01526121a3015261014051818181610f3801528181612d4601528181612e2b0152818161311601526131eb01526101605181818161102b01528181612d2501528181612e0a015281816130f501526131ca0152610180518181816118510152613dbf01526101a05181610b8701526101c05181818161045f01528181610c3501528181610d110152818161123701528181611fc3015281816120e6015281816121c401528181612617015281816137f50152818161382c015281816140460152818161414001526150ee01526101e051816106160152610200518161063a015261022051816117ef015261024051816118130152f35b5f80fd5b6103ad6103a861010033815261021b610432565b8051610397906001600160a01b03166101c09081528261038661036f610245602084015160ff1690565b6101a09081526040840151946101e095865261037861036f6060870151976102009889528760808101519c6102209d8e5261032960a083015191610240928352610120926102c26102bb6102b06102a48789015160018060801b031690565b6001600160801b031690565b9a87015161ffff1690565b61ffff1690565b98610160996102d86102bb8c89015161ffff1690565b6102ec6102bb610140809a015161ffff1690565b9260081b5f55676765c793fa10079d606b1b9260201b9060301b179060401b4260c01b1717176003558c015160a0528b015160018060a01b031690565b60c09081528a01516001600160a01b031660e09081528a01516001600160a01b031690526103616102bb610180809b015161ffff1690565b90528a015163ffffffff1690565b63ffffffff1690565b905286015163ffffffff1690565b90528201516001600160a01b031690565b60805201516001600160a01b031690565b6103af565b565b60018060a01b03608051165f80526020527f2ac55ae7ba47db34b5334622acafeb34a65daf143b47019273185d64c73a35a560405fa1807f1777adabd324f814e2b0e28f6edf876dce01d7d66358c9acfe87b1b5f38338d5556020527ff33499cccaa0611882086224cc48cd82ef54b66a4d2edf4ed67108dd516896d560405fa1565b6040516102608082016040526304032dbb5f5280826004601c335afa903d141615610203579056fe60806040526004361015610011575f80fd5b5f3560e01c8062ae3bf8146103ce57806301e1d114146103c957806302372c4f146103c457806306fdde03146103bf578063088fee5e146103ba578063095ea7b3146103b55780630c1e3fea146103b05780630c3f6acf146103ab5780630cd1a5b6146103a657806311057cd0146103a157806314a1c32d1461039c57806318160ddd146103975780631d8557d7146103925780631da24f3e1461038d5780631e3cef531461038857806323b872dd146103835780632ab4d0521461037e578063313ce5671461037957806334bca29c14610374578063371fd8e61461036f57806338d52e0f1461036a5780633c231166146103655780633f3e4c1114610360578063469048401461035b5780634be687c6146103565780634c6c848f14610351578063514a4cd61461034c57806354635570146102b157806354b302c51461034757806354fd4d50146103425780636731ba6d1461033d578063683dd191146103385780636b174f351461033357806370a082311461032e5780637243d96c14610329578063739ccdd314610324578063740588591461031f578063766360171461031a5780637df1f1b914610315578063878eb9211461031057806395d89b411461030b5780639e6f980214610306578063a9059cbb14610301578063ae6ea191146102fc578063b1bf962d146102f7578063b68ce7a2146102f2578063b6b55f25146102ed578063c2b6b58c146102e8578063c45a0155146102e3578063c511ed5e146102de578063c5ebeaec146102d9578063c8796572146102d4578063cd7033c4146102cf578063d98e0fe8146102ca578063dbcd50b4146102c5578063dcd549d4146102c0578063dd62ed3e146102bb578063e5adc635146102b6578063e7e5db4f146102b15763f58c251c146102ac575f80fd5b6125b3565b61104e565b612457565b6123dc565b6122db565b612265565b612241565b612207565b61211e565b611ff3565b611c90565b611c40565b611c1f565b611bde565b611bb5565b611b83565b611a37565b611874565b61183a565b6117d5565b6116f8565b611667565b611623565b6114e9565b611451565b6113cc565b611361565b61129e565b61126a565b6110e6565b6110c2565b61109e565b611014565b610f5b565b610f21565b610ed1565b610d87565b610d35565b610ce5565b610c03565b610bab565b610b6e565b610b3d565b610a41565b6109fa565b61099a565b61095e565b61091d565b6108f1565b6108cd565b61088b565b61085b565b610835565b6107e0565b610661565b6105fc565b61055e565b610506565b6103f5565b73ffffffffffffffffffffffffffffffffffffffff8116036103f157565b5f80fd5b346103f15760206003193601126103f157600435610412816103d3565b61041a612bf8565b7f000000000000000000000000000000000000000000000000000000000000000033186104f95773ffffffffffffffffffffffffffffffffffffffff808216308114917f00000000000000000000000000000000000000000000000000000000000000001614176104ec576370a082315f5230602052602060346024601c845afa601f3d1116156104df575f6044601082602094336014526fa9059cbb00000000000000000000000082525af13d1560015f51141716156104df576104dd612c16565b005b6390b8ec185f526004601cfd5b6311530cde5f526004601cfd5b6302171e6a5f526004601cfd5b346103f1575f6003193601126103f1576020610520612603565b604051908152f35b63ffffffff8116036103f157565b60031960409101126103f15760043561054e816103d3565b9060243561055b81610528565b90565b346103f157604061056e36610536565b6105c0610579612681565b925f845263ffffffff60208501935f8552610592612c1f565b165f526008602052845f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54906cffffffffffffffffffffffffff82168093526fffffffffffffffffffffffffffffffff809260681c168152835192835251166020820152f35b346103f1575f6003193601126103f15760205f525f6020527f0000000000000000000000000000000000000000000000000000000000000000603f527f0000000000000000000000000000000000000000000000000000000000000000605f5260805ff35b346103f15761066f36610536565b90610678612c1f565b63ffffffff9182811691428310156107d3576106f76106f26107819261079696610786966106a4612c2b565b9391506106af61274b565b50160361079a576106cf909563ffffffff165f52600860205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b6127ab565b9161072d61071860208501516fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1690565b9261076861075461075461071860408601516fffffffffffffffffffffffffffffffff1690565b92516cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff809116921690612ea7565b612811565b6040519081529081906020820190565b0390f35b506106cf6107be6107b98763ffffffff165f52600760205260405f2090565b612765565b9563ffffffff165f52600860205260405f2090565b632561b8805f526004601cfd5b346103f15760406003193601126103f157610823600435610800816103d3565b610808612bf8565b61081e610813612edb565b916024359033612f1f565b614d13565b5f63929eee145d602060405160018152f35b346103f1575f6003193601126103f15761084d61281e565b506101c0610859612880565bf35b346103f1575f6003193601126103f15761087361281e565b5061087c612c1f565b6101c0610887612c2b565b5050f35b346103f1575f6003193601126103f1576108a3612c1f565b60206fffffffffffffffffffffffffffffffff60406108c0612c2b565b5050015116604051908152f35b346103f1575f6003193601126103f157602061ffff60035460301c16604051908152f35b346103f1575f6003193601126103f157610909612c1f565b6020610520610916612c2b565b5050612f95565b346103f1575f6003193601126103f157610935612c1f565b6020610520610942612c2b565b50506cffffffffffffffffffffffffff60808201511690613e0d565b346103f1575f6003193601126103f157610976612bf8565b610991610981612edb565b61081e61098c612fe6565b61323f565b5f63929eee145d005b346103f15760206003193601126103f15773ffffffffffffffffffffffffffffffffffffffff6004356109cc816103d3565b6109d4612c1f565b165f52600460205260206cffffffffffffffffffffffffff60405f205416604051908152f35b346103f1575f6003193601126103f1576020610a27610a17612c2b565b5050610a21612603565b906133d4565b6fffffffffffffffffffffffffffffffff60405191168152f35b346103f15760606003193601126103f157600435610a5e816103d3565b602435610a6a816103d3565b604435610a75612bf8565b610a7d612edb565b9173ffffffffffffffffffffffffffffffffffffffff84165f526009602052610ac660405f203373ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8103610b11575b509061081e91610afe94613497565b5f63929eee145d60405160018152602090f35b9190818303928311610b3857610afe94610b2f61081e943383612f1f565b94509091610aef565b6127e4565b346103f1575f6003193601126103f15760206fffffffffffffffffffffffffffffffff5f5460081c16604051908152f35b346103f1575f6003193601126103f157602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103f1576020610bf4610bbe36610536565b9190610bc8612bf8565b61081e610bee610bd6612edb565b92610bdf612fe6565b9560445f523615519187613627565b9361323f565b5f63929eee145d604051908152f35b346103f15760206003193601126103f157600435610c1f612bf8565b610c27612edb565b8115610cd857610c598230337f000000000000000000000000000000000000000000000000000000000000000061385a565b815f52337fe8b606ac1e5df7657db58d297ca8f41c090fc94c5fd2d6958f043e41736e9fa660205fa2610c8a612fe6565b918251610ccb576109919261098c61081e9260245f5282361551917f00000000000000000000000000000000000000000000000000000000000000006138d9565b6361d1bc8f5f526004601cfd5b637e0820885f526004601cfd5b346103f1575f6003193601126103f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103f1575f6003193601126103f15760207f1777adabd324f814e2b0e28f6edf876dce01d7d66358c9acfe87b1b5f38338d55473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346103f15760206003193601126103f1576004357f000000000000000000000000000000000000000000000000000000000000000033186104f957610dca612bf8565b610dd2612edb565b610dda612fe6565b8051610ec4577f000000000000000000000000000000000000000000000000000000000000000060018160571c16610e4b575b5082610e3e61081e9261098c610e25610e439761393f565b6fffffffffffffffffffffffffffffffff166020830152565b61395e565b6104dd612c16565b5f80917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36019082601c6040519363849da12985528960208601526101c088604087015e610200908180870152806102208701526024610240870137360193019160601c5af115610ebc575f610e0d565b3d5f803e3d5ffd5b6381b210785f526004601cfd5b346103f1575f6003193601126103f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103f1575f6003193601126103f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103f15760206003193601126103f157600435610f78816103d3565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611007577f1777adabd324f814e2b0e28f6edf876dce01d7d66358c9acfe87b1b5f38338d581815491555f526020527ff33499cccaa0611882086224cc48cd82ef54b66a4d2edf4ed67108dd516896d560405fa1005b634ee0b8f85f526004601cfd5b346103f1575f6003193601126103f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103f1575f6003193601126103f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103f1575f6003193601126103f15760206105206110bb612c2b565b5050613987565b346103f1575f6003193601126103f1575f6040526101326041526020805260606020f35b346103f15760406003193601126103f157600435611102612bf8565b61110a612edb565b811515918261122f575b61111c612fe6565b926111278451151590565b61122a576111eb575b5061118261113c612603565b61117c61071861115f60608701516fffffffffffffffffffffffffffffffff1690565b60408701516fffffffffffffffffffffffffffffffff16906129a8565b90612811565b9061119f6111916107186139bc565b602435818082039110020190565b5f925b816111ac856129cc565b9410806111e2575b156111d557806111c76111d092876139de565b80820391110290565b6111a2565b610e438361081e8761323f565b508015156111b4565b61122490836111fd60445f5236155190565b917f00000000000000000000000000000000000000000000000000000000000000006138d9565b5f611130565b610ccb565b61125b8130337f000000000000000000000000000000000000000000000000000000000000000061385a565b61126581336138af565b611114565b346103f1575f6003193601126103f157611282612c1f565b60206dffffffffffffffffffffffffffff6101806108c0612c2b565b346103f15760206003193601126103f1576004356112ba612bf8565b6112c2612edb565b6112ca612fe6565b916112ea6dffffffffffffffffffffffffffff61018085015116826151cf565b6113056cffffffffffffffffffffffffff82168092146151b6565b80156113545761079693611336926113309261132033613b42565b9260245f52361551933391613ba6565b91614d13565b5f63929eee145d60405163ffffffff90911681529081906020820190565b63d61c50f85f526004601cfd5b346103f15760206003193601126103f1576020610520600435611383816103d3565b61138b612c1f565b73ffffffffffffffffffffffffffffffffffffffff6113a8612c2b565b505091165f52600483526cffffffffffffffffffffffffff60405f20541690613e0d565b346103f1575f6003193601126103f1576113e4612bf8565b6113ec612edb565b6113f4612fe6565b906113fe33613b42565b916cffffffffffffffffffffffffff8351168015611354576107969382611330926114416dffffffffffffffffffffffffffff610180611336970151168261529f565b9160045f52361551933391613ba6565b346103f1575f6003193601126103f157611469612c1f565b6020610520611476612c2b565b5050613e2d565b9181601f840112156103f15782359167ffffffffffffffff83116103f1576020808501948460051b0101116103f157565b60209060206040818301928281528551809452019301915f5b8281106114d5575050505090565b8351855293810193928101926001016114c7565b346103f15760406003193601126103f15767ffffffffffffffff6004358181116103f15761151b90369060040161147d565b90916024359081116103f15761153590369060040161147d565b919092611540612bf8565b611548612edb565b938383036116165761156161155c846129f9565b612707565b938385527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061158f856129f9565b0136602087013761159e612fe6565b935f5b8181106115cd57610796876115b98a61081e8a61323f565b6115c1612c16565b604051918291826114ae565b806116056115de6001938589612a3e565b356115e8816103d3565b6115f3838789612a3e565b356115fd81610528565b36918a613627565b61160f828a612a53565b52016115a1565b639d89020a5f526004601cfd5b346103f1575f6003193601126103f15761163b612c1f565b6020611645612c2b565b5050611658611652612603565b91613e2d565b90604051918082039111028152f35b346103f1575f6003193601126103f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60209060206040818301928281528551809452019301915f5b8281106116de575050505090565b835163ffffffff16855293810193928101926001016116d0565b346103f1575f6003193601126103f157611710612c1f565b6005546fffffffffffffffffffffffffffffffff81169060801c818103908111610b385761174061155c826129f9565b918183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061176e836129f9565b013660208501375f5b82811061178c576040518061079686826116b7565b806117cf6117ba6117b06117a260019587612a67565b5f52600660205260405f2090565b5463ffffffff1690565b6117c48388612a53565b9063ffffffff169052565b01611777565b346103f1575f6003193601126103f15760205f525f6020527f0000000000000000000000000000000000000000000000000000000000000000603f527f0000000000000000000000000000000000000000000000000000000000000000605f5260805ff35b346103f1575f6003193601126103f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103f15760406003193601126103f157600435611891816103d3565b6024359061189d612bf8565b6118a5612edb565b906118ae612fe6565b926118ce6dffffffffffffffffffffffffffff61018086015116826151cf565b916cffffffffffffffffffffffffff926118ec8482168092146151b6565b8015611a08578561098c8261199661081e976119316108239b611a029789337f0000000000000000000000000000000000000000000000000000000000000000614f73565b61193a33613b42565b9080611949858285511661340b565b168252335f9081526004602052604090205b9151166cffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffff00000000000000000000000000825416179055565b6119d56119c26119a587613b42565b926119bd84516cffffffffffffffffffffffffff1690565b613476565b6cffffffffffffffffffffffffff168252565b6119fd8573ffffffffffffffffffffffffffffffffffffffff165f52600460205260405f2090565b61342a565b33615011565b63ddee9b305f526004601cfd5b6004359061ffff821682036103f157565b6024359061ffff821682036103f157565b346103f15760206003193601126103f157611a50611a15565b611a58612bf8565b611a60612edb565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611b765761ffff82166103e88111611b7157611ab3612fe6565b8051611b6c578061081e92610e4395610120830191611ade611ad7845161ffff1690565b61ffff1690565b8103611aee575b5050505061323f565b81611b6093611b427f4b34705283cdb9398d0e50b216b8fb424c6d4def5db9bfadc661ee3adc6076ee96611b4b947f0000000000000000000000000000000000000000000000000000000000000000613efd565b9061ffff169052565b60405161ffff90911681529081906020820190565b0390a1805f8080611ae5565b613ef0565b613ee3565b6332cc72365f526004601cfd5b346103f1575f6003193601126103f157611b9b612c1f565b60206cffffffffffffffffffffffffff60806108c0612c2b565b346103f15760206003193601126103f1576020611bd0612edb565b610520611330600435613f7b565b346103f15760206003193601126103f157600435611bfa612edb565b90611c0481613f7b565b03611c12576104dd90614d13565b638a164f635f526004601cfd5b346103f1575f6003193601126103f157602060ff5f54166040519015158152f35b346103f1575f6003193601126103f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103f1575f6003193601126103f1577f00000000000000000000000000000000000000000000000000000000000000008033186104f957611cd0612bf8565b611cd8612edb565b611ce0612fe6565b91611ceb8351151590565b611fee57611d9590611cfb612603565b90611d0585612f95565b9081831015611f9e575090611d1d81611d2d93612811565b90611d28828761412c565b612a67565b611d57847f000000000000000000000000000000000000000000000000000000000000000061420d565b5f610140850152600184526127106101608501525f61010085015261117c61071861115f60608701516fffffffffffffffffffffffffffffffff1690565b60c08301805163ffffffff908116918280611e27575b50505050611dba6107186139bc565b905f905b828210611e0f575050506cffffffffffffffffffffffffff611df060a08401516cffffffffffffffffffffffffff1690565b16611e0a57611e01610e439261323f565b61081e4261450a565b6144fd565b611e1f8161117c600193886139de565b910190611dbe565b611e426107b98563ffffffff165f52600760205260405f2090565b6020810180516cffffffffffffffffffffffffff1689611e84611e7285516cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff80931610611f42575b5090611f0d92915f8652806fffffffffffffffffffffffffffffffff611f026040611eea611ed688516cffffffffffffffffffffffffff1690565b96516cffffffffffffffffffffffffff1690565b9601516fffffffffffffffffffffffffffffffff1690565b169316911684614477565b611f16816144b1565b4214611f23575b80611dab565b6117c4611f32611f3a94612b53565b9283166144d7565b5f8080611f1d565b886fffffffffffffffffffffffffffffffff611f698695949b8b611f7295611f0d99614264565b90501690612811565b97611f9483611f8f8a63ffffffff165f52600760205260405f2090565b612a74565b9091925089611e9b565b90808311611fae575b5050611d2d565b91610781611fbf611fe79483612811565b80937f00000000000000000000000000000000000000000000000000000000000000006140f2565b5f80611fa7565b6140e5565b346103f15760206003193601126103f1576004357f00000000000000000000000000000000000000000000000000000000000000008033186104f957612037612bf8565b61203f612edb565b906395c098395f5260205260205f6024601c7f00000000000000000000000000000000000000000000000000000000000000005afa60203d141615610ebc575f516121195761208c612fe6565b8051612114576120a361209d612603565b82613eda565b831161210f578261210a826120df61081e94610e43977f000000000000000000000000000000000000000000000000000000000000000061455a565b61098c83337f00000000000000000000000000000000000000000000000000000000000000006140f2565b6145d8565b61454d565b614540565b614533565b346103f1575f6003193601126103f157612136612bf8565b61213e612edb565b612146612fe6565b9060408201916fffffffffffffffffffffffffffffffff9081845116156121fa57612178612172612603565b826133d4565b8281169182156121ed57858461219a6121e89461081e97610e439a5116612b68565b16905261098c837f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006140f2565b614601565b63f784cfa45f526004601cfd5b6345c835cb5f526004601cfd5b346103f1575f6003193601126103f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103f1575f6003193601126103f157602060035461ffff6040519160401c168152f35b346103f15760206003193601126103f157606061229c60043561228781610528565b61228f61274b565b612297612c1f565b612b8a565b6fffffffffffffffffffffffffffffffff60408051926cffffffffffffffffffffffffff80825116855260208201511660208501520151166040820152f35b346103f15760206003193601126103f1576004356122f8816103d3565b612300612bf8565b612308612edb565b6123118261462a565b156123cf5761231e612fe6565b917f000000000000000000000000000000000000000000000000000000000000000060018160581c1661235e575b508261098c61081e92610e4395614699565b5f80917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36019082601c60405193638b3ce9b385528760208601526101c08a604087015e610200908180870152806102208701526024610240870137360193019160601c5af115610ebc575f61234c565b63a97ab1675f526004601cfd5b346103f15760406003193601126103f157602061244e6004356123fe816103d3565b73ffffffffffffffffffffffffffffffffffffffff60243591612420836103d3565b165f526009835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b346103f15760406003193601126103f157612470611a15565b612478611a26565b907f000000000000000000000000000000000000000000000000000000000000000033186104f9576124a8612bf8565b6124b0612edb565b906124b9612fe6565b80516125ae576124ff816101608101956124d8611ad7885161ffff1690565b947f0000000000000000000000000000000000000000000000000000000000000000614760565b61ffff959186811694612710978887116125a95783169788116125a4578711928315612588575b61254392612537919061ffff169052565b61ffff16610140840152565b612566575b9261256161081e9261255c610e439661323f565b614831565b61485a565b9261257084613e2d565b612578612603565b106125835792612548565b614824565b61259185613e2d565b612599612603565b101561252657614817565b61480a565b6147fd565b614753565b346103f1575f6003193601126103f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6370a082315f523060205260205f6024601c7f00000000000000000000000000000000000000000000000000000000000000005afa601f3d111615612647575f5190565b634963f6d55f526004601cfd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051906040820182811067ffffffffffffffff8211176126a157604052565b612654565b604051906060820182811067ffffffffffffffff8211176126a157604052565b604051906101c0820182811067ffffffffffffffff8211176126a157604052565b604051906020820182811067ffffffffffffffff8211176126a157604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff8211176126a157604052565b6127536126a6565b905f82525f60208301525f6040830152565b906fffffffffffffffffffffffffffffffff60016127816126a6565b9380546cffffffffffffffffffffffffff90818116875260681c1660208601520154166040830152565b906fffffffffffffffffffffffffffffffff6127c5612681565b92546cffffffffffffffffffffffffff8116845260681c166020830152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908203918211610b3857565b6128266126c6565b905f82525f60208301525f60408301525f60608301525f60808301525f60a08301525f60c08301525f60e08301525f6101008301525f6101208301525f6101408301525f6101608301525f6101808301525f6101a0830152565b6128886126c6565b906128ce5f5461289d60ff8216859015159052565b60081c6fffffffffffffffffffffffffffffffff9081166020850152600154908116604085015260801c6060840152565b6002546cffffffffffffffffffffffffff8082166080850152606882901c1660a084015263ffffffff60d082901c811660c08501526129859161291b9060ff9060f01c16151560e0860152565b60035463ffffffff8282161661010086015261ffff602082901c8116610120870152603082901c8116610140870152604082901c16610160860152605081901c6dffffffffffffffffffffffffffff1661018086015260c01c166101a084019063ffffffff169052565b565b9060016fffffffffffffffffffffffffffffffff80931601918211610b3857565b9190916fffffffffffffffffffffffffffffffff80809416911601918211610b3857565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b385760010190565b67ffffffffffffffff81116126a15760051b60200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015612a4e5760051b0190565b612a11565b8051821015612a4e5760209160051b010190565b91908201809211610b3857565b604060016fffffffffffffffffffffffffffffffff92612ad86cffffffffffffffffffffffffff86511682906cffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffff00000000000000000000000000825416179055565b60208501517fffffffffffff00000000000000000000000000ffffffffffffffffffffffffff79ffffffffffffffffffffffffff0000000000000000000000000083549260681b16911617815501920151167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b90600163ffffffff80931601918211610b3857565b6fffffffffffffffffffffffffffffffff9182169082160391908211610b3857565b9190612b94612c2b565b915063ffffffff809316928315159116831416612bf357505f5260076020526fffffffffffffffffffffffffffffffff600160405f2080546cffffffffffffffffffffffffff90818116875260681c1660208601520154166040830152565b925050565b63929eee14805c612c09576001905d565b637fa8a9875f526004601cfd5b5f63929eee145d565b63929eee145c612c0957565b612c3361281e565b505f612c3d61274b565b612c45612880565b92612c5f8460c063ffffffff910151168042119015151690565b612d73575b6101a084015163ffffffff904290821603612d1f575b60c085015163ffffffff16908116612c8f5750565b92509050612cae6107b98363ffffffff165f52600760205260405f2090565b90612cc960208301516cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff612cf1611e7285516cffffffffffffffffffffffffff1690565b911610612cfa57565b612d0c612d05612603565b85846149e2565b80612d145750565b612985908584614a6b565b612d6b427f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088614883565b505050612c7a565b91505060c08201612d88815163ffffffff1690565b91612da7612d9e6101a086015163ffffffff1690565b63ffffffff1690565b63ffffffff8416908103612e04575b505f612dd36107b98563ffffffff165f52600760205260405f2090565b92612de6612ddf612603565b87866149e2565b80612df3575b5052612c64565b612dfe908786614a6b565b5f612dec565b612e50907f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000087614883565b5050612db6565b906b033b2e3c9fd0803ce800000091817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048111820215830215612e9a57020490565b63ad251c275f526004601cfd5b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048111820215830215612e9a57020490565b604051608081019080821067ffffffffffffffff8311176126a15761055b9160405260608152606060208201525f60408201525f60608201525f3560e01c90614c2f565b909173ffffffffffffffffffffffffffffffffffffffff82165f52600960205280612f6b8460405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3565b612fb26cffffffffffffffffffffffffff60808301511682613e0d565b906fffffffffffffffffffffffffffffffff90816060820151168301809311610b385760400151168101809111610b385790565b612fee61281e565b50612ff7612880565b906130118260c063ffffffff910151168042119015151690565b61317f575b6101a082015163ffffffff908116428190036130eb575b5060c083015163ffffffff169081166130435750565b61305e6107b98263ffffffff165f52600760205260405f2090565b60208101516cffffffffffffffffffffffffff166cffffffffffffffffffffffffff61309a611e7284516cffffffffffffffffffffffffff1690565b9116106130a6575b5050565b6130b86130b1612603565b85836149e2565b806130c257505050565b826130d5611f8f92612985958886614264565b505063ffffffff165f52600760205260405f2090565b6131799061313b427f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088614883565b9261317161315e6101808a95949501516dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff1690565b904290614d81565b5f61302d565b613193612d9e60c084015163ffffffff1690565b6131a8612d9e6101a085015163ffffffff1690565b8082036131c0575b50506131bb82614dcb565b613016565b81613210613238937f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088614883565b93909261323261315e6101808a01516dffffffffffffffffffffffffffff1690565b91614d81565b5f806131b0565b6129859061324c81613e2d565b613254612603565b1060e08201819052908051151561328161071860208401516fffffffffffffffffffffffffffffffff1690565b60081b175f556132a761071860408301516fffffffffffffffffffffffffffffffff1690565b6132c761071860608401516fffffffffffffffffffffffffffffffff1690565b60801b176001556132eb611e7260808301516cffffffffffffffffffffffffff1690565b613308611e7260a08401516cffffffffffffffffffffffffff1690565b61331c612d9e60c085015163ffffffff1690565b9060681b9060d01b8460f01b171717600255613343612d9e61010083015163ffffffff1690565b613356611ad761012084015161ffff1690565b613369611ad761014085015161ffff1690565b9061337d611ad761016086015161ffff1690565b916133b2612d9e6101a06133a661315e6101808a01516dffffffffffffffffffffffffffff1690565b97015163ffffffff1690565b9160201b9060301b179160401b908460501b9060c01b17171717600355614f47565b906fffffffffffffffffffffffffffffffff91826060820151168203918211610b3857604083910151169081808203911002011690565b6cffffffffffffffffffffffffff9182169082160391908211610b3857565b6cffffffffffffffffffffffffff6129859251166cffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffff00000000000000000000000000825416179055565b9190916cffffffffffffffffffffffffff80809416911601918211610b3857565b91906134a1612fe6565b926134c16dffffffffffffffffffffffffffff61018086015116846151cf565b6cffffffffffffffffffffffffff6134dd8183168093146151b6565b8115611a08577f0000000000000000000000000000000000000000000000000000000000000000600181605c1c1661359f575b509461098c61359a926135636129859861352987613b42565b9080613538858285511661340b565b16825261195b8873ffffffffffffffffffffffffffffffffffffffff165f52600460205260405f2090565b6135726119c26119a588613b42565b6119fd8673ffffffffffffffffffffffffffffffffffffffff165f52600460205260405f2090565b615011565b5f80917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c9893983601906040519163a018f90e83523360208401528760408401528860608401528660808401526101c08660a085015e610260808401528061028084015260646102a084013782601c610220360193019160601c5af115610ebc57945f613510565b909291926136466107b98563ffffffff165f52600760205260405f2090565b9361365b612d9e60c085015163ffffffff1690565b9063ffffffff811691821461385557613686836106cf8363ffffffff165f52600860205260405f2090565b946136d96137046136aa60408a01516fffffffffffffffffffffffffffffffff1690565b986136f96107188a54809c6cffffffffffffffffffffffffff968795516cffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff97889687921693169116612ea7565b9960681c1689612b68565b9081169788156138505760608761379b6137bc9361055b9b61374d6137d2988f9d8e8e7f0000000000000000000000000000000000000000000000000000000000000000615049565b907fffffff00000000000000000000000000000000ffffffffffffffffffffffffff7cffffffffffffffffffffffffffffffff0000000000000000000000000083549260681b169116179055565b01916137b783516fffffffffffffffffffffffffffffffff1690565b612b68565b6fffffffffffffffffffffffffffffffff169052565b836137dc8461462a565b156138245761381f916137ee856150b9565b61381983827f00000000000000000000000000000000000000000000000000000000000000006140f2565b85615151565b61518b565b61381f9150837f00000000000000000000000000000000000000000000000000000000000000006140f2565b61503c565b6107d3565b601c5f60649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d1560015f51141716156138a2575f606052604052565b637939f4245f526004601cfd5b905f527fe8b606ac1e5df7657db58d297ca8f41c090fc94c5fd2d6958f043e41736e9fa660205fa2565b600181605a1c166138eb575b50505050565b5f601c6101c08296958684973603928392604051986383d9e1eb8a5260208a0152604089015e61020080880152816102208801526102408701376102240193019160601c5af115610ebc575f8080806138e5565b906129856fffffffffffffffffffffffffffffffff83168093146151b6565b5f527ff2672935fc79f5237559e2e2999dbe743bf65430894ac2b37666890e7c69e1af60205fa1565b6111c76fffffffffffffffffffffffffffffffff602083015116916cffffffffffffffffffffffffff60808201511690613e0d565b61055b6005546fffffffffffffffffffffffffffffffff81169060801c612b68565b9190600554906fffffffffffffffffffffffffffffffff918281169060801c8114613afc575f52600660205281613a3d63ffffffff60405f2054169283613a366107b98263ffffffff165f52600760205260405f2090565b9788614264565b90501693613a5d81611f8f8463ffffffff165f52600760205260405f2090565b6cffffffffffffffffffffffffff6020818351169201511614613a7e575050565b600554918083169260801c8314613afc57613acd83612985945f52600660205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008154169055612987565b167fffffffffffffffffffffffffffffffff0000000000000000000000000000000060055416176005556144b1565b60046040517f87274801000000000000000000000000000000000000000000000000000000008152fd5b906129856cffffffffffffffffffffffffff83168093146151b6565b905f613b4c6126e7565b5273ffffffffffffffffffffffffffffffffffffffff82165f526004602052613b9360405f206cffffffffffffffffffffffffff613b886126e7565b91541681529261462a565b613b9957565b636bc671fd5f526004601cfd5b9392959491909560c0850190613bc0825163ffffffff1690565b9763ffffffff92838a1615613d8e575b50938893613d4b93613d4484613c4961098c99613c266cffffffffffffffffffffffffff6129859e9d9916978d898d8a7f00000000000000000000000000000000000000000000000000000000000000006151f5565b6135726119c284613c4484516cffffffffffffffffffffffffff1690565b61340b565b613c54863086615011565b613ce1613c8e856106cf613c796107b98d63ffffffff165f52600760205260405f2090565b9b63ffffffff165f52600860205260405f2090565b613ca9836119bd83546cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffff00000000000000000000000000825416179055565b613d12613cff826119bd8b516cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff168952565b613d3160a08b01916119bd83516cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff169052565b8a1661526f565b613d5d613d56612603565b84836149e2565b80613d7c575b50611f8f8663ffffffff165f52600760205260405f2090565b613d8890878584614264565b50613d63565b93613dfc9950613d4b93613d44899894613c4961098c9995613ded612d9e613de76129859f613dbd9051151590565b7f000000000000000000000000000000000000000000000000000000000000000090815f03020190565b42612a67565b9e8f809b6117c48883166144d7565b959950509498995050935093613bd0565b906dffffffffffffffffffffffffffff61018061055b930151169061529f565b6cffffffffffffffffffffffffff8060a08301511690608083015116818103908111610b3857613e679061ffff61016085015116906152ee565b908101809111610b3857613e91906dffffffffffffffffffffffffffff610180840151169061529f565b6fffffffffffffffffffffffffffffffff6040830151168101809111610b3857613ed4610718606061055b9401516fffffffffffffffffffffffffffffffff1690565b90612a67565b6111c790613e2d565b63499fddb15f526004601cfd5b6337f1a75f5f526004601cfd5b919060018360551c16613f0f57505050565b5f9283601c81946101c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360191604051966303473d8d88526020880152604087015e610200908180870152806102208701526024610240870137360193019160601c5af115610ebc57565b613f83612bf8565b613f8b612fe6565b90613f968251151590565b6140e057613fb390613fa783613987565b90818082039110020190565b90613fe4613fdf613fd961315e6101808501516dffffffffffffffffffffffffffff1690565b846151cf565b613b26565b906cffffffffffffffffffffffffff821680156140db576140d2926140b361098c9261409b61401233613b42565b61403e8784337f0000000000000000000000000000000000000000000000000000000000000000615343565b61406a8930337f000000000000000000000000000000000000000000000000000000000000000061385a565b6140886119c2866119bd84516cffffffffffffffffffffffffff1690565b335f90815260046020526040902061342a565b6140ac873361359a5f805236155190565b86336153cf565b613d3160808401916119bd83516cffffffffffffffffffffffffff1690565b90612985612c16565b615336565b615329565b63449e5f505f526004601cfd5b60105f60449260209582956014526034526fa9059cbb00000000000000000000000082525af13d1560015f51141716156104df575f603452565b8115610cd8578051610ccb576141648230337f000000000000000000000000000000000000000000000000000000000000000061385a565b815f52337fe8b606ac1e5df7657db58d297ca8f41c090fc94c5fd2d6958f043e41736e9fa660205fa27f000000000000000000000000000000000000000000000000000000000000000091600183605a1c166141bf57505050565b5f9283601c81946101c0600319360191604051966383d9e1eb88526020880152604087015e610200808601526102209080828701526004610240870137360193019160601c5af115610ebc57565b60018160591c1661421c575050565b5f91829182601c60031936016101c060405195639ecc64e68752602087015e6101e0808601526102009080828701526004610220870137360193019160601c5af115610ebc57565b9293916142b69161428285516cffffffffffffffffffffffffff1690565b9460208101956cffffffffffffffffffffffffff9485916142b089516cffffffffffffffffffffffffff1690565b9061340b565b16801561446a5761018083019788516142dc906dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff166142f5916151cf565b81811090829003020161430790613b26565b965193871693614327906dffffffffffffffffffffffffffff1685612e57565b6143309061393f565b9587815161434a906cffffffffffffffffffffffffff1690565b9061435491613476565b6cffffffffffffffffffffffffff16905260400180516143879087906fffffffffffffffffffffffffffffffff166129a8565b6fffffffffffffffffffffffffffffffff16905260a0810180516143bb9088906cffffffffffffffffffffffffff1661340b565b6cffffffffffffffffffffffffff1690526060810180516143ef9087906fffffffffffffffffffffffffffffffff166129a8565b6fffffffffffffffffffffffffffffffff16905260800180516144229087906cffffffffffffffffffffffffff1661340b565b6cffffffffffffffffffffffffff1690525f8052361551906fffffffffffffffffffffffffffffffff85169182309161445a92615011565b63ffffffff1691612985926153fd565b505f965086955050505050565b91929092604051935f526020526040527f9262dc39b47cad3a0512e4c08dda248cb345e7163058f300bc63f56bda288b6e60605fa2604052565b7fcbdf25bf6e096dd9030d89bb2ba2e3e7adb82d25a233c3ca3d92e9f098b74e555f80a2565b7f5c9a946d3041134198ebefcd814de7748def6576efd3d1b48f48193e183e89ef5f80a2565b634d7909975f526004601cfd5b5f527f9dc30b8eda31a6a144e092e5de600955523a6a925cc15cc1d1b9b4872cfa615560205fa1565b634a1c13a95f526004601cfd5b63d0242b285f526004601cfd5b63119fe6e35f526004601cfd5b9190600183605b1c1661456c57505050565b5f9283601c81946101c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601916040519663b1cfda0d88526020880152604087015e610200908180870152806102208701526024610240870137360193019160601c5af115610ebc57565b5f527fb848ae6b1253b6cb77e81464128ce8bd94d3d524fea54e801e0da869784dca3360205fa1565b5f527f860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f60205fa1565b90604051916306e744445f527f000000000000000000000000000000000000000000000000000000000000000060205260405260205f6044601c7f00000000000000000000000000000000000000000000000000000000000000005afa60203d141615610ebc575f5191604052565b9073ffffffffffffffffffffffffffffffffffffffff81165f52600460205260405f20916cffffffffffffffffffffffffff6146d36126e7565b93541692838152836146e55750505050565b81614715918561470b6dffffffffffffffffffffffffffff61018088970151168261529f565b9485923694613ba6565b92604051935f526020526040527fe12b220b92469ae28fb0d79de531f94161431be9f073b96b8aad3effb88be6fa60605fa26040525f8080806138e5565b63b9de88a25f526004601cfd5b91909260018360561c165f146147f65791604093916101c05f947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc36019287519563cc4526428752602087015287860152606085015e6102208084015280610240840152604461026084013782601c610200360193019160601c5af11560403d1017610ebc5761ffff90815f5116916020511690565b5090509091565b63cf1f916f5f526004601cfd5b638ec830735f526004601cfd5b630a68e5bf5f526004601cfd5b63253ecbb95f526004601cfd5b5f527fff7b6c8be373823323d3c5d99f5d027dd409dce5db54eae511bbdd5546b7503760205fa1565b5f527f72877a153052500f5edbb2f9da96a0f45d671d4b4555fdf8628a709dc4eab43a60205fa1565b92939190915f925f9261ffff968761014088015116916101a088019363ffffffff93848651168403848111610b38576148bb91615545565b809a6101208b0151168061495d575b50508061493b575b5050614930610180612985959697980161491c6149178b613ed46149118d61490b61315e88516dffffffffffffffffffffffffffff1690565b93612a67565b8261529f565b615464565b6dffffffffffffffffffffffffffff169052565b1663ffffffff169052565b612985959697506149546149309261018092858c61542b565b979695506148d2565b6149a69298509061496d916152ee565b6149a06cffffffffffffffffffffffffff60808c015116916dffffffffffffffffffffffffffff6101808d01511661529f565b9061529f565b604089016fffffffffffffffffffffffffffffffff908181511691838301809311610b38576149d99083168093146151b6565b5295895f6148ca565b614a106cffffffffffffffffffffffffff916142b08360a0860151169184602081835116920151169061340b565b16906fffffffffffffffffffffffffffffffff90614a4b82606083015116936dffffffffffffffffffffffffffff610180840151169061529f565b8301809311610b385760400151168101809111610b385780820391110290565b80516cffffffffffffffffffffffffff1690614aad60208201926cffffffffffffffffffffffffff9182916142b086516cffffffffffffffffffffffffff1690565b168015614c27576101808501958651614ad3906dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff16614aec916151cf565b818110908290030201614afe90613b26565b9451614b1e916dffffffffffffffffffffffffffff909116908616612e57565b614b279061393f565b91848151614b41906cffffffffffffffffffffffffff1690565b90614b4b91613476565b6cffffffffffffffffffffffffff1690526040018051614b7e9083906fffffffffffffffffffffffffffffffff166129a8565b6fffffffffffffffffffffffffffffffff16905260a082018051614bb29085906cffffffffffffffffffffffffff1661340b565b6cffffffffffffffffffffffffff16905260608201908151614be3906fffffffffffffffffffffffffffffffff1690565b90614bed916129a8565b6fffffffffffffffffffffffffffffffff169052608001908151614c1d906cffffffffffffffffffffffffff1690565b90613d319161340b565b505050505050565b90819073ffffffffffffffffffffffffffffffffffffffff7f1777adabd324f814e2b0e28f6edf876dce01d7d66358c9acfe87b1b5f38338d55416918260608501528215614d0c575060405190638925ca5a825260405f60209483868601523383860152606080860152366080860152368260a08701373660c4019082601c8701915af1835f51141615610ebc5760808361055b945160051b809460e06003830282010160405282820183823e80885201925f038184015281606084015285019260a08301845260a0019101525a60408401528251905190615481565b9392505050565b606081019073ffffffffffffffffffffffffffffffffffffffff825116156130a2575f8082518051908160061b95614d5060c08884010183615481565b519160051b019360405a91015103604085015283519463f0bd9468855260c4019082601c8601915af115610ebc5752565b927f18247a393d0531b65fbd94f5e78bc5639801a4efda62ae7b43533c4442116c3a959260c09592604051958652602086015260408501526060840152608083015260a0820152a1565b61298590611f8f60c082015f614de5825163ffffffff1690565b91614e016107b98463ffffffff165f52600760205260405f2090565b946020860190614e1e82516cffffffffffffffffffffffffff1690565b90614e39611e7289516cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff80931610614f17575b50614ec6614e6b88516cffffffffffffffffffffffffff1690565b92614eb3614e8682516cffffffffffffffffffffffffff1690565b60408b015163ffffffff8a16966fffffffffffffffffffffffffffffffff90911691861690861687614477565b516cffffffffffffffffffffffffff1690565b90614ee1611e7289516cffffffffffffffffffffffffff1690565b9116108314614f095750614ef4836154b9565b5263ffffffff165f52600760205260405f2090565b614f12906144b1565b614ef4565b614f29614f22612603565b828a6149e2565b8681614f37575b5050614e50565b614f41928a614264565b86614f30565b5f526020527f9385f9ff65bcd2fb81cece54b27d4ec7376795fc4dcff686e370e347b0ed86c060405fa1565b9091939293600182605c1c16614f8b575b5050505050565b6101c05f959486957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601936040519663a018f90e885233602089015260408801526060870152608086015260a085015e610260808401528061028084015260446102a084013782601c610240360193019160601c5af115610ebc575f80808080614f84565b90915f527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205fa3565b63186334fe5f526004601cfd5b9091600182605d1c1661505d575050505050565b601c5f9594869592836101c08895360393849360405199632970403d8b5260208b015260408a0152606089015e61022080880152816102408801526102608701376102440193019160601c5af115610ebc575f80808080614f84565b906040519163a1054f6b5f527f00000000000000000000000000000000000000000000000000000000000000006020526040527f000000000000000000000000000000000000000000000000000000000000000060605260205f6064601c827f00000000000000000000000000000000000000000000000000000000000000005af160203d141615610ebc575f51916040525f606052565b91929092604051935f526020526040527f0d0843a0fcb8b83f625aafb6e42f234ac48c6728b207d52d97cfa8fbd34d498f60605fa2604052565b90915f527fd6cddb3d69146e96ebc2c87b1b3dd0b20ee2d3b0eadf134e011afb434a3e56e660205fa3565b156151bd57565b634e487b715f5260116020526024601cfd5b8160011c906b033b2e3c9fd0803ce8000000908183190481118415176151bd5702010490565b919394909294600183605e1c1661520e57505050505050565b5f958695836101c0601c94899636039485946040519a633521cccc8c5260208c015260408b015260608a0152608089015e61024080880152816102608801526102808701376102640193019160601c5af115610ebc575f8080808080614c27565b919290925f526020527fecc966b282a372469fa4d3e497c2ac17983c3eaed03f3f17c9acf4b15591663e60405fa3565b817ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff04811115821517156151bd576b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7704811115821517156151bd576127109102611388010490565b6322d7c0435f526004601cfd5b63e4aa50555f526004601cfd5b929192600181605f1c166153575750505050565b5f601c81956101c083967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36019260405197635aeb713f895260208901526040880152606087015e610220908180870152806102408701526024610260870137360193019160601c5af115610ebc575f8080806138e5565b91905f526020527f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1560405fa2565b91905f526020527f5272034725119f19d7236de4129fdb5093f0dcb80282ca5edbd587df91d2bd8960405fa2565b909392935f9463ffffffff6101a0840151168203918211610b385761544f92615577565b9081615459575050565b61055b929350615545565b906129856dffffffffffffffffffffffffffff83168093146151b6565b9190825190818152602080809501918181019360051b0101915b8281106154a9575050509050565b815154815290840190840161549b565b6155039060055460801c90815f52600660205263ffffffff60405f2091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055612987565b6fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff000000000000000000000000000000006005549260801b16911617600555565b69152d02c7e14af68000008082029180828404036151bd57830202918183041490151715610b38576301e13380900490565b90610100820163ffffffff9060e0828251169401516155b7576155a5858503868611029283168093146151b6565b52808203911102818082039110020190565b848493940191828411610b38576155d29083168093146151b6565b528082039111028082039111029056fea164736f6c6343000819000a