0 txs
0 calls
constructor
constructor(address _admin, address _maintainer, address _indexToken, uint256 _mintFeeQ96, uint256 _burnFeeQ96, uint256 _maxReserves, uint256 _maxReservesIncreaseRateQ96, (address assetAddress, uint88 targetAllocation, uint8 decimals)[] _assetParams)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
DECIMAL_SCALE
viewfunction DECIMAL_SCALE() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getAllAssets
viewfunction getAllAssets() view returns (address[])
getAllowUnsafeBurn
viewfunction getAllowUnsafeBurn() view returns (bool)
getAssetParams
viewfunction getAssetParams(address asset) view returns (tuple)
getBurnFeeQ96
viewfunction getBurnFeeQ96() view returns (uint256)
getCompoundingMintFeeQ96
viewfunction getCompoundingMintFeeQ96() view returns (uint256)
getCurrentAssetParams
viewfunction getCurrentAssetParams() view returns (tuple[])
getEqualizationBounty
viewfunction getEqualizationBounty() view returns (uint256)
getEqualizationVectorScaled
viewfunction getEqualizationVectorScaled() view returns (int256[] deltasScaled)
getIndexToken
viewfunction getIndexToken() view returns (address)
getIsEqualized
viewfunction getIsEqualized() view returns (bool)
getIsMintEnabled
viewfunction getIsMintEnabled() view returns (bool)
getLastMaxReservesChangeTimestamp
viewfunction getLastMaxReservesChangeTimestamp() view returns (uint256)
getMaxReserves
viewfunction getMaxReserves() view returns (uint256)
getMaxReservesIncreaseCooldown
viewfunction getMaxReservesIncreaseCooldown() view returns (uint256)
getMaxReservesIncreaseRateQ96
viewfunction getMaxReservesIncreaseRateQ96() view returns (uint256)
getMigrationBurnConversionRateQ96
viewfunction getMigrationBurnConversionRateQ96() view returns (uint256)
getMintFeeQ96
viewfunction getMintFeeQ96() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSpecificReserves
viewfunction getSpecificReserves(address _asset) view returns (uint256)
getSpecificReservesScaled
viewfunction getSpecificReservesScaled(address asset) view returns (uint256)
getSurplus
viewfunction getSurplus() view returns (int256)
getTargetAssetParams
viewfunction getTargetAssetParams() view returns (tuple[])
getTotalReservesDiscrepencyScaled
viewfunction getTotalReservesDiscrepencyScaled() view returns (uint256)
getTotalReservesScaled
viewfunction getTotalReservesScaled() view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isEmigrating
viewfunction isEmigrating() view returns (bool)
MAINTAINER_ROLE
viewfunction MAINTAINER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
burn
nonpayablefunction burn(uint256 _burnAmount, bool _unsafe, bytes _forwardData)
equalizeToTarget
nonpayablefunction equalizeToTarget() returns (int256[])
finishEmigration
nonpayablefunction finishEmigration()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
increaseEqualizationBounty
nonpayablefunction increaseEqualizationBounty(uint256 _bountyIncrease)
mint
nonpayablefunction mint(uint256 _mintAmount, bytes _forwardData)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAllowUnsafeBurn
nonpayablefunction setAllowUnsafeBurn(bool _allowUnsafeBurn)
setBurnFeeQ96
nonpayablefunction setBurnFeeQ96(uint256 _burnFeeQ96)
setIsMintEnabled
nonpayablefunction setIsMintEnabled(bool _isMintEnabled)
setMaxReserves
nonpayablefunction setMaxReserves(uint256 _maxReserves)
setMaxReservesIncreaseCooldown
nonpayablefunction setMaxReservesIncreaseCooldown(uint256 _maxReservesIncreaseCooldown)
setMaxReservesIncreaseRateQ96
nonpayablefunction setMaxReservesIncreaseRateQ96(uint256 _maxReservesIncreaseRateQ96)
setMintFeeQ96
nonpayablefunction setMintFeeQ96(uint256 _mintFeeQ96)
setTargetAssetParams
nonpayablefunction setTargetAssetParams(tuple[] _params)
startEmigration
nonpayablefunction startEmigration(address _nextReserveManager)
swapTowardsTarget
nonpayablefunction swapTowardsTarget(address _asset, int256 _delta) returns (uint256 reservesTransfer, uint256 indexTransfer)
withdrawAll
nonpayablefunction withdrawAll(bool _unsafe) returns (tuple[] outputAmounts)
events
Burn
event Burn(address indexed recipient, uint256 burnAmount, uint256[] scaledReserves, uint256 feesPaid)
BurnFeeChange
event BurnFeeChange(uint256 burnFeeQ96)
Equalization
event Equalization(int256[] deltasScaled)
EqualizationBountySet
event EqualizationBountySet(uint256 equalizationBounty)
FeesCollected
event FeesCollected(uint256 feesCollected)
IsMintEnabledChange
event IsMintEnabledChange(bool isMintEnabled)
MaxReservesChange
event MaxReservesChange(uint256 maxReserves, uint256 blockTime)
MaxReservesIncreaseCooldownChange
event MaxReservesIncreaseCooldownChange(uint256 maxReservesIncreaseCooldown)
MaxReservesIncreaseRateChange
event MaxReservesIncreaseRateChange(uint256 maxReservesIncreaseRateQ96)
Mint
event Mint(address indexed recipient, uint256 mintAmount, uint256[] scaledReserves, uint256 feesPaid)
MintFeeChange
event MintFeeChange(uint256 mintFeeQ96, uint256 compoundingMintFeeQ96)
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)
Swap
event Swap(address indexed asset, int256 deltaScaled, uint256 bountyPaid)
TargetAssetParamsChange
event TargetAssetParamsChange(address[] assetAddresses, uint88[] targetAllocations, uint8[] decimals)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60a060405260006009819055600a819055600b819055600c819055600d805461ffff1916610100179055610e1060105560115534801561003e57600080fd5b506040516171c93803806171c983398101604081905261005d91610d6e565b600480546001600160a01b0319166001600160a01b038816179055610090600080516020617189833981519152806101d0565b6100b66000805160206171a98339815191526000805160206171898339815191526101d0565b6100ce6000805160206171898339815191528961021b565b506100e76000805160206171a98339815191528861021b565b506101006000805160206171898339815191523361021b565b5061010a816102c7565b6001600160a01b03881633146101345761013260008051602061718983398151915233610a8f565b505b600480546040805163313ce56760e01b815290516001600160a01b039092169263313ce5679282820192602092908290030181865afa15801561017b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019f9190610ecf565b60ff16608052600e839055600f82905560098590556101bd85610b12565b600a55505050600b555061114a92505050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166102bd576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556102753390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102c1565b5060005b92915050565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff1661032e5760405162461bcd60e51b81526020600482015260016024820152604160f81b60448201526064015b60405180910390fd5b6005546001600160a01b0316156103875760405162461bcd60e51b815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610325565b61039360066000610c99565b60005b81518110156104425760005b825181101561043957818114610431578281815181106103c4576103c4610ef1565b6020026020010151600001516001600160a01b03168383815181106103eb576103eb610ef1565b6020026020010151600001516001600160a01b0316036104315760405162461bcd60e51b81526020600482015260016024820152600360fc1b6044820152606401610325565b6001016103a2565b50600101610396565b5060008082516001600160401b0381111561045f5761045f610cef565b604051908082528060200260200182016040528015610488578160200160208202803683370190505b509050600083516001600160401b038111156104a6576104a6610cef565b6040519080825280602002602001820160405280156104cf578160200160208202803683370190505b509050600084516001600160401b038111156104ed576104ed610cef565b604051908082528060200260200182016040528015610516578160200160208202803683370190505b50905060005b85518110156108d35760045486516001600160a01b039091169087908390811061054857610548610ef1565b6020026020010151600001516001600160a01b03160361058e5760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610325565b8581815181106105a0576105a0610ef1565b60200260200101516040015160ff168682815181106105c1576105c1610ef1565b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062e9190610ecf565b60ff16146106625760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610325565b85818151811061067457610674610ef1565b60200260200101516000015184828151811061069257610692610ef1565b60200260200101906001600160a01b031690816001600160a01b0316815250508581815181106106c4576106c4610ef1565b6020026020010151602001518382815181106106e2576106e2610ef1565b60200260200101906001600160581b031690816001600160581b03168152505085818151811061071457610714610ef1565b60200260200101516040015182828151811061073257610732610ef1565b602002602001019060ff16908160ff168152505085818151811061075857610758610ef1565b60200260200101516008600088848151811061077657610776610ef1565b602090810291909101810151516001600160a01b0390811683528282019390935260409182016000208451815492860151959093015160ff16600160f81b026001600160f81b036001600160581b03909616600160a01b026001600160f81b031990931693909416929092171792909216179055855160069087908390811061080157610801610ef1565b60209081029190910181015182546001810184556000938452928290208151930180549282015160409092015160ff16600160f81b026001600160f81b036001600160581b03909316600160a01b026001600160f81b03199094166001600160a01b03909516949094179290921716919091179055855186908290811061088a5761088a610ef1565b602002602001015160200151856108a19190610f1d565b94506108cb8682815181106108b8576108b8610ef1565b6020026020010151610b3960201b60201c565b60010161051c565b507fd390c5744e66df71d9caf0cec9c8b24baadddf35b8eb30272c6219f387fd87e383838360405161090793929190610f7b565b60405180910390a150505060005b600754811015610a4e576000805b8451811015610992576007838154811061093f5761093f610ef1565b60009182526020909120015485516001600160a01b039091169086908390811061096b5761096b610ef1565b6020026020010151600001516001600160a01b03160361098a57600191505b600101610923565b5080610a45576000600783815481106109ad576109ad610ef1565b9060005260206000200160000160146101000a8154816001600160581b0302191690836001600160581b03160217905550600060086000600785815481106109f7576109f7610ef1565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546001600160581b0392909216600160a01b02600160a01b600160f81b03199092169190911790555b50600101610915565b506001600160581b0381811614610a8b5760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610325565b5050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16156102bd576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102c1565b600081610b2160606002611109565b610b2b9190611115565b6102c190606084901b611128565b6000805b600754811015610c055760078181548110610b5a57610b5a610ef1565b60009182526020909120015483516001600160a01b03918216911603610bfd57600191508260078281548110610b9257610b92610ef1565b60009182526020918290208351910180549284015160409094015160ff16600160f81b026001600160f81b036001600160581b03909516600160a01b026001600160f81b03199094166001600160a01b03909316929092179290921792909216919091179055610c05565b600101610b3d565b5080610a8b576007805460018101825560009190915282517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546020850151604086015160ff16600160f81b026001600160f81b036001600160581b03909216600160a01b026001600160f81b03199093166001600160a01b039095169490941791909117169190911790555050565b5080546000825590600052602060002090810190610cb79190610cba565b50565b5b80821115610ccf5760008155600101610cbb565b5090565b80516001600160a01b0381168114610cea57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715610d2757610d27610cef565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610d5557610d55610cef565b604052919050565b805160ff81168114610cea57600080fd5b600080600080600080600080610100898b031215610d8b57600080fd5b610d9489610cd3565b9750610da260208a01610cd3565b9650610db060408a01610cd3565b60608a015160808b015160a08c015160c08d015160e08e0151949a50929850909650945092506001600160401b03811115610dea57600080fd5b8901601f81018b13610dfb57600080fd5b80516001600160401b03811115610e1457610e14610cef565b610e2360208260051b01610d2d565b8082825260208201915060206060840285010192508d831115610e4557600080fd5b6020840193505b82841015610ebb576060848f031215610e6457600080fd5b610e6c610d05565b610e7585610cd3565b815260208501516001600160581b0381168114610e9157600080fd5b6020820152610ea260408601610d5d565b6040820152825260609390930192602090910190610e4c565b809450505050509295985092959890939650565b600060208284031215610ee157600080fd5b610eea82610d5d565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001600160581b0381811683821601908111156102c1576102c1610f07565b600081518084526020840193506020830160005b82811015610f7157815160ff16865260209586019590910190600101610f50565b5093949350505050565b6060808252845190820181905260009060208601906080840190835b81811015610fbe5783516001600160a01b0316835260209384019390920191600101610f97565b50508381036020808601919091528651808352918101925086019060005b818110156110035782516001600160581b0316845260209384019390920191600101610fdc565b50505082810360408401526110188185610f3c565b9695505050505050565b6001815b600184111561105d5780850481111561104157611041610f07565b600184161561104f57908102905b60019390931c928002611026565b935093915050565b600082611074575060016102c1565b81611081575060006102c1565b816001811461109757600281146110a1576110bd565b60019150506102c1565b60ff8411156110b2576110b2610f07565b50506001821b6102c1565b5060208310610133831016604e8410600b84101617156110e0575081810a6102c1565b6110ed6000198484611022565b806000190482111561110157611101610f07565b029392505050565b6000610eea8383611065565b818103818111156102c1576102c1610f07565b60008261114557634e487b7160e01b600052601260045260246000fd5b500490565b608051615fbb6111ce6000396000818161072a01528181611ebd01528181611f7b01528181611fb6015281816121ba015281816122a0015281816122db01528181612974015281816129ac01528181612d250152818161365e015281816136c60152818161379e015281816137fa015281816148cd01526149100152615fbb6000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c80637540a432116101b2578063b79cc8ad116100f9578063e8b62bcc116100a2578063f87422541161007c578063f8742254146107b7578063fac940b7146107de578063fadaa6f7146107e6578063fbed8117146107ee57600080fd5b8063e8b62bcc14610771578063ec9fda2414610779578063f7c44c8e146107af57600080fd5b8063d547741f116100d3578063d547741f14610712578063db5dca2114610725578063db7fd4081461075e57600080fd5b8063b79cc8ad146106e4578063c751b230146106ec578063cfbc085e146106ff57600080fd5b80639c99cd1e1161015b578063ad889e5911610135578063ad889e59146106b6578063addbb2e0146106be578063b363e757146106d157600080fd5b80639c99cd1e14610689578063a217fddf14610699578063a8ade73d146106a157600080fd5b806391d148541161018c57806391d148541461062a57806394999f7c1461066e578063986c37181461068157600080fd5b80637540a432146105e657806375b238fc146105fb578063880fab731461062257600080fd5b806345b54fdc11610281578063549c67d61161022a578063621ce06c11610204578063621ce06c146104ec578063697b94e3146104ff5780636c91ebaf146105125780636ca0980c146105d357600080fd5b8063549c67d6146104c957806358782e35146104d15780635fb699e7146104e457600080fd5b80634927013e1161025b5780634927013e146104a35780634de8bcfb146104ae57806354518180146104c157600080fd5b806345b54fdc146104605780634744e4fd14610488578063476805311461049057600080fd5b8063248a9ca3116102e35780632f2ff15d116102bd5780632f2ff15d1461041257806336568abe146104255780633ad54b1e1461043857600080fd5b8063248a9ca3146103c75780632a1cfa64146103ea5780632acada4d146103fd57600080fd5b80631c1c6fe5116103145780631c1c6fe51461038d5780631f5bb3e5146103ad5780632383b074146103bf57600080fd5b806301ffc9a71461033b5780630d7b5c8d1461036357806319c1043714610383575b600080fd5b61034e6103493660046154b8565b6107f6565b60405190151581526020015b60405180910390f35b60055473ffffffffffffffffffffffffffffffffffffffff16151561034e565b61038b61088f565b005b6103a061039b366004615508565b610b79565b60405161035a9190615525565b6002545b60405190815260200161035a565b6103b1611086565b6103b16103d536600461558a565b60009081526020819052604090206001015490565b61038b6103f836600461567d565b611138565b610405611bc9565b60405161035a91906157da565b61038b6104203660046157ed565b611ca2565b61038b6104333660046157ed565b611ccd565b60045460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b61047361046e366004615819565b611d2b565b6040805192835260208301919091520161035a565b600f546103b1565b61038b61049e36600461558a565b6124da565b600d5460ff1661034e565b61038b6104bc366004615508565b61262e565b600c546103b1565b6103b16127ac565b61038b6104df36600461588c565b612804565b600b546103b1565b6103b16104fa3660046158e8565b612ced565b61038b61050d36600461558a565b612d70565b6105c66105203660046158e8565b60408051606080820183526000808352602080840182905292840181905273ffffffffffffffffffffffffffffffffffffffff948516815260088352839020835191820184525493841681527401000000000000000000000000000000000000000084046affffffffffffffffffffff16918101919091527f010000000000000000000000000000000000000000000000000000000000000090920460ff169082015290565b60405161035a9190615903565b61038b6105e136600461558a565b612ebd565b6105ee61308a565b60405161035a919061594a565b6103b17fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6103b1613152565b61034e6106383660046157ed565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61038b61067c366004615508565b61326e565b6105ee613337565b600d54610100900460ff1661034e565b6103b1600081565b6106a96133f5565b60405161035a91906159c7565b6009546103b1565b61038b6106cc36600461558a565b613c9a565b61038b6106df3660046158e8565b613e7c565b6106a96140e2565b61038b6106fa36600461558a565b614252565b61038b61070d36600461558a565b6143ac565b61038b6107203660046157ed565b61457f565b61074c7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161035a565b61038b61076c3660046159ff565b6145a4565b600e546103b1565b6103b16107873660046158e8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6010546103b1565b6103b17f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab9581565b6011546103b1565b600a546103b1565b61034e614aa7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061088957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60055473ffffffffffffffffffffffffffffffffffffffff16610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f72657365727665206d616e61676572206973206e6f7420656d6967726174696e60448201527f670000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60045473ffffffffffffffffffffffffffffffffffffffff1633146109ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f36000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60025415610a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f37000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b600480546040517f70a082310000000000000000000000000000000000000000000000000000000081523092810183905273ffffffffffffffffffffffffffffffffffffffff909116916379cc67909183906370a0823190602401602060405180830381865afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac09190615a4b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b158015610b2b57600080fd5b505af1158015610b3f573d6000803e3d6000fd5b5050600380547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556005805490911690555050565b6060610b9c60055473ffffffffffffffffffffffffffffffffffffffff16151590565b610c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f72657365727665206d616e61676572206973206e6f7420656d6967726174696e60448201527f67000000000000000000000000000000000000000000000000000000000000006064820152608401610930565b600480546002546040517f79cc67900000000000000000000000000000000000000000000000000000000081523393810193909352602483015273ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610c9c57600080fd5b505af1158015610cb0573d6000803e3d6000fd5b50506000600255505060075467ffffffffffffffff811115610cd457610cd46155a3565b604051908082528060200260200182016040528015610d1957816020015b6040805180820190915260008082526020820152815260200190600190039081610cf25790505b5060075490915060009067ffffffffffffffff811115610d3b57610d3b6155a3565b604051908082528060200260200182016040528015610d64578160200160208202803683370190505b50905060005b60075481101561102957600060078281548110610d8957610d89615a64565b6000918252602080832060408051606081018252939091015473ffffffffffffffffffffffffffffffffffffffff81168085527401000000000000000000000000000000000000000082046affffffffffffffffffffff16938501939093527f0100000000000000000000000000000000000000000000000000000000000000900460ff1683820152517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919350906370a0823190602401602060405180830381865afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a9190615a4b565b9050858015610e9b5750600d5460ff165b15610f5b5781516040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1925050508015610f50575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610f4d91810190615a93565b60015b15610f7e5750610f7e565b8151610f7e9073ffffffffffffffffffffffffffffffffffffffff163383614ad2565b60408051808201909152600080825260208201908152835173ffffffffffffffffffffffffffffffffffffffff16825282905285518190879086908110610fc757610fc7615a64565b602090810291909101810191909152835173ffffffffffffffffffffffffffffffffffffffff166000908152600190915260408120819055855186908690811061101357611013615a64565b6020908102919091010152505050600101610d6a565b503373ffffffffffffffffffffffffffffffffffffffff167fc5073c005788be78187227a9f2ffd6b00d24a158d36a803df08b85819309a5c360025483600060405161107793929190615ae2565b60405180910390a2505b919050565b6000600c54600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111c9190615a4b565b6002546111299190615b3a565b6111339190615b3a565b905090565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff166111d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f41000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60055473ffffffffffffffffffffffffffffffffffffffff1615611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b61125c6006600061548a565b60005b815181101561135b5760005b82518110156113525781811461134a5782818151811061128d5761128d615a64565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff168383815181106112c1576112c1615a64565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff160361134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f30000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60010161126b565b5060010161125f565b50600080825167ffffffffffffffff811115611379576113796155a3565b6040519080825280602002602001820160405280156113a2578160200160208202803683370190505b5090506000835167ffffffffffffffff8111156113c1576113c16155a3565b6040519080825280602002602001820160405280156113ea578160200160208202803683370190505b5090506000845167ffffffffffffffff811115611409576114096155a3565b604051908082528060200260200182016040528015611432578160200160208202803683370190505b50905060005b855181101561197a57600454865173ffffffffffffffffffffffffffffffffffffffff9091169087908390811061147157611471615a64565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16036114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b85818151811061150c5761150c615a64565b60200260200101516040015160ff1686828151811061152d5761152d615a64565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190615b61565b60ff1614611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b85818151811061162357611623615a64565b60200260200101516000015184828151811061164157611641615a64565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505085818151811061168d5761168d615a64565b6020026020010151602001518382815181106116ab576116ab615a64565b60200260200101906affffffffffffffffffffff1690816affffffffffffffffffffff16815250508581815181106116e5576116e5615a64565b60200260200101516040015182828151811061170357611703615a64565b602002602001019060ff16908160ff168152505085818151811061172957611729615a64565b60200260200101516008600088848151811061174757611747615a64565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff90811683528282019390935260409182016000208451815492860151959093015160ff167f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6affffffffffffffffffffff90961674010000000000000000000000000000000000000000027fff0000000000000000000000000000000000000000000000000000000000000090931693909416929092171792909216179055855160069087908390811061184057611840615a64565b60209081029190910181015182546001810184556000938452928290208151930180549282015160409092015160ff167f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6affffffffffffffffffffff90931674010000000000000000000000000000000000000000027fff0000000000000000000000000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff909516949094179290921716919091179055855186908290811061193757611937615a64565b6020026020010151602001518561194e9190615b7e565b945061197286828151811061196557611965615a64565b6020026020010151614b53565b600101611438565b507fd390c5744e66df71d9caf0cec9c8b24baadddf35b8eb30272c6219f387fd87e38383836040516119ae93929190615ba1565b60405180910390a150505060005b600754811015611b4e576000805b8451811015611a5357600783815481106119e6576119e6615a64565b600091825260209091200154855173ffffffffffffffffffffffffffffffffffffffff90911690869083908110611a1f57611a1f615a64565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1603611a4b57600191505b6001016119ca565b5080611b4557600060078381548110611a6e57611a6e615a64565b9060005260206000200160000160146101000a8154816affffffffffffffffffffff02191690836affffffffffffffffffffff16021790555060006008600060078581548110611ac057611ac0615a64565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080546affffffffffffffffffffff9290921674010000000000000000000000000000000000000000027fff0000000000000000000000ffffffffffffffffffffffffffffffffffffffff9092169190911790555b506001016119bc565b506affffffffffffffffffffff81811614611bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b5050565b60075460609060009067ffffffffffffffff811115611bea57611bea6155a3565b604051908082528060200260200182016040528015611c13578160200160208202803683370190505b50905060005b600754811015611c9c5760078181548110611c3657611c36615a64565b600091825260209091200154825173ffffffffffffffffffffffffffffffffffffffff90911690839083908110611c6f57611c6f615a64565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611c19565b50919050565b600082815260208190526040902060010154611cbd81614d9c565b611cc78383614da9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314611d1c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d268282614ea5565b505050565b600080611d4f60055473ffffffffffffffffffffffffffffffffffffffff16151590565b15611db6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b73ffffffffffffffffffffffffffffffffffffffff84811660009081526008602090815260408083208151606081018352905494851681527401000000000000000000000000000000000000000085046affffffffffffffffffffff16928101929092527f010000000000000000000000000000000000000000000000000000000000000090930460ff169281019290925280611e516127ac565b90506000611ea58460200151600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600254614f60565b90506000871315612184576000611ee18886604001517f0000000000000000000000000000000000000000000000000000000000000000615095565b905081811315611f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f6465706f73697420657863656564732074617267657420616c6c6f636174696f60448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610930565b6000611fa4827f00000000000000000000000000000000000000000000000000000000000000008860400151615095565b90508097506000611fda8288604001517f0000000000000000000000000000000000000000000000000000000000000000615095565b73ffffffffffffffffffffffffffffffffffffffff8c16600090815260016020526040812080549293508392909190612014908490615c47565b92505081905550806002600082825461202d9190615c47565b9091555061203b90506150fe565b60006120456127ac565b9050612054600c54878361525c565b965086600c60008282546120689190615c5a565b9091555050604080518381526020810189905273ffffffffffffffffffffffffffffffffffffffff8e16917f5fabad65508a11ffb1a3e68f44edb3ad3bc4e829e772a3bbf4bcd7a7a7a15bdc910160405180910390a26120c88783615c47565b600480546040517f40c10f19000000000000000000000000000000000000000000000000000000008152339281019290925260248201839052919a5073ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b15801561214057600080fd5b505af1158015612154573d6000803e3d6000fd5b5061217b9250505073ffffffffffffffffffffffffffffffffffffffff8d1633308661529a565b505050506124cf565b60006121de6121b3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615c6d565b86604001517f0000000000000000000000000000000000000000000000000000000000000000615095565b90508161220b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615c6d565b1215612298576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f7769746864726177616c20657863656564732074617267657420616c6c6f636160448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610930565b60006122c9827f00000000000000000000000000000000000000000000000000000000000000008860400151615095565b905080975060006122ff8288604001517f0000000000000000000000000000000000000000000000000000000000000000615095565b73ffffffffffffffffffffffffffffffffffffffff8c16600090815260016020526040812080549293508392909190612339908490615c5a565b9250508190555080600260008282546123529190615c5a565b90915550600090506123626127ac565b9050612371600c54878361525c565b965081871061237e578196505b86600c60008282546123909190615c5a565b909155505073ffffffffffffffffffffffffffffffffffffffff8c167f5fabad65508a11ffb1a3e68f44edb3ad3bc4e829e772a3bbf4bcd7a7a7a15bdc6123f7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615c6d565b60408051918252602082018b90520160405180910390a26124188783615c5a565b600480546040517f79cc6790000000000000000000000000000000000000000000000000000000008152339281019290925260248201839052919a5073ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401600060405180830381600087803b15801561249057600080fd5b505af11580156124a4573d6000803e3d6000fd5b506124ca9250505073ffffffffffffffffffffffffffffffffffffffff8d163385614ad2565b505050505b505050509250929050565b3360009081527fa54247010af6b3693b80aceddfad12e077c5de3571e6243fada502635f0d7d39602052604090205460ff16612572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f4d000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60055473ffffffffffffffffffffffffffffffffffffffff16156125f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b60108190556040518181527f8f54ba867564bf39178134fa8ab9fce263474990351cf241524ba3443a8c4167906020015b60405180910390a150565b3360009081527fa54247010af6b3693b80aceddfad12e077c5de3571e6243fada502635f0d7d39602052604090205460ff166126c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f4d000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60055473ffffffffffffffffffffffffffffffffffffffff1615612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b600d8054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f2a3b912d8b9841fea92fe693d6c44698af135aa4582ede7eb09630a76de49fa99061262390831515815260200190565b600080806127b86140e2565b905060005b81518110156127fc576127e88282815181106127db576127db615a64565b60200260200101516152e0565b6127f29084615c47565b92506001016127bd565b509092915050565b60008061281e600b54876128189190615cb9565b60601c90565b9050600061282c8288615c5a565b90506060612838613152565b6128429083615cb9565b600754911c915060009067ffffffffffffffff811115612864576128646155a3565b60405190808252806020026020018201604052801561288d578160200160208202803683370190505b5060025490915060005b600754811015612b76576000600782815481106128b6576128b6615a64565b600091825260208083206040805160608082018352949092015473ffffffffffffffffffffffffffffffffffffffff81168084527401000000000000000000000000000000000000000082046affffffffffffffffffffff16848601527f010000000000000000000000000000000000000000000000000000000000000090910460ff1683830152855260019092529083205490935085911b6129599190615cff565b9050600061296a6128188884615cb9565b9050600061299d827f00000000000000000000000000000000000000000000000000000000000000008660400151615095565b905060006129d08286604001517f0000000000000000000000000000000000000000000000000000000000000000615095565b90508d80156129e15750600d5460ff165b15612aa15784516040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1925050508015612a96575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612a9391810190615a93565b60015b15612ac45750612ac4565b8451612ac49073ffffffffffffffffffffffffffffffffffffffff163384614ad2565b612ace818c615c47565b855173ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902054909b50612b03908290615c5a565b888781518110612b1557612b15615a64565b602002602001018181525050878681518110612b3357612b33615a64565b602090810291909101810151955173ffffffffffffffffffffffffffffffffffffffff166000908152600191829052604090209590955550505091019050612897565b508460026000828254612b899190615c5a565b90915550508515612c05576040517f6e82190a0000000000000000000000000000000000000000000000000000000081523390636e82190a90612bd2908a908a90600401615d13565b600060405180830381600087803b158015612bec57600080fd5b505af1158015612c00573d6000803e3d6000fd5b505050505b600480546040517f79cc67900000000000000000000000000000000000000000000000000000000081523392810192909252602482018b905273ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015612c7857600080fd5b505af1158015612c8c573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167fc5073c005788be78187227a9f2ffd6b00d24a158d36a803df08b85819309a5c38a8487604051612cda93929190615ae2565b60405180910390a2505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832054600890925282205461088991907f0000000000000000000000000000000000000000000000000000000000000000907f0100000000000000000000000000000000000000000000000000000000000000900460ff16615095565b3360009081527fa54247010af6b3693b80aceddfad12e077c5de3571e6243fada502635f0d7d39602052604090205460ff16612e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f4d000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60055473ffffffffffffffffffffffffffffffffffffffff1615612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b600f8190556040518181527fd1df3f65fde2e1fad965a29857a5019dddd94e2291775ac58b0342761e2a86cb90602001612623565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16612f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f41000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60055473ffffffffffffffffffffffffffffffffffffffff1615612fd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b612fed60646c01000000000000000000000000615cff565b8110613055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f39000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b600b8190556040518181527faf94b65a45b98e81c4164d995359fe14ee9f68c92262205489f14b1b2eb6599790602001612623565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015613149576000848152602090819020604080516060810182529185015473ffffffffffffffffffffffffffffffffffffffff811683527401000000000000000000000000000000000000000081046affffffffffffffffffffff16838501527f0100000000000000000000000000000000000000000000000000000000000000900460ff16908201528252600190920191016130ae565b50505050905090565b600061317560055473ffffffffffffffffffffffffffffffffffffffff16151590565b61318b57506c0100000000000000000000000090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b6304056040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321e9190615d60565b6003546bffffffffffffffffffffffff82811693506132689268010000000000000000909204169060601b77ffffffffffffffffffffffff00000000000000000000000016615cff565b91505090565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16613306576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f41000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b606060068054806020026020016040519081016040528092919081815260200160009082821015613149576000848152602090819020604080516060810182529185015473ffffffffffffffffffffffffffffffffffffffff811683527401000000000000000000000000000000000000000081046affffffffffffffffffffff16838501527f0100000000000000000000000000000000000000000000000000000000000000900460ff16908201528252600190920191016130ae565b606061341860055473ffffffffffffffffffffffffffffffffffffffff16151590565b1561347f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b613487614aa7565b15613513576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f72657365727665206d616e6167657220697320616c726561647920657175616c60448201527f697a6564000000000000000000000000000000000000000000000000000000006064820152608401610930565b600061351d6140e2565b90506000815167ffffffffffffffff81111561353b5761353b6155a3565b604051908082528060200260200182016040528015613564578160200160208202803683370190505b50600060028190559091505b6007548110156138f25760006007828154811061358f5761358f615a64565b6000918252602080832060408051606081018252939091015473ffffffffffffffffffffffffffffffffffffffff811684527401000000000000000000000000000000000000000081046affffffffffffffffffffff16928401929092527f010000000000000000000000000000000000000000000000000000000000000090910460ff1690820152855190925085908490811061362f5761362f615a64565b6020026020010151131561375257600061368785848151811061365457613654615a64565b60200260200101517f00000000000000000000000000000000000000000000000000000000000000008460400151615095565b613692906001615c47565b82519091506136b99073ffffffffffffffffffffffffffffffffffffffff1633308461529a565b60006136ea8284604001517f0000000000000000000000000000000000000000000000000000000000000000615095565b835173ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040812080549293508392909190613725908490615c47565b925050819055508185858151811061373f5761373f615a64565b60200260200101818152505050506138aa565b600084838151811061376657613766615a64565b602002602001015112156138aa5760006137c785848151811061378b5761378b615a64565b602002602001015161379c90615d8e565b7f00000000000000000000000000000000000000000000000000000000000000008460400151615095565b82519091506137ed9073ffffffffffffffffffffffffffffffffffffffff163383614ad2565b600061381e8284604001517f0000000000000000000000000000000000000000000000000000000000000000615095565b835173ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040812080549293508392909190613859908490615c5a565b909155506138899050827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615c6d565b85858151811061389b5761389b615a64565b60200260200101818152505050505b805173ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604081205460028054919290916138e4908490615c47565b909155505050600101613570565b5060075460009067ffffffffffffffff811115613911576139116155a3565b60405190808252806020026020018201604052801561397a57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161392f5790505b50905060005b600754811015613a7e5760006007828154811061399f5761399f615a64565b6000918252602080832060408051606081018252939091015473ffffffffffffffffffffffffffffffffffffffff811684527401000000000000000000000000000000000000000081046affffffffffffffffffffff169284018390527f0100000000000000000000000000000000000000000000000000000000000000900460ff16908301529092509003613a5757805173ffffffffffffffffffffffffffffffffffffffff166000908152600860205260408120555b80838381518110613a6a57613a6a615a64565b602090810291909101015250600101613980565b50613a8b6007600061548a565b60005b8151811015613bc957818181518110613aa957613aa9615a64565b6020026020010151602001516affffffffffffffffffffff16600014613bc1576007828281518110613add57613add615a64565b60209081029190910181015182546001810184556000938452928290208151930180549282015160409092015160ff167f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6affffffffffffffffffffff90931674010000000000000000000000000000000000000000027fff0000000000000000000000000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9095169490941792909217169190911790555b600101613a8e565b5060048054600c546040517f40c10f190000000000000000000000000000000000000000000000000000000081523393810193909352602483015273ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b158015613c3e57600080fd5b505af1158015613c52573d6000803e3d6000fd5b50506000600c5550506040517f577ba476905b917888dc09e886911584c5cc62f5e7a27972757d2df22e27500590613c8b9085906159c7565b60405180910390a15091505090565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16613d32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f41000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60055473ffffffffffffffffffffffffffffffffffffffff1615613db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b613dca60646c01000000000000000000000000615cff565b8110613e32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f38000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b6009819055613e4081615314565b600a8190556040805183815260208101929092527fd780b5c2e8e532c4d6fefd2ad29a640fff119686b56ed7988581ce1f11639a329101612623565b60055473ffffffffffffffffffffffffffffffffffffffff1615613efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b73ffffffffffffffffffffffffffffffffffffffff8116613f1c57600080fd5b60045473ffffffffffffffffffffffffffffffffffffffff163314613f9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f35000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169190911790915560048054604080517f8b63040500000000000000000000000000000000000000000000000000000000815290519190931692638b63040592818101926020929091908290030181865afa15801561403d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140619190615d60565b600380547fffffffffffffffffffffffff000000000000000000000000000000000000000016680100000000000000006bffffffffffffffffffffffff93909316929092027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016919091174267ffffffffffffffff16179055506000600b55565b60075460609067ffffffffffffffff811115614100576141006155a3565b604051908082528060200260200182016040528015614129578160200160208202803683370190505b50905060005b60075481101561424e5760006007828154811061414e5761414e615a64565b6000918252602080832060408051606081018252939091015473ffffffffffffffffffffffffffffffffffffffff811684527401000000000000000000000000000000000000000081046affffffffffffffffffffff169284018390527f0100000000000000000000000000000000000000000000000000000000000000900460ff16908301526002549193506141f391906141e99061533b565b6128189190615cb9565b825173ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020549091506142279082615b3a565b84848151811061423957614239615a64565b6020908102919091010152505060010161412f565b5090565b3360009081527fa54247010af6b3693b80aceddfad12e077c5de3571e6243fada502635f0d7d39602052604090205460ff166142ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f4d000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60055473ffffffffffffffffffffffffffffffffffffffff161561436a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b600e8190554260118190556040805183815260208101929092527fa77b7d9e1c239aba6f85719c91aff8d43a27a6ea2e44fe822d091033b444cb8a9101612623565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16614444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f41000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b60055473ffffffffffffffffffffffffffffffffffffffff16156144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b806144cd611086565b1215614535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f34000000000000000000000000000000000000000000000000000000000000006044820152606401610930565b80600c60008282546145479190615c47565b9091555050600c546040519081527ff30147445c80fce695b1751ce89a9eb38fb2ea40624f3fba2a404f9bba19d7fc90602001612623565b60008281526020819052604090206001015461459a81614d9c565b611cc78383614ea5565b60055473ffffffffffffffffffffffffffffffffffffffff1615614624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f72657365727665206d616e6167657220697320656d6967726174696e670000006044820152606401610930565b600d54610100900460ff16614695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6d696e74696e672064697361626c6564000000000000000000000000000000006044820152606401610930565b600480546040517f40c10f1900000000000000000000000000000000000000000000000000000000815233928101929092526024820185905273ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561470857600080fd5b505af115801561471c573d6000803e3d6000fd5b5050821591506147999050576040517f62369a4c00000000000000000000000000000000000000000000000000000000815233906362369a4c906147669085908590600401615d13565b600060405180830381600087803b15801561478057600080fd5b505af1158015614794573d6000803e3d6000fd5b505050505b60006147ac600a54856128189190615cb9565b905060006147ba8286615c47565b60065490915060009067ffffffffffffffff8111156147db576147db6155a3565b604051908082528060200260200182016040528015614804578160200160208202803683370190505b5090506000805b600654811015614a2b5760006006828154811061482a5761482a615a64565b6000918252602080832060408051606081018252939091015473ffffffffffffffffffffffffffffffffffffffff811684527401000000000000000000000000000000000000000081046affffffffffffffffffffff169284018390527f0100000000000000000000000000000000000000000000000000000000000000900460ff16908301529092506148c39087906141e99061533b565b905060006148f6827f00000000000000000000000000000000000000000000000000000000000000008560400151615095565b614901906001615c47565b905060006149348285604001517f0000000000000000000000000000000000000000000000000000000000000000615095565b845190915061495b9073ffffffffffffffffffffffffffffffffffffffff1633308561529a565b6149658187615c47565b845173ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490965061499a908290615c47565b8786815181106149ac576149ac615a64565b6020026020010181815250508685815181106149ca576149ca615a64565b602002602001015160016000600688815481106149e9576149e9615a64565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902055505050600191909101905061480b565b508060026000828254614a3e9190615c47565b90915550614a4c90506150fe565b3373ffffffffffffffffffffffffffffffffffffffff167feee11a30e971d8277bc52a12421eebc516b0d3ac760f7e615b821011ff5b919d888487604051614a9693929190615ae2565b60405180910390a250505050505050565b600080614ab26127ac565b90506000633b9aca00600254614ac89190615cff565b9091111592915050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d2691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615360565b6000805b600754811015614c9a5760078181548110614b7457614b74615a64565b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff918216911603614c9257600191508260078281548110614bb957614bb9615a64565b60009182526020918290208351910180549284015160409094015160ff167f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6affffffffffffffffffffff90951674010000000000000000000000000000000000000000027fff0000000000000000000000000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff909316929092179290921792909216919091179055614c9a565b600101614b57565b5080611bc5576007805460018101825560009190915282517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546020850151604086015160ff167f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6affffffffffffffffffffff90921674010000000000000000000000000000000000000000027fff0000000000000000000000000000000000000000000000000000000000000090931673ffffffffffffffffffffffffffffffffffffffff9095169490941791909117169190911790555050565b614da68133615404565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16614e9d5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055614e3b3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610889565b506000610889565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615614e9d5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610889565b60007fffffffffffffffffffffffffffffffffffffffffff00000000000000000000016affffffffffffffffffffff85160161501e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f6d617820616c6c6f636174696f6e20697320313030252c20757365206d696e7460448201527f28292f6275726e282920696e73746561640000000000000000000000000000006064820152608401610930565b600061502c60586060615c5a565b6affffffffffffffffffffff8616901b90506000606061504c8584615cb9565b901c90506000606061505e8784615b3a565b901b905060008361507160606002615ee9565b61507b9190615b3a565b90506150878183615ef5565b9450505050505b9392505050565b60008160ff168360ff16036150ab57508261508e565b8160ff168360ff1610156150df576150c38383615f5d565b6150ce90600a615f76565b6150d89085615cb9565b905061508e565b6150e98284615f5d565b6150f490600a615f76565b6150d89085615cff565b600e54600254111561525a574260105460115461511b9190615c47565b1115615183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d6178207265736572766573206c696d697400000000000000000000000000006044820152606401610930565b42601155600f54600e5461519a9161281891615cb9565b600e60008282546151ab9190615c47565b9091555050600254600e54101561521e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d6178207265736572766573206c696d697400000000000000000000000000006044820152606401610930565b600e54604080519182524260208301527fa77b7d9e1c239aba6f85719c91aff8d43a27a6ea2e44fe822d091033b444cb8a910160405180910390a15b565b60008360000361526e5750600061508e565b600061527a8385615c5a565b9050836152878287615cb9565b6152919190615cff565b95945050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611cc79186918216906323b872dd90608401614b0c565b60008082121561424e57610889827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615c6d565b60008161532360606002615ee9565b61532d9190615c5a565b61088990606084901b615cff565b600061534960586060615c5a565b826affffffffffffffffffffff16901b9050919050565b600080602060008451602086016000885af180615383576040513d6000823e3d81fd5b50506000513d9150811561539b5780600114156153b5565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611cc7576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610930565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611bc5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610930565b5080546000825590600052602060002090810190614da691905b8082111561424e57600081556001016154a4565b6000602082840312156154ca57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461508e57600080fd5b8015158114614da657600080fd5b60006020828403121561551a57600080fd5b813561508e816154fa565b602080825282518282018190526000918401906040840190835b8181101561557f578351805173ffffffffffffffffffffffffffffffffffffffff168452602090810151818501529093019260409092019160010161553f565b509095945050505050565b60006020828403121561559c57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156155f5576155f56155a3565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615642576156426155a3565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461108157600080fd5b60ff81168114614da657600080fd5b60006020828403121561568f57600080fd5b813567ffffffffffffffff8111156156a657600080fd5b8201601f810184136156b757600080fd5b803567ffffffffffffffff8111156156d1576156d16155a3565b6156e060208260051b016155fb565b8082825260208201915060206060840285010192508683111561570257600080fd5b6020840193505b8284101561577e576060848803121561572157600080fd5b6157296155d2565b6157328561564a565b815260208501356affffffffffffffffffffff8116811461575257600080fd5b602082015260408501356157658161566e565b6040820152825260609390930192602090910190615709565b9695505050505050565b600081518084526020840193506020830160005b828110156157d057815173ffffffffffffffffffffffffffffffffffffffff1686526020958601959091019060010161579c565b5093949350505050565b60208152600061508e6020830184615788565b6000806040838503121561580057600080fd5b823591506158106020840161564a565b90509250929050565b6000806040838503121561582c57600080fd5b6158358361564a565b946020939093013593505050565b60008083601f84011261585557600080fd5b50813567ffffffffffffffff81111561586d57600080fd5b60208301915083602082850101111561588557600080fd5b9250929050565b600080600080606085870312156158a257600080fd5b8435935060208501356158b4816154fa565b9250604085013567ffffffffffffffff8111156158d057600080fd5b6158dc87828801615843565b95989497509550505050565b6000602082840312156158fa57600080fd5b61508e8261564a565b815173ffffffffffffffffffffffffffffffffffffffff1681526020808301516affffffffffffffffffffff169082015260408083015160ff169082015260608101610889565b602080825282518282018190526000918401906040840190835b8181101561557f576159b1838551805173ffffffffffffffffffffffffffffffffffffffff1682526020808201516affffffffffffffffffffff169083015260409081015160ff16910152565b6020939093019260609290920191600101615964565b602080825282518282018190526000918401906040840190835b8181101561557f5783518352602093840193909201916001016159e1565b600080600060408486031215615a1457600080fd5b83359250602084013567ffffffffffffffff811115615a3257600080fd5b615a3e86828701615843565b9497909650939450505050565b600060208284031215615a5d57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215615aa557600080fd5b815161508e816154fa565b600081518084526020840193506020830160005b828110156157d0578151865260209586019590910190600101615ac4565b838152606060208201526000615afb6060830185615ab0565b9050826040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181036000831280158383131683831282161715615b5a57615b5a615b0b565b5092915050565b600060208284031215615b7357600080fd5b815161508e8161566e565b6affffffffffffffffffffff818116838216019081111561088957610889615b0b565b606081526000615bb46060830186615788565b828103602084015280855180835260208301915060208701925060005b81811015615bfc5783516affffffffffffffffffffff16835260209384019390920191600101615bd1565b505083810360408501528451808252602091820192509085019060005b81811015615c3a57825160ff16845260209384019390920191600101615c19565b5091979650505050505050565b8082018082111561088957610889615b0b565b8181038181111561088957610889615b0b565b808202600082127f800000000000000000000000000000000000000000000000000000000000000084141615615ca557615ca5615b0b565b818105831482151761088957610889615b0b565b808202811582820484141761088957610889615b0b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615d0e57615d0e615cd0565b500490565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b600060208284031215615d7257600080fd5b81516bffffffffffffffffffffffff8116811461508e57600080fd5b60007f80000000000000000000000000000000000000000000000000000000000000008203615dbf57615dbf615b0b565b5060000390565b6001815b6001841115615e0157808504811115615de557615de5615b0b565b6001841615615df357908102905b60019390931c928002615dca565b935093915050565b600082615e1857506001610889565b81615e2557506000610889565b8160018114615e3b5760028114615e4557615e61565b6001915050610889565b60ff841115615e5657615e56615b0b565b50506001821b610889565b5060208310610133831016604e8410600b8410161715615e84575081810a610889565b615eaf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615dc6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615ee157615ee1615b0b565b029392505050565b600061508e8383615e09565b600082615f0457615f04615cd0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615f5857615f58615b0b565b500590565b60ff828116828216039081111561088957610889615b0b565b600061508e60ff841683615e0956fea2646970667358221220b6644c8cb3ddf5ceba791b4935bb4defa438ddcef0ffe0974d2ad89fc15e582864736f6c634300081b0033a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab950000000000000000000000000f688325e86edf0d0da187f436a46c47c8f6cdc3000000000000000000000000f456485775aed3f3a4bbc86d2d461028c2ab3281000000000000000000000000df10be61122b11c89238445783b5b9dbfdde0ebf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000000000000000000000001a36e2eb1c432d0000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000004ccccccccccccc000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f000000000000000000000000000000000000000000266666666666660000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000026666666666666000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000001999999999999a000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000cacd6fd266af91b8aed52accc382b4e165586e290000000000000000000000000000000000000000001999999999999a000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000c5f0f7b66764f6ec8c8dff7ba683102295e164090000000000000000000000000000000000000000001999999999999a00000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000040d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f00000000000000000000000000000000000000000019999999999999ffffffff0000000000000000000000000000000000000000000000000000000000000012