0 txs
0 calls
constructor
constructor(address addressProvider_, address admin_, address emergencyAdmin_, address adminFeeTreasury_, string curatorName_, bool deployGovernor_)
functions
acl
viewfunction acl() view returns (address)
addressProvider
viewfunction addressProvider() view returns (address)
admin
viewfunction admin() view returns (address)
bytecodeRepository
viewfunction bytecodeRepository() view returns (address)
contractsRegister
viewfunction contractsRegister() view returns (address)
contractType
viewfunction contractType() view returns (bytes32)
curatorName
viewfunction curatorName() view returns (string)
emergencyAdmin
viewfunction emergencyAdmin() view returns (address)
getAuthorizedFactory
viewfunction getAuthorizedFactory(address target) view returns (address)
getCreditFactory
viewfunction getCreditFactory(address creditManager) view returns (address)
getFactoryTargets
viewfunction getFactoryTargets(address factory, address suite) view returns (address[])
getMarketFactories
viewfunction getMarketFactories(address pool) view returns (tuple)
getPeripheryContracts
viewfunction getPeripheryContracts(bytes32 domain) view returns (address[])
isPeripheryContract
viewfunction isPeripheryContract(bytes32 domain, address peripheryContract) view returns (bool)
previewCreateCreditSuite
viewfunction previewCreateCreditSuite(uint256 marketMinorVersion, uint256 creditSuiteMinorVersion, address underlying, string name, string symbol, bytes encodedParams) view returns (address)
previewCreateCreditSuite
viewfunction previewCreateCreditSuite(uint256 minorVersion, address pool, bytes encodedParams) view returns (address)
previewCreateMarket
viewfunction previewCreateMarket(uint256 minorVersion, address underlying, string name, string symbol) view returns (address)
treasury
viewfunction treasury() view returns (address)
version
viewfunction version() view returns (uint256)
addPeripheryContract
nonpayablefunction addPeripheryContract(address peripheryContract)
addToken
nonpayablefunction addToken(address pool, address token, address priceFeed)
authorizeFactory
nonpayablefunction authorizeFactory(address factory, address suite, address target)
configureCreditSuite
nonpayablefunction configureCreditSuite(address creditManager, bytes data)
configureInterestRateModel
nonpayablefunction configureInterestRateModel(address pool, bytes data)
configureLossPolicy
nonpayablefunction configureLossPolicy(address pool, bytes data)
configurePool
nonpayablefunction configurePool(address pool, bytes data)
configurePriceOracle
nonpayablefunction configurePriceOracle(address pool, bytes data)
configureRateKeeper
nonpayablefunction configureRateKeeper(address pool, bytes data)
createCreditSuite
nonpayablefunction createCreditSuite(uint256 minorVersion, address pool, bytes encodedParams) returns (address creditManager)
createMarket
nonpayablefunction createMarket(uint256 minorVersion, address underlying, string name, string symbol, tuple interestRateModelParams, tuple rateKeeperParams, tuple lossPolicyParams, address underlyingPriceFeed) returns (address pool)
emergencyConfigureCreditSuite
nonpayablefunction emergencyConfigureCreditSuite(address creditManager, bytes data)
emergencyConfigureInterestRateModel
nonpayablefunction emergencyConfigureInterestRateModel(address pool, bytes data)
emergencyConfigureLossPolicy
nonpayablefunction emergencyConfigureLossPolicy(address pool, bytes data)
emergencyConfigurePool
nonpayablefunction emergencyConfigurePool(address pool, bytes data)
emergencyConfigurePriceOracle
nonpayablefunction emergencyConfigurePriceOracle(address pool, bytes data)
emergencyConfigureRateKeeper
nonpayablefunction emergencyConfigureRateKeeper(address pool, bytes data)
emergencyRevokeRole
nonpayablefunction emergencyRevokeRole(bytes32 role, address account)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
removePeripheryContract
nonpayablefunction removePeripheryContract(address peripheryContract)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setEmergencyAdmin
nonpayablefunction setEmergencyAdmin(address newEmergencyAdmin)
shutdownCreditSuite
nonpayablefunction shutdownCreditSuite(address creditManager)
shutdownMarket
nonpayablefunction shutdownMarket(address pool)
unauthorizeFactory
nonpayablefunction unauthorizeFactory(address factory, address suite, address target)
updateInterestRateModel
nonpayablefunction updateInterestRateModel(address pool, tuple params) returns (address interestRateModel)
updateLossPolicy
nonpayablefunction updateLossPolicy(address pool, tuple params) returns (address lossPolicy)
updatePriceOracle
nonpayablefunction updatePriceOracle(address pool) returns (address priceOracle)
updateRateKeeper
nonpayablefunction updateRateKeeper(address pool, tuple params) returns (address rateKeeper)
upgradeCreditFactory
nonpayablefunction upgradeCreditFactory(address creditManager)
upgradeInterestRateModelFactory
nonpayablefunction upgradeInterestRateModelFactory(address pool)
upgradeLossPolicyFactory
nonpayablefunction upgradeLossPolicyFactory(address pool)
upgradePoolFactory
nonpayablefunction upgradePoolFactory(address pool)
upgradePriceOracleFactory
nonpayablefunction upgradePriceOracleFactory(address pool)
upgradeRateKeeperFactory
nonpayablefunction upgradeRateKeeperFactory(address pool)
events
AddPeripheryContract
event AddPeripheryContract(bytes32 indexed domain, address indexed peripheryContract)
AddToken
event AddToken(address indexed pool, address indexed token)
AuthorizeFactory
event AuthorizeFactory(address indexed factory, address indexed suite, address indexed target)
ConfigureCreditSuite
event ConfigureCreditSuite(address indexed creditManager, bytes data)
ConfigureInterestRateModel
event ConfigureInterestRateModel(address indexed pool, bytes data)
ConfigureLossPolicy
event ConfigureLossPolicy(address indexed pool, bytes data)
ConfigurePool
event ConfigurePool(address indexed pool, bytes data)
ConfigurePriceOracle
event ConfigurePriceOracle(address indexed pool, bytes data)
ConfigureRateKeeper
event ConfigureRateKeeper(address indexed pool, bytes data)
CreateCreditSuite
event CreateCreditSuite(address indexed creditManager, address factory)
CreateMarket
event CreateMarket(address indexed pool, address priceOracle, address interestRateModel, address rateKeeper, address lossPolicy, (address poolFactory, address priceOracleFactory, address interestRateModelFactory, address rateKeeperFactory, address lossPolicyFactory) factories)
EmergencyConfigureCreditSuite
event EmergencyConfigureCreditSuite(address indexed creditManager, bytes data)
EmergencyConfigureInterestRateModel
event EmergencyConfigureInterestRateModel(address indexed pool, bytes data)
EmergencyConfigureLossPolicy
event EmergencyConfigureLossPolicy(address indexed pool, bytes data)
EmergencyConfigurePool
event EmergencyConfigurePool(address indexed pool, bytes data)
EmergencyConfigurePriceOracle
event EmergencyConfigurePriceOracle(address indexed pool, bytes data)
EmergencyConfigureRateKeeper
event EmergencyConfigureRateKeeper(address indexed pool, bytes data)
EmergencyRevokeRole
event EmergencyRevokeRole(bytes32 indexed role, address indexed account)
ExecuteHook
event ExecuteHook(address indexed target, bytes callData)
GrantRole
event GrantRole(bytes32 indexed role, address indexed account)
RemovePeripheryContract
event RemovePeripheryContract(bytes32 indexed domain, address indexed peripheryContract)
RevokeRole
event RevokeRole(bytes32 indexed role, address indexed account)
SetEmergencyAdmin
event SetEmergencyAdmin(address indexed newEmergencyAdmin)
ShutdownCreditSuite
event ShutdownCreditSuite(address indexed creditManager)
ShutdownMarket
event ShutdownMarket(address indexed pool)
UnauthorizeFactory
event UnauthorizeFactory(address indexed factory, address indexed suite, address indexed target)
UpdateInterestRateModel
event UpdateInterestRateModel(address indexed pool, address interestRateModel)
UpdateLossPolicy
event UpdateLossPolicy(address indexed pool, address lossPolicy)
UpdatePriceOracle
event UpdatePriceOracle(address indexed pool, address priceOracle)
UpdateRateKeeper
event UpdateRateKeeper(address indexed pool, address rateKeeper)
UpgradeCreditFactory
event UpgradeCreditFactory(address indexed creditManager, address factory)
UpgradeInterestRateModelFactory
event UpgradeInterestRateModelFactory(address indexed pool, address factory)
UpgradeLossPolicyFactory
event UpgradeLossPolicyFactory(address indexed pool, address factory)
UpgradePoolFactory
event UpgradePoolFactory(address indexed pool, address factory)
UpgradePriceOracleFactory
event UpgradePriceOracleFactory(address indexed pool, address factory)
UpgradeRateKeeperFactory
event UpgradeRateKeeperFactory(address indexed pool, address factory)
errors
CallerIsNotAdminException
error CallerIsNotAdminException(address caller)
CallerIsNotEmergencyAdminException
error CallerIsNotEmergencyAdminException(address caller)
CallerIsNotSelfException
error CallerIsNotSelfException(address caller)
CreditSuiteNotRegisteredException
error CreditSuiteNotRegisteredException(address creditManager)
ForceApproveFailed
error ForceApproveFailed()
IncorrectMinorVersionException
error IncorrectMinorVersionException(uint256 version)
IncorrectPeripheryContractException
error IncorrectPeripheryContractException(address peripheryContract)
MarketNotRegisteredException
error MarketNotRegisteredException(address pool)
UnauthorizedFactoryException
error UnauthorizedFactoryException(address factory, address target)
creation bytecode
0x61016060405234801562000011575f80fd5b50604051620057613803806200576183398101604081905262000034916200062c565b6001600160a01b038616608052856200006e7f42595445434f44455f5245504f5349544f5259000000000000000000000000005f62000410565b6001600160a01b031660a0525080156200015a57604080516001600160a01b0380881660208301528616918101919091526201518060608201525f6080820181905290620000e2906723a7ab22a92727a960c11b906101369060a0015b60408051601f198184030181529190525f6200048c565b9050806001600160a01b031663d085835a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000121573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200014791906200073c565b6001600160a01b031660c0525062000168565b6001600160a01b03851660c0525b5f80546001600160a01b0319166001600160a01b0386161790556200018d82620004af565b60e05260408051306020820152620001b291621050d360ea1b916101369101620000cb565b6001600160a01b0316610100819052604080516020810192909252620001f4917121a7a72a2920a1aa29afa922a3a4a9aa22a960711b916101369101620000cb565b6001600160a01b03908116610120528316156200026e576080805160c051604080516001600160a01b0393841660208201529183169082015290851660608201526200025b91702a2922a0a9aaa92cafa9a82624aa2a22a960791b916101369101620000cb565b6001600160a01b03166101405262000293565b6200028567545245415355525960c01b5f62000410565b6001600160a01b0316610140525b61010051604051632f2ff15d60e01b81526d2820aaa9a0a12622afa0a226a4a760911b60048201523060248201526001600160a01b0390911690632f2ff15d906044015f604051808303815f87803b158015620002ee575f80fd5b505af115801562000301573d5f803e3d5ffd5b505061010051604051632f2ff15d60e01b81526f2aa72820aaa9a0a12622afa0a226a4a760811b60048201523060248201526001600160a01b039091169250632f2ff15d91506044015f604051808303815f87803b15801562000362575f80fd5b505af115801562000375573d5f803e3d5ffd5b50506040516001600160a01b03871692507fb72d36542c9b761c0d9b215bddd7b59c055dd4fb2f6c5da22e964720458ddff191505f90a260405130906d2820aaa9a0a12622afa0a226a4a760911b905f8051602062005741833981519152905f90a360405130906f2aa72820aaa9a0a12622afa0a226a4a760811b905f8051602062005741833981519152905f90a3505050505050620007ba565b608051604051632bdad0e360e11b815260048101849052602481018390525f916001600160a01b0316906357b5a1c690604401602060405180830381865afa1580156200045f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048591906200073c565b9392505050565b5f620004a6856200049e8187620004d8565b85856200054d565b95945050505050565b805160218110620004c75763ec92f9a35f526004601cfd5b9081015160209190910360031b1b90565b60a051604051632677fb8760e11b815260048101849052602481018390525f916001600160a01b031690634ceff70e90604401602060405180830381865afa15801562000527573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000485919062000758565b60a051604051635ce8938f60e01b81525f916001600160a01b031690635ce8938f906200058590889088908890889060040162000770565b6020604051808303815f875af1158015620005a2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a691906200073c565b80516001600160a01b0381168114620005df575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b8381101562000614578181015183820152602001620005fa565b50505f910152565b80518015158114620005df575f80fd5b5f805f805f8060c0878903121562000642575f80fd5b6200064d87620005c8565b95506200065d60208801620005c8565b94506200066d60408801620005c8565b93506200067d60608801620005c8565b60808801519093506001600160401b03808211156200069a575f80fd5b818901915089601f830112620006ae575f80fd5b815181811115620006c357620006c3620005e4565b604051601f8201601f19908116603f01168101908382118183101715620006ee57620006ee620005e4565b816040528281528c602084870101111562000707575f80fd5b6200071a836020830160208801620005f8565b80965050505050506200073060a088016200061c565b90509295509295509295565b5f602082840312156200074d575f80fd5b6200048582620005c8565b5f6020828403121562000769575f80fd5b5051919050565b848152836020820152608060408201525f83518060808401526200079c8160a0850160208801620005f8565b606083019390935250601f91909101601f19160160a0019392505050565b60805160a05160c05160e051610100516101205161014051614eb76200088a5f395f61061301525f818161068501528181610f550152818161111201528181611304015281816113dc0152818161162701528181611f1601528181611fef01528181612eaa015281816130b30152818161327c0152818161330e01526135ab01525f8181610821015281816134780152613a7401525f61256201525f81816108ac01526129eb01525f81816105ec01526118b501525f818161049101528181613b950152613f860152614eb75ff3fe608060405234801561000f575f80fd5b5060043610610351575f3560e01c80636f128dd1116101be578063c72066fd116100fe578063de2873591161009e578063f703f46011610079578063f703f46014610869578063f74c5d551461087c578063f851a440146108a7578063fefdcfa0146108ce575f80fd5b8063de2873591461081c578063e871001b14610843578063efe4edbb14610856575f80fd5b8063cb2ef6f7116100d9578063cb2ef6f7146107bd578063d2c6cd71146107e3578063d547741f146107f6578063d93d294414610809575f80fd5b8063c72066fd14610782578063c9470abd14610795578063c95ba647146107aa575f80fd5b8063a37ec02811610169578063bb7cca3711610144578063bb7cca3714610736578063bbb399b614610749578063c6dc3eba1461075c578063c6e85b3b1461076f575f80fd5b8063a37ec028146106ed578063add2081914610710578063b09e964114610723575f80fd5b806381e5f1d31161019957806381e5f1d3146106a75780639e1b1bdc146106ba5780639e40fdbb146106da575f80fd5b80636f128dd11461065b57806370905dce1461066e5780637a0c7b2114610680575f80fd5b80633cb904a41161029457806354fd4d501161023457806360e93cfd1161020f57806360e93cfd146105e757806361d027b31461060e57806363197bd214610635578063645eca3014610648575f80fd5b806354fd4d50146105af578063550e0099146105c157806360b0281c146105d4575f80fd5b80634467ee1c1161026f5780634467ee1c1461056357806347c5cf8c146105765780634e9e91f7146105895780634efd1b7c1461059c575f80fd5b80633cb904a4146105125780634166d4481461053d57806342c49b9914610550575f80fd5b806327576f00116102ff5780632f2ff15d116102da5780632f2ff15d146104c657806333598cf2146104d957806335da3394146104ec57806339d1fc82146104ff575f80fd5b806327576f00146104795780632954018c1461048c5780632bf34f79146104b3575f80fd5b806317739c171161032f57806317739c17146104405780631bdcbfea14610453578063224645b214610466575f80fd5b80630575e399146103555780630ea26992146103855780630ff9017b1461039a575b5f80fd5b6103686103633660046143d0565b6108e1565b6040516001600160a01b0390911681526020015b60405180910390f35b6103986103933660046144cd565b610afc565b005b6104336103a8366004614515565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506001600160a01b039081165f90815260026020818152604092839020835160a08101855281548616815260018201548616928101929092529182015484169281019290925260038101548316606083015260040154909116608082015290565b60405161037c9190614530565b61036861044e36600461457c565b610b87565b6103686104613660046145d4565b610c97565b610398610474366004614515565b610e44565b61039861048736600461468d565b610fe4565b6103687f000000000000000000000000000000000000000000000000000000000000000081565b6103986104c1366004614515565b611065565b6103986104d43660046146de565b6111a0565b6103986104e73660046144cd565b6111eb565b6103986104fa366004614515565b61126c565b61036861050d366004614515565b6112d0565b610368610520366004614515565b6001600160a01b039081165f908152600360205260409020541690565b61036861054b36600461457c565b61158a565b61039861055e366004614515565b6116fe565b61036861057136600461470c565b6117ca565b610398610584366004614515565b611875565b610368610597366004614792565b6119a9565b6103986105aa366004614515565b611ab1565b6101365b60405190815260200161037c565b6103986105cf366004614515565b611b7a565b6103986105e236600461468d565b611c44565b6103687f000000000000000000000000000000000000000000000000000000000000000081565b6103687f000000000000000000000000000000000000000000000000000000000000000081565b61039861064336600461468d565b611cba565b61039861065636600461468d565b611d2d565b61039861066936600461468d565b611da3565b5f54610368906001600160a01b031681565b6103687f000000000000000000000000000000000000000000000000000000000000000081565b6103986106b536600461468d565b611e1a565b6106cd6106c83660046147df565b611e90565b60405161037c919061480b565b6103686106e8366004614792565b611ec9565b6107006106fb3660046146de565b61219e565b604051901515815260200161037c565b61039861071e36600461468d565b6121b5565b610398610731366004614515565b612228565b61039861074436600461468d565b612292565b61039861075736600461468d565b612305565b61039861076a3660046146de565b61237c565b61039861077d3660046144cd565b6123c7565b610398610790366004614515565b612492565b61079d61255b565b60405161037c91906148a4565b6103986107b8366004614515565b61258b565b7f4d41524b45545f434f4e464947555241544f52000000000000000000000000006105b3565b6103986107f136600461468d565b612654565b6103986108043660046146de565b6126ca565b610368610817366004614792565b612715565b6103687f000000000000000000000000000000000000000000000000000000000000000081565b610398610851366004614515565b612818565b61039861086436600461468d565b6128db565b61039861087736600461468d565b612951565b61036861088a366004614515565b6001600160a01b039081165f908152600460205260409020541690565b6103687f000000000000000000000000000000000000000000000000000000000000000081565b6106cd6108dc3660046148b6565b6129c7565b5f6108ea6129e0565b5f6108f48c612a46565b805190915061090f906001600160a01b038d16905f19612bc4565b805161091f908c8c8c8c8c612c41565b8151909250610939906001600160a01b038d16905f612bc4565b5f610948826020015184612cd5565b90505f61095a8360400151858a612d75565b90505f61096c8460600151868a612e02565b90505f61097e8560800151878a612e32565b6001600160a01b038088165f908152600260208181526040928390208a5181549086166001600160a01b0319918216178255918b0151600182018054918716918416919091179055928a015191830180549285169282169290921790915560608901516003830180549185169183169190911790556080890151600490920180549290931691161790559050610a15868583612e62565b6040516001600160a01b03808816602483015280861660448301528085166064830152808416608483015280831660a4830152881660c4820152610aa090879060e40160408051601f198184030181529190526020810180516001600160e01b03167f224b5eea00000000000000000000000000000000000000000000000000000000179052612f06565b856001600160a01b03167fd4c63178fe1be255e4c15de48bbb8172b923add340c147ca04435c02b714fdd5858585858a604051610ae19594939291906148cd565b60405180910390a250505050509a9950505050505050505050565b610b04612fa8565b6001600160a01b038181165f908152600460205260409020541615610b82576001600160a01b038181165f90815260046020526040902054811690841614610b7757604051635e2262c360e01b81526001600160a01b038085166004830152821660248201526044015b60405180910390fd5b610b82838383612fe3565b505050565b5f610b906129e0565b83610b9a8161307b565b5f610ba48761315d565b9050610bb2818787876131b6565b6001600160a01b038181165f90815260036020526040902080546001600160a01b0319169184169190911790559250610bea83613244565b6040516001600160a01b0384166024820152610c4d90879060440160408051601f198184030181529190526020810180516001600160e01b03167f8e6a882300000000000000000000000000000000000000000000000000000000179052612f06565b6040516001600160a01b0382811682528416907f2cb14361df9c64ed7b9c30bb2c8cbb7ee632996fde46bea11ed0f10aa8f10a209060200160405180910390a25050949350505050565b5f80610ca28b612a46565b90505f815f01516001600160a01b0316639bbf5a23308c8c8c8c8c6040518763ffffffff1660e01b8152600401610cde96959493929190614969565b602060405180830381865afa158015610cf9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1d91906149b5565b60208301516040517f6b923e4f0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0380841660248301529293505f9290911690636b923e4f90604401602060405180830381865afa158015610d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf91906149b5565b90505f610dbb8d61315d565b9050806001600160a01b0316639e6c0a8a30858f868c8c6040518763ffffffff1660e01b8152600401610df3969594939291906149d0565b602060405180830381865afa158015610e0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3291906149b5565b9e9d5050505050505050505050505050565b610e4c6129e0565b80610e56816132d6565b5f826001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb791906149b5565b6040516001600160a01b0385166024820152909150610f1d90829060440160408051601f198184030181529190526020810180516001600160e01b03167f61aa853d00000000000000000000000000000000000000000000000000000000179052612f06565b6040517f224645b20000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063224645b2906024015f604051808303815f87803b158015610f96575f80fd5b505af1158015610fa8573d5f803e3d5ffd5b50506040516001600160a01b03861692507f2bc01979eee9eed241cc186b8d1ff1150e323ab5f1270f4390d629fe48b9ccf591505f90a2505050565b610fec6129e0565b82610ff6816132d6565b6001600160a01b038085165f9081526003602052604090205461101c91168585856133b8565b836001600160a01b03167f8c5e2fcf6e360a39515a02a55edbcbb7e630d18ebf5bc69928284ce16b847d3e8484604051611057929190614a18565b60405180910390a250505050565b61106d6129e0565b806110778161307b565b6040516001600160a01b03831660248201526110da90839060440160408051601f198184030181529190526020810180516001600160e01b03167f2a82d9e500000000000000000000000000000000000000000000000000000000179052612f06565b6040517f2bf34f790000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690632bf34f79906024015f604051808303815f87803b158015611153575f80fd5b505af1158015611165573d5f803e3d5ffd5b50506040516001600160a01b03851692507f1b7c24f2ead81c62605e322c9fae410f0b635385a1102efc72915f0dbbfcaa1891505f90a25050565b6111a86129e0565b6111b28282613439565b6040516001600160a01b0382169083907f5a06360d65acf95e98445dc834f205063424c636e65418d928cdfabc33a95399905f90a35050565b6111f3612fa8565b6001600160a01b038181165f90815260046020526040902054811690841614610b82576001600160a01b038181165f90815260046020526040902054161561126157604051635e2262c360e01b81526001600160a01b03808516600483015282166024820152604401610b6e565b610b828383836134d4565b6112746129e0565b5f546001600160a01b038281169116146112cd575f80546001600160a01b0319166001600160a01b038316908117825560405190917fb72d36542c9b761c0d9b215bddd7b59c055dd4fb2f6c5da22e964720458ddff191a25b50565b5f6112d96129e0565b816112e38161307b565b604051632b7746f160e01b81526001600160a01b0384811660048301525f917f000000000000000000000000000000000000000000000000000000000000000090911690632b7746f190602401602060405180830381865afa15801561134b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136f91906149b5565b6001600160a01b038086165f90815260026020526040902060010154919250611399911685612cd5565b6040517f67a74ddc0000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015280831660248301529194507f0000000000000000000000000000000000000000000000000000000000000000909116906367a74ddc906044015f604051808303815f87803b15801561141f575f80fd5b505af1158015611431573d5f803e3d5ffd5b50506040516001600160a01b03808816602483015280871660448301528416606482015261148f925086915060840160408051601f198184030181529190526020810180516001600160e01b0316634abf9f5960e01b179052612f06565b5f61149985613570565b80519091505f5b81811015611540575f8382815181106114bb576114bb614a2b565b6020908102919091018101516001600160a01b038082165f818152600390945260409384902054935160248101919091528a82166044820152888216606482015291935061153792169060840160408051601f198184030181529190526020810180516001600160e01b0316634abf9f5960e01b179052613618565b506001016114a0565b506040516001600160a01b0386811682528716907ff3920b145a63851522088bd18b14d6bb919fbd12ac87f12498d6001c727ba0709060200160405180910390a250505050919050565b5f806115958661315d565b9050806001600160a01b0316639e6c0a8a3087886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160891906149b5565b604051632b7746f160e01b81526001600160a01b038b811660048301527f00000000000000000000000000000000000000000000000000000000000000001690632b7746f190602401602060405180830381865afa15801561166c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169091906149b5565b89896040518763ffffffff1660e01b81526004016116b3969594939291906149d0565b602060405180830381865afa1580156116ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f291906149b5565b9150505b949350505050565b6117066129e0565b6001600160a01b038082165f908152600360205260408120549091169061172c82613642565b9050816001600160a01b0316816001600160a01b03160361174c57505050565b6001600160a01b038381165f90815260036020526040902080546001600160a01b03191691831691909117905561178482828561370b565b6040516001600160a01b0382811682528416907fe6ea56a1ac19cd9f548232a4fbf2cb6fbc21227f96d196f4b071ad1628c7e9a2906020015b60405180910390a2505050565b5f806117d588612a46565b80516040517f9bbf5a230000000000000000000000000000000000000000000000000000000081529192506001600160a01b031690639bbf5a23906118289030908b908b908b908b908b90600401614969565b602060405180830381865afa158015611843573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186791906149b5565b9150505b9695505050505050565b61187d6129e0565b6040517f55b8fcfd0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906355b8fcfd90602401602060405180830381865afa1580156118fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061191e9190614a3f565b6119465760405163133f503560e11b81526001600160a01b0382166004820152602401610b6e565b5f61195082613875565b5f81815260016020526040902090915061196a9083613906565b156119a5576040516001600160a01b0383169082907f10c19707878b54b0e01d1d28cd614e1484583e878503b81a451cdd082d21e17d905f90a35b5050565b5f6119b26129e0565b826119bc8161307b565b5f6119c68561391a565b6001600160a01b038087165f90815260026020819052604090912001549192506119f291168686612d75565b6040516001600160a01b038088166024830152808316604483015283166064820152909350611a6890869060840160408051601f198184030181529190526020810180516001600160e01b03167f25680c1b00000000000000000000000000000000000000000000000000000000179052612f06565b6040516001600160a01b0384811682528616907f36ce6f74538cfc9dfd2728d77155bbf35982d3c36253e5047dcaedb7d3737080906020015b60405180910390a2505092915050565b611ab96129e0565b6001600160a01b038082165f9081526002602052604081206001015490911690611ae282613642565b9050816001600160a01b0316816001600160a01b031603611b0257505050565b6001600160a01b038381165f90815260026020526040902060010180546001600160a01b031916918316919091179055611b3d82828561370b565b6040516001600160a01b0382811682528416907fa5fb736b562626391dbf66fe13c881c43f570b84713db3e70da0176503575576906020016117bd565b611b826129e0565b6001600160a01b038082165f9081526002602081905260408220015490911690611bab82613642565b9050816001600160a01b0316816001600160a01b031603611bcb57505050565b6001600160a01b038381165f9081526002602081905260409091200180546001600160a01b031916918316919091179055611c0782828561370b565b6040516001600160a01b0382811682528416907f5bc14bfd736ce1d2f4e89fe36fe76b5865012a1f61e2a6070ba8887136517454906020016117bd565b611c4c61397b565b82611c568161307b565b6001600160a01b038085165f90815260026020526040902060040154611c7f91168585856139c0565b836001600160a01b03167f293990abe8f453092315c37a7814d57536cff16325ac77e786ae2b69d251c6f98484604051611057929190614a18565b611cc26129e0565b82611ccc8161307b565b6001600160a01b038085165f90815260026020526040902054611cf291168585856133b8565b836001600160a01b03167f46490cebb0506768fd32a3d9cddf62c80bcf7b3802661660b78d2c6c2b11650d8484604051611057929190614a18565b611d3561397b565b82611d3f8161307b565b6001600160a01b038085165f90815260026020526040902060030154611d6891168585856139c0565b836001600160a01b03167f52773f95abd8e2fcd549574b3fa813af1fa696af620004f6d5bbd8272bc27c178484604051611057929190614a18565b611dab61397b565b82611db58161307b565b6001600160a01b038085165f9081526002602081905260409091200154611ddf91168585856139c0565b836001600160a01b03167f4ea61021aebbcc3b4c6854cdfb1221083212bba7be612745c09fb27fb94c20f48484604051611057929190614a18565b611e226129e0565b82611e2c8161307b565b6001600160a01b038085165f90815260026020526040902060010154611e5591168585856133b8565b836001600160a01b03167fc5263e70c0df98b1c8575480db440fbe3dc39e9160e9419c78212666b8b6bc4c8484604051611057929190614a18565b6001600160a01b038083165f908152600560209081526040808320938516835292905220606090611ec0906139f4565b90505b92915050565b5f611ed26129e0565b82611edc8161307b565b6040517f7db0dc190000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301525f917f000000000000000000000000000000000000000000000000000000000000000090911690637db0dc1990602401602060405180830381865afa158015611f5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8191906149b5565b6001600160a01b038087165f90815260026020526040902060040154919250611fac91168686612e32565b6040517f1d0a7db50000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015280831660248301529194507f000000000000000000000000000000000000000000000000000000000000000090911690631d0a7db5906044015f604051808303815f87803b158015612032575f80fd5b505af1158015612044573d5f803e3d5ffd5b50506040516001600160a01b0380891660248301528087166044830152841660648201526120a2925087915060840160408051601f198184030181529190526020810180516001600160e01b0316631177eee560e01b179052612f06565b5f6120ac86613570565b80519091505f5b81811015612153575f8382815181106120ce576120ce614a2b565b6020908102919091018101516001600160a01b038082165f818152600390945260409384902054935160248101919091528a82166044820152888216606482015291935061214a92169060840160408051601f198184030181529190526020810180516001600160e01b0316631177eee560e01b179052613618565b506001016120b3565b506040516001600160a01b0386811682528816907f5e8c6fce5dfc5d760fb2e3fea3b10e6196cf13145562bee81d212e8baafb4fbe9060200160405180910390a25050505092915050565b5f828152600160205260408120611ec09083613a00565b6121bd61397b565b826121c7816132d6565b6001600160a01b038085165f908152600360205260409020546121ed91168585856139c0565b836001600160a01b03167f94d131f70a318dbd3284630c3e3b21d9dfc4032c49116dce0f10102cfd19413d8484604051611057929190614a18565b6122306129e0565b5f61223a82613875565b5f8181526001602052604090209091506122549083613a21565b156119a5576040516001600160a01b0383169082907fec43e60d17189909903699ba2cfc620f4e1a3b285603053259c7553dfe3eea86905f90a35050565b61229a61397b565b826122a48161307b565b6001600160a01b038085165f908152600260205260409020546122ca91168585856139c0565b836001600160a01b03167f181f03b2aa11d5a5af6208dbbcaa79aa340b74b09e07a76c42d651410d5623618484604051611057929190614a18565b61230d6129e0565b826123178161307b565b6001600160a01b038085165f908152600260208190526040909120015461234191168585856133b8565b836001600160a01b03167fa20ef4e4f1dd58ef50f66ed78777eedae02674b3814b2ec7d605eefe2e88bcba8484604051611057929190614a18565b61238461397b565b61238e8282613a35565b6040516001600160a01b0382169083907f87fef4a44683e784456954ceb17a029cd67372393e34132d476a58578d35815c905f90a35050565b6123cf6129e0565b826123d98161307b565b6040516001600160a01b03808616602483015280851660448301528316606482015261244c90859060840160408051601f198184030181529190526020810180516001600160e01b03167fd271bc5b00000000000000000000000000000000000000000000000000000000179052612f06565b826001600160a01b0316846001600160a01b03167fdbf34b45b47a653cf4940cccbec765f72d4d63de3237306905bfc0ee2883236260405160405180910390a350505050565b61249a6129e0565b6001600160a01b038082165f90815260026020526040812060040154909116906124c382613642565b9050816001600160a01b0316816001600160a01b0316036124e357505050565b6001600160a01b038381165f90815260026020526040902060040180546001600160a01b03191691831691909117905561251e82828561370b565b6040516001600160a01b0382811682528416907f9c14c6e9a46591914230bd12f1ea2be8a5a2f000b7896c292cfc1a5e4f6f3478906020016117bd565b60606125867f0000000000000000000000000000000000000000000000000000000000000000613aa3565b905090565b6125936129e0565b6001600160a01b038082165f90815260026020526040812060030154909116906125bc82613642565b9050816001600160a01b0316816001600160a01b0316036125dc57505050565b6001600160a01b038381165f90815260026020526040902060030180546001600160a01b03191691831691909117905561261782828561370b565b6040516001600160a01b0382811682528416907fda957fe9722d9ef79195b2132c792e5cfcc3334550625c406f2f22074d28e315906020016117bd565b61265c6129e0565b826126668161307b565b6001600160a01b038085165f9081526002602052604090206003015461268f91168585856133b8565b836001600160a01b03167f0f8cbddf882f380985b7048a1d1bd023f5890b31607c61b66ae11a4b1180ee128484604051611057929190614a18565b6126d26129e0565b6126dc8282613a35565b6040516001600160a01b0382169083907f76e6093c136cd7faa5a6d92b2b633f3b4595abd4a529b7a13917398355fea694905f90a35050565b5f61271e6129e0565b826127288161307b565b5f61273a61273586613ad5565b613b12565b6001600160a01b038087165f9081526002602052604090206003015491925061276591168686612e02565b6040516001600160a01b0380881660248301528083166044830152831660648201529093506127db90869060840160408051601f198184030181529190526020810180516001600160e01b03167f7f85c18100000000000000000000000000000000000000000000000000000000179052612f06565b6040516001600160a01b0384811682528616907f29dc5a72e864993c429459cac11a6bad326bf67eb5f4c236c4352e9d9d4db0b690602001611aa1565b6128206129e0565b6001600160a01b038082165f908152600260205260408120549091169061284682613642565b9050816001600160a01b0316816001600160a01b03160361286657505050565b6001600160a01b038381165f90815260026020526040902080546001600160a01b03191691831691909117905561289e82828561370b565b6040516001600160a01b0382811682528416907febaea4d40bedec30db2b1b2e8c6b0ebc149838c35a74b13a89bf37564bcd53d8906020016117bd565b6128e361397b565b826128ed8161307b565b6001600160a01b038085165f9081526002602052604090206001015461291691168585856139c0565b836001600160a01b03167f75d6d8abc74c1025658838af1e98e3a175dd8162948f4538a0a5e87446a5554f8484604051611057929190614a18565b6129596129e0565b826129638161307b565b6001600160a01b038085165f9081526002602052604090206004015461298c91168585856133b8565b836001600160a01b03167f19e3539ec91ba6f786b6eadb2075d8a93031455e014c43339a4cea0cdbeb6d4f8484604051611057929190614a18565b5f818152600160205260409020606090611ec3906139f4565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612a44576040517f4a30c348000000000000000000000000000000000000000000000000000000008152336004820152602401610b6e565b565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152612a7b606483614a5e565b600314612a9e57604051633abd154560e11b815260048101839052602401610b6e565b6040518060a00160405280612ad37f504f4f4c5f464143544f5259000000000000000000000000000000000000000085613b4f565b6001600160a01b03168152602001612b0b7f50524943455f4f5241434c455f464143544f525900000000000000000000000085613b4f565b6001600160a01b03168152602001612b437f494e5445524553545f524154455f4d4f44454c5f464143544f5259000000000085613b4f565b6001600160a01b03168152602001612b7b7f524154455f4b45455045525f464143544f52590000000000000000000000000085613b4f565b6001600160a01b03168152602001612bb37f4c4f53535f504f4c4943595f464143544f52590000000000000000000000000085613b4f565b6001600160a01b0316905292915050565b612bd78363095ea7b360e01b8484613c03565b610b8257612bee8363095ea7b360e01b845f613c03565b1580612c0a5750612c088363095ea7b360e01b8484613c03565b155b15610b82576040517f19be9a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80876001600160a01b031663fa9ab97d88888888886040518663ffffffff1660e01b8152600401612c77959493929190614a7d565b5f604051808303815f875af1158015612c92573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612cb99190810190614c69565b9050612cc9888260200151613c51565b51979650505050505050565b6040517f727a01de0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301525f91829185169063727a01de906024015f604051808303815f875af1158015612d36573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d5d9190810190614c69565b9050612d6d848260200151613c51565b519392505050565b5f80846001600160a01b031663d7f8763585856040518363ffffffff1660e01b8152600401612da5929190614ce4565b5f604051808303815f875af1158015612dc0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612de79190810190614c69565b9050612df7858260200151613c51565b5190505b9392505050565b5f80846001600160a01b0316633b79070085856040518363ffffffff1660e01b8152600401612da5929190614ce4565b5f80846001600160a01b0316638d94c20685856040518363ffffffff1660e01b8152600401612da5929190614ce4565b6040517fd2a422680000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152838116602483015282811660448301527f0000000000000000000000000000000000000000000000000000000000000000169063d2a42268906064015f604051808303815f87803b158015612eeb575f80fd5b505af1158015612efd573d5f803e3d5ffd5b50505050505050565b6001600160a01b038083165f90815260026020818152604092839020835160a081018552815486168082526001830154871693820193909352928101548516938301939093526003830154841660608301526004909201549092166080830152612f709083613618565b612f7e816020015183613618565b612f8c816040015183613618565b612f9a816060015183613618565b610b82816080015183613618565b333014612a44576040517f93552b32000000000000000000000000000000000000000000000000000000008152336004820152602401610b6e565b6001600160a01b038082165f90815260046020908152604080832080546001600160a01b031916905586841683526005825280832093861683529290522061302b9082613a21565b50806001600160a01b0316826001600160a01b0316846001600160a01b03167f79167400a1c299e7a7147ee6c127c299bda038b453c16e0b87954deb0c88ef0260405160405180910390a4505050565b6040517f5b16ebb70000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690635b16ebb790602401602060405180830381865afa1580156130f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061311c9190614a3f565b6112cd576040517f419a73d10000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610b6e565b5f613169606483614a5e565b60031461318c57604051633abd154560e11b815260048101839052602401610b6e565b611ec37f4352454449545f464143544f525900000000000000000000000000000000000083613b4f565b5f80856001600160a01b0316632e2ba0b08686866040518463ffffffff1660e01b81526004016131e893929190614d5e565b5f604051808303815f875af1158015613203573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261322a9190810190614c69565b905061323a868260200151613c51565b5195945050505050565b6040517f8c6df57d0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690638c6df57d906024015f604051808303815f87803b1580156132bd575f80fd5b505af11580156132cf573d5f803e3d5ffd5b5050505050565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613353573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133779190614a3f565b6112cd576040517fbbc9c2870000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610b6e565b61343384856001600160a01b031663f605bf6c8686866040518463ffffffff1660e01b81526004016133ec93929190614d5e565b5f604051808303815f875af1158015613407573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261342e9190810190614d89565b613c51565b50505050565b6040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0382811660248301527f00000000000000000000000000000000000000000000000000000000000000001690632f2ff15d906044015b5f604051808303815f87803b1580156134ba575f80fd5b505af11580156134cc573d5f803e3d5ffd5b505050505050565b6001600160a01b038181165f90815260046020908152604080832080546001600160a01b0319168886169081179091558352600582528083209386168352929052206135209082613906565b50806001600160a01b0316826001600160a01b0316846001600160a01b03167f061c91c2d57e312cfac078f33ef9192ef9930a1c53dd9234fb43ae0bb096932960405160405180910390a4505050565b6040517f3526b1340000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526060917f000000000000000000000000000000000000000000000000000000000000000090911690633526b134906024015f60405180830381865afa1580156135f1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ec39190810190614dbb565b6119a58261362f6001600160a01b03821684613d07565b80602001905181019061342e9190614d89565b5f611ec3826001600160a01b031663cb2ef6f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613682573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136a69190614e45565b836001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137069190614e45565b613b4f565b6001600160a01b038084165f908152600560209081526040808320938516835292905290812061373a906139f4565b80519091505f5b818110156134cc575f83828151811061375c5761375c614a2b565b6020908102919091018101516001600160a01b03808a165f908152600584526040808220928a168252919093529091209091506137999082613a21565b506001600160a01b038087165f9081526005602090815260408083209389168352929052206137c89082613906565b506001600160a01b038181165f8181526004602052604080822080546001600160a01b0319168b861617905551919288811692908b16917f79167400a1c299e7a7147ee6c127c299bda038b453c16e0b87954deb0c88ef0291a4806001600160a01b0316856001600160a01b0316876001600160a01b03167f061c91c2d57e312cfac078f33ef9192ef9930a1c53dd9234fb43ae0bb096932960405160405180910390a450600101613741565b5f816001600160a01b031663cb2ef6f76040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156138d0575060408051601f3d908101601f191682019092526138cd91810190614e45565b60015b6138f85760405163133f503560e11b81526001600160a01b0383166004820152602401610b6e565b612dfb81613d4a565b919050565b5f611ec0836001600160a01b038416613dc6565b5f816001600160a01b031663f3fdb15a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613957573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec391906149b5565b5f546001600160a01b03163314612a44576040517f946c1220000000000000000000000000000000000000000000000000000000008152336004820152602401610b6e565b61343384856001600160a01b031663b3e035b28686866040518463ffffffff1660e01b81526004016133ec93929190614d5e565b60605f612dfb83613e12565b6001600160a01b0381165f9081526001830160205260408120541515611ec0565b5f611ec0836001600160a01b038416613e6b565b6040517fd547741f000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063d547741f906044016134a3565b6040515f5b82811a15613ab857600101613aa8565b808252602082018381525f82820152505060408101604052919050565b5f816001600160a01b031663be8da14b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613957573d5f803e3d5ffd5b5f816001600160a01b031663a6f19c846040518163ffffffff1660e01b8152600401602060405180830381865afa158015613957573d5f803e3d5ffd5b6040517f4ceff70e00000000000000000000000000000000000000000000000000000000815260048101839052602481018290525f90611ec09084906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634ceff70e90604401602060405180830381865afa158015613bda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bfe9190614e45565b613f4e565b5f60405184815283600482015282602482015260205f6044835f8a5af191505080156116f6573d8015613c415760015f5114601f3d11169150613c48565b5f863b1191505b50949350505050565b80515f5b81811015613433575f838281518110613c7057613c70614a2b565b60200260200101515f015190505f848381518110613c9057613c90614a2b565b6020026020010151602001519050613ca88287613ff7565b613cbb6001600160a01b03831682613d07565b50816001600160a01b03167f36ad087d6fe3529b2913764d0cd035ab37318bff69856045e4056218164c651082604051613cf591906148a4565b60405180910390a25050600101613c55565b6060611ec083835f6040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564000081525061405d565b5f80613d5583613aa3565b90505f613da06040518060400160405280600281526020017f3a3a0000000000000000000000000000000000000000000000000000000000008152508361414b90919063ffffffff16565b90505f198103613db3576116f682614157565b6116f6613dc1835f8461417f565b614157565b5f818152600183016020526040812054613e0b57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611ec3565b505f611ec3565b6060815f01805480602002602001604051908101604052809291908181526020018280548015613e5f57602002820191905f5260205f20905b815481526020019060010190808311613e4b575b50505050509050919050565b5f8181526001830160205260408120548015613f45575f613e8d600183614e5c565b85549091505f90613ea090600190614e5c565b9050818114613eff575f865f018281548110613ebe57613ebe614a2b565b905f5260205f200154905080875f018481548110613ede57613ede614a2b565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080613f1057613f10614e7b565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611ec3565b5f915050611ec3565b6040517f57b5a1c600000000000000000000000000000000000000000000000000000000815260048101839052602481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906357b5a1c690604401602060405180830381865afa158015613fd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec091906149b5565b6001600160a01b038216301480159061402c57506001600160a01b038281165f90815260046020526040902054811690821614155b156119a557604051635e2262c360e01b81526001600160a01b03808316600483015283166024820152604401610b6e565b6060824710156140d55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b6e565b5f80866001600160a01b031685876040516140f09190614e8f565b5f6040518083038185875af1925050503d805f811461412a576040519150601f19603f3d011682016040523d82523d5f602084013e61412f565b606091505b5091509150614140878383876141e4565b979650505050505050565b5f611ec083835f61425c565b80516021811061416e5763ec92f9a35f526004601cfd5b9081015160209190910360031b1b90565b6060835182811161418e578092505b838111614199578093505b5081831015612dfb575060405182820380825293830193601f19601f820181165b86810151848201528101806141ba57505f83830160200152603f9091011681016040529392505050565b606083156142525782515f0361424b576001600160a01b0385163b61424b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b6e565b50816116f6565b6116f6838361432c565b5f8351835161427c5780831161427457829150614324565b809150614324565b8351602086015f19935084810196506001828483010301601f831660200360031b6020880151858810838b10166142b7575050505050614324565b602085106142fc578460208a01205b818b5118831c6142e35780868c20036142e357848b0397506142f1565b60018b019a50838b106142c6575b505050505050614324565b808a5118821c61431057838a03965061431e565b60018a019950828a106142fc575b50505050505b509392505050565b81511561433c5781518083602001fd5b8060405162461bcd60e51b8152600401610b6e91906148a4565b6001600160a01b03811681146112cd575f80fd5b803561390181614356565b5f8083601f840112614385575f80fd5b50813567ffffffffffffffff81111561439c575f80fd5b6020830191508360208285010111156143b3575f80fd5b9250929050565b5f606082840312156143ca575f80fd5b50919050565b5f805f805f805f805f806101008b8d0312156143ea575f80fd5b8a3599506143fa60208c0161436a565b985060408b013567ffffffffffffffff80821115614416575f80fd5b6144228e838f01614375565b909a50985060608d013591508082111561443a575f80fd5b6144468e838f01614375565b909850965060808d013591508082111561445e575f80fd5b61446a8e838f016143ba565b955060a08d013591508082111561447f575f80fd5b61448b8e838f016143ba565b945060c08d01359150808211156144a0575f80fd5b506144ad8d828e016143ba565b9250506144bc60e08c0161436a565b90509295989b9194979a5092959850565b5f805f606084860312156144df575f80fd5b83356144ea81614356565b925060208401356144fa81614356565b9150604084013561450a81614356565b809150509250925092565b5f60208284031215614525575f80fd5b8135612dfb81614356565b60a08101611ec382846001600160a01b03808251168352806020830151166020840152806040830151166040840152806060830151166060840152806080830151166080840152505050565b5f805f806060858703121561458f575f80fd5b8435935060208501356145a181614356565b9250604085013567ffffffffffffffff8111156145bc575f80fd5b6145c887828801614375565b95989497509550505050565b5f805f805f805f805f60c08a8c0312156145ec575f80fd5b8935985060208a0135975060408a013561460581614356565b965060608a013567ffffffffffffffff80821115614621575f80fd5b61462d8d838e01614375565b909850965060808c0135915080821115614645575f80fd5b6146518d838e01614375565b909650945060a08c0135915080821115614669575f80fd5b506146768c828d01614375565b915080935050809150509295985092959850929598565b5f805f6040848603121561469f575f80fd5b83356146aa81614356565b9250602084013567ffffffffffffffff8111156146c5575f80fd5b6146d186828701614375565b9497909650939450505050565b5f80604083850312156146ef575f80fd5b82359150602083013561470181614356565b809150509250929050565b5f805f805f8060808789031215614721575f80fd5b86359550602087013561473381614356565b9450604087013567ffffffffffffffff8082111561474f575f80fd5b61475b8a838b01614375565b90965094506060890135915080821115614773575f80fd5b5061478089828a01614375565b979a9699509497509295939492505050565b5f80604083850312156147a3575f80fd5b82356147ae81614356565b9150602083013567ffffffffffffffff8111156147c9575f80fd5b6147d5858286016143ba565b9150509250929050565b5f80604083850312156147f0575f80fd5b82356147fb81614356565b9150602083013561470181614356565b602080825282518282018190525f9190848201906040850190845b8181101561484b5783516001600160a01b031683529284019291840191600101614826565b50909695505050505050565b5f5b83811015614871578181015183820152602001614859565b50505f910152565b5f8151808452614890816020860160208601614857565b601f01601f19169290920160200192915050565b602081525f611ec06020830184614879565b5f602082840312156148c6575f80fd5b5035919050565b6001600160a01b0386811682528581166020830152848116604083015283166060820152610120810161186b60808301846001600160a01b03808251168352806020830151166020840152806040830151166040840152806060830151166060840152806080830151166080840152505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6001600160a01b03808916835280881660208401525060806040830152614995608083018688614941565b82810360608401526149a8818587614941565b9998505050505050505050565b5f602082840312156149c5575f80fd5b8151612dfb81614356565b5f6001600160a01b0380891683528088166020840152808716604084015280861660608401525060a06080830152614a0c60a083018486614941565b98975050505050505050565b602081525f6116f6602083018486614941565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614a4f575f80fd5b81518015158114612dfb575f80fd5b5f82614a7857634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160a01b0386168152606060208201525f614a9f606083018688614941565b8281036040840152611867818587614941565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715614ae957614ae9614ab2565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614b1857614b18614ab2565b604052919050565b5f67ffffffffffffffff821115614b3957614b39614ab2565b5060051b60200190565b5f601f83601f840112614b54575f80fd5b82516020614b69614b6483614b20565b614aef565b82815260059290921b85018101918181019087841115614b87575f80fd5b8287015b84811015614c5d57805167ffffffffffffffff80821115614baa575f80fd5b908901906040601f19838d038101821315614bc3575f80fd5b614bcb614ac6565b88850151614bd881614356565b81528483015184811115614bea575f80fd5b8086019550508d603f860112614bfe575f80fd5b8885015184811115614c1257614c12614ab2565b614c218a848e84011601614aef565b94508085528e84828801011115614c36575f80fd5b614c45818b8701868901614857565b50808901939093525050845250918301918301614b8b565b50979650505050505050565b5f60208284031215614c79575f80fd5b815167ffffffffffffffff80821115614c90575f80fd5b9083019060408286031215614ca3575f80fd5b614cab614ac6565b8251614cb681614356565b8152602083015182811115614cc9575f80fd5b614cd587828601614b43565b60208301525095945050505050565b6001600160a01b03831681526040602082015281356040820152602082013560608201525f6040830135601e19843603018112614d1f575f80fd5b830160208101903567ffffffffffffffff811115614d3b575f80fd5b803603821315614d49575f80fd5b6060608085015261186b60a085018284614941565b6001600160a01b0384168152604060208201525f614d80604083018486614941565b95945050505050565b5f60208284031215614d99575f80fd5b815167ffffffffffffffff811115614daf575f80fd5b6116f684828501614b43565b5f6020808385031215614dcc575f80fd5b825167ffffffffffffffff811115614de2575f80fd5b8301601f81018513614df2575f80fd5b8051614e00614b6482614b20565b81815260059190911b82018301908381019087831115614e1e575f80fd5b928401925b82841015614140578351614e3681614356565b82529284019290840190614e23565b5f60208284031215614e55575f80fd5b5051919050565b81810381811115611ec357634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f8251614ea0818460208701614857565b919091019291505056fea164736f6c6343000817000a5a06360d65acf95e98445dc834f205063424c636e65418d928cdfabc33a95399000000000000000000000000f7f0a609bfab9a0a98786951ef10e5fe26cc1e380000000000000000000000004ad2419dc6de75c3f57d7b6aa200d494c74c14430000000000000000000000004ad2419dc6de75c3f57d7b6aa200d494c74c14430000000000000000000000004ad2419dc6de75c3f57d7b6aa200d494c74c144300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000036b706b0000000000000000000000000000000000000000000000000000000000