0 txs
1 call
constructor
constructor(address owner, address currency_, address collateral_, address oracle_, address swapper_, address reader_)
functions
availableLiqudidity
viewfunction availableLiqudidity(bytes32 marketId) view returns (uint256)
availableToBorrow
viewfunction availableToBorrow(bytes32 marketId) view returns (uint256)
CALLBACK_ROLE
viewfunction CALLBACK_ROLE() view returns (bytes32)
collateral
viewfunction collateral() view returns (address)
collateralNeeded
viewfunction collateralNeeded(uint256 cash) view returns (uint256)
currency
viewfunction currency() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
equity
viewfunction equity() view returns (uint256)
equity
viewfunction equity(bytes32 marketId) view returns (uint256)
equityAsCollateral
viewfunction equityAsCollateral() view returns (uint256)
equityAsCollateral
viewfunction equityAsCollateral(bytes32 marketId) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isUnwinded
viewfunction isUnwinded(bytes32 marketId) view returns (bool)
marketParams
viewfunction marketParams() view returns (address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)
markets
viewfunction markets(uint256) view returns (bytes32)
maxSlippage
viewfunction maxSlippage() view returns (uint256)
minCollateral
viewfunction minCollateral(uint256 cash) view returns (uint256)
minCurrency
viewfunction minCurrency(uint256 assets) view returns (uint256)
morpho
viewfunction morpho() view returns (address)
morphoReader
viewfunction morphoReader() view returns (address)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
oracle
viewfunction oracle() view returns (address)
priceCollateralInCurrency
viewfunction priceCollateralInCurrency(uint256 assets) view returns (uint256 cash)
sharesBorrowed
viewfunction sharesBorrowed(bytes32 marketId) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapper
viewfunction swapper() view returns (address)
addMarket
nonpayablefunction addMarket(bytes32 marketId)
approve
nonpayablefunction approve(address token, address where, uint256 amount)
borrow
nonpayablefunction borrow(bytes32 marketId, uint256 cash)
deleteMarket
nonpayablefunction deleteMarket(bytes32 marketId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
onMorphoFlashLoan
nonpayablefunction onMorphoFlashLoan(uint256 amount, bytes data)
onMorphoSupplyCollateral
nonpayablefunction onMorphoSupplyCollateral(uint256 assets, bytes data)
recover
nonpayablefunction recover(address token, address where)
recoverETH
payablefunction recoverETH() payable
recoverLost
nonpayablefunction recoverLost(address token, address where, uint256 amount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
repay
nonpayablefunction repay(bytes32 marketId, uint256 cash)
repayShares
nonpayablefunction repayShares(bytes32 marketId, uint256 shares)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setMaxSlippage
nonpayablefunction setMaxSlippage(uint256 maxSlippage_)
setMaxSlippageForce
nonpayablefunction setMaxSlippageForce(uint256 maxSlippage_)
setSwapper
nonpayablefunction setSwapper(address _swapper)
shiftCollateral
nonpayablefunction shiftCollateral(bytes32 marketFrom, bytes32 marketTo, uint256 assets)
shiftCurrency
nonpayablefunction shiftCurrency(bytes32 marketFrom, bytes32 marketTo, uint256 cash)
shiftPosition
nonpayablefunction shiftPosition(bytes32 marketFrom, bytes32 marketTo, uint256 assets, uint256 cash)
supplyCollateral
nonpayablefunction supplyCollateral(bytes32 marketId, uint256 assets)
swapToCollateral
nonpayablefunction swapToCollateral(uint256 cash)
swapToCurrency
nonpayablefunction swapToCurrency(uint256 assets)
unwind
nonpayablefunction unwind(bytes32 marketId, uint256 assets, uint256 minCash_)
unwind
nonpayablefunction unwind(bytes32 marketId, uint256 assets)
wind
nonpayablefunction wind(bytes32 marketId, uint256 cash, uint256 minAssets_)
wind
nonpayablefunction wind(bytes32 marketId, uint256 cash)
withdrawAllCollateral
nonpayablefunction withdrawAllCollateral(bytes32 marketId)
withdrawCollateral
nonpayablefunction withdrawCollateral(bytes32 marketId, uint256 assets)
events
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)
Unwind
event Unwind(uint256 borrowShares, uint256 borrowAmount, uint256 collateral)
Wind
event Wind(uint256 equity, uint256 exposure, uint256 toBorrow)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x610160604052346200025a5762000026620000196200045b565b94939093929192620006e0565b6200003062000260565b615ff562000afd82396080518181816116eb01528181611e3501528181612126015281816128400152818161499b01528181614d8b01528181614f87015281816150be01528181615255015281816153d801528181615ac301528181615c2a0152615c7e015260a05181818161156f01528181611f710152818161227e015281816128b501528181612e110152818161466c0152818161489f0152818161560101528181615a4901528181615a9d0152615ca4015260c051818181610e2d01528181613723015281816139d901528181613ad401528181613ba901528181613d050152613dfc015260e0518181816115f601528181611e0501528181611f41015281816120f60152818161224e015281816126100152818161264201528181612865015281816128da01528181612e3601528181613fdd015281816140cc015281816143cd0152818161478501528181614b8501528181614bb601528181614daf01528181614ddf01528181614e1001528181614fab01528181614fdc0152818161500d015281816150e2015281816151ee01528181615279015281816152ab01528181615336015281816154a901528181615625015281816156580152818161568a015281816157ef01526158210152610100518181816109dd015281816138ce01528181614264015261434f015261012051815050610140518181816136f7015281816139ad01528181613a9a01528181613c1401528181613cb80152613e900152615ff590f35b62000266565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b9062000294906200026a565b810190811060018060401b03821117620002ad57604052565b62000274565b90620002ca620002c262000260565b928362000288565b565b5f80fd5b60018060a01b031690565b620002e690620002d0565b90565b620002f481620002db565b03620002fc57565b5f80fd5b905051906200030f82620002e9565b565b6200031c90620002db565b90565b6200032a8162000311565b036200033257565b5f80fd5b9050519062000345826200031f565b565b6200035290620002db565b90565b620003608162000347565b036200036857565b5f80fd5b905051906200037b8262000355565b565b6200038890620002db565b90565b62000396816200037d565b036200039e57565b5f80fd5b90505190620003b1826200038b565b565b620003be90620002db565b90565b620003cc81620003b3565b03620003d457565b5f80fd5b90505190620003e782620003c1565b565b909160c082840312620004555762000404835f840162000300565b9262000414816020850162000336565b9262000424826040830162000336565b92620004526200043884606085016200036c565b93620004488160808601620003a2565b9360a001620003d8565b90565b620002cc565b6200047e62006af2803803806200047281620002b3565b928339810190620003e9565b909192939495565b90565b620004a26200049c620004a892620002d0565b62000486565b620002d0565b90565b620004b69062000489565b90565b620004c490620004ab565b90565b90565b90565b620004e6620004e0620004ec92620004c7565b62000486565b620004ca565b90565b5f1b90565b90620005025f1991620004ef565b9181191691161790565b90565b62000528620005226200052e926200050c565b62000486565b620004ca565b90565b90565b906200054e6200054862000556926200050f565b62000531565b8254620004f4565b9055565b90565b62000576620005706200057c926200055a565b62000486565b620004ca565b90565b906200059962000593620005a1926200055d565b62000531565b8254620004f4565b9055565b90565b620005c1620005bb620005c792620005a5565b62000486565b620004ca565b90565b90620005dd60018060a01b0391620004ef565b9181191691161790565b620005f29062000489565b90565b6200060090620005e7565b90565b90565b90620006206200061a6200062892620005f5565b62000603565b8254620005ca565b9055565b90565b62000648620006426200064e926200055a565b620004ef565b6200062c565b90565b6200065c5f6200062f565b90565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92990565b7f73f9a0f79d0de650ebb1c7d68b67125ab5d93ce97641ba33e5e1e4b5f481921c90565b620006b290620002db565b90565b620006c19051620006a7565b90565b620006cf9062000489565b90565b620006dd90620006c4565b90565b93909262000771926200078596946200070d73bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb620004b9565b60e05262000723670de0b6b3a7640000620004cd565b61012052620007356005600462000534565b620007425f60056200057f565b6200075c6ec097ce7bc90715b34b9f1000000000620005a8565b6101405260805260a05260c052600162000606565b610100526200077f62000651565b620009c7565b506200079c620007946200065f565b3390620009c7565b50620007c8620007ab62000683565b620007c1620007bb60e0620006b5565b620006d2565b90620009c7565b50620007e8620007d76200065f565b620007e162000651565b906200086d565b62000807620007f662000683565b6200080062000651565b906200086d565b565b62000814906200062c565b90565b90620008239062000809565b5f5260205260405f2090565b5f1c90565b6200083f906200082f565b90565b906200085c62000856620008649262000809565b62000834565b8254620004f4565b9055565b5f0190565b90620008798262000922565b91620008958260016200088e5f859062000817565b0162000842565b91620008d8620008d1620008ca7fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9562000809565b9262000809565b9262000809565b92620008e362000260565b80620008ef8162000868565b0390a4565b5f90565b90565b6200090a62000910916200082f565b620008f8565b90565b6200091f9054620008fb565b90565b60016200093f620009469262000937620008f4565b505f62000817565b0162000913565b90565b5f90565b151590565b6200095d90620006c4565b90565b906200096c9062000952565b5f5260205260405f2090565b906200098660ff91620004ef565b9181191691161790565b6200099b906200094d565b90565b90565b90620009bb620009b5620009c39262000990565b6200099e565b825462000978565b9055565b620009d162000949565b50620009ea620009e382849062000ab8565b156200094d565b5f1462000a855762000a18600162000a125f62000a0981869062000817565b01859062000960565b620009a1565b9062000a2362000aed565b9062000a6662000a5f62000a587f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9562000809565b9262000952565b9262000952565b9262000a7162000260565b8062000a7d8162000868565b0390a4600190565b50505f90565b60ff1690565b62000aa062000aa6916200082f565b62000a8b565b90565b62000ab5905462000a91565b90565b62000ae6915f62000ad962000ae09362000ad162000949565b508262000817565b0162000960565b62000aa9565b90565b5f90565b62000af762000ae9565b50339056fe60806040526004361015610013575b61180f565b61001d5f3561039b565b8062f989ad1461039657806301ffc9a7146103915780630244d7d81461038c5780630614117a1461038757806311fe4ee7146103825780631d946bcb1461037d578063248a9ca3146103785780632b3297f9146103735780632e5f35bd1461036e5780632f2ff15d1461036957806331f570721461036457806336568abe1461035f578063370ee8cb1461035a57806340b4fff2146103555780634383173a1461035057806343f68a491461034b5780634f63b01614610346578063576b266a14610341578063648bf7741461033c578063673cc5a3146103375780636b811a3c146103325780636c68b7231461032d5780636f6654a31461032857806375064483146103235780637b9e68f21461031e5780637c93ec30146103195780637dc0d1d0146103145780638336bbb81461030f5780638c04166f1461030a578063918d2f411461030557806391a0ac6a1461030057806391d14854146102fb578063977da540146102f657806397acc016146102f15780639c82f2a4146102ec5780639cf0a1c3146102e7578063a193212e146102e2578063a1e93482146102dd578063a217fddf146102d8578063a4356d1f146102d3578063ad8b6e27146102ce578063b1022fdf146102c9578063b1283e77146102c4578063bbc39046146102bf578063bcc7e7ee146102ba578063bd26c7f0146102b5578063c52d1b0b146102b0578063ce88c52c146102ab578063d547741f146102a6578063d8dfeb45146102a1578063d8fbc8331461029c578063e1f21c6714610297578063e5a6b10f14610292578063ec87105c1461028d578063f5b541a6146102885763fad105110361000e576117db565b6117a6565b611742565b61170d565b6116b5565b611646565b6115bf565b611539565b611505565b6114d0565b61149c565b61142d565b6113f6565b61137b565b61127b565b611246565b611213565b6111de565b61116f565b61113c565b611107565b6110d4565b611052565b61101f565b610fe9565b610fb4565b610f7f565b610f1b565b610eb2565b610e7d565b610df7565b610dbe565b610c98565b610c65565b610c31565b610bc4565b610b8f565b610b5b565b610aca565b610a95565b610a62565b610a2d565b6109a7565b610974565b610940565b61090c565b610847565b6107b7565b610782565b6106a5565b61060e565b6105d9565b610592565b61054e565b6104d9565b610431565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b90565b6103bf816103b3565b036103c657565b5f80fd5b905035906103d7826103b6565b565b90565b6103e5816103d9565b036103ec57565b5f80fd5b905035906103fd826103dc565b565b9190604083820312610427578061041b610424925f86016103ca565b936020016103f0565b90565b6103ab565b5f0190565b346104605761044a6104443660046103ff565b906145cd565b6104526103a1565b8061045c8161042c565b0390f35b6103a7565b63ffffffff60e01b1690565b61047a81610465565b0361048157565b5f80fd5b9050359061049282610471565b565b906020828203126104ad576104aa915f01610485565b90565b6103ab565b151590565b6104c0906104b2565b9052565b91906104d7905f602085019401906104b7565b565b34610509576105056104f46104ef366004610494565b611817565b6104fc6103a1565b918291826104c4565b0390f35b6103a7565b9060208282031261052757610524915f016103f0565b90565b6103ab565b610535906103d9565b9052565b919061054c905f6020850194019061052c565b565b3461057e5761057a61056961056436600461050e565b613c71565b6105716103a1565b91829182610539565b0390f35b6103a7565b5f91031261058d57565b6103ab565b61059d366004610583565b6105a5615f7c565b6105ad6103a1565b806105b78161042c565b0390f35b906020828203126105d4576105d1915f016103ca565b90565b6103ab565b34610609576106056105f46105ef3660046105bb565b61424f565b6105fc6103a1565b91829182610539565b0390f35b6103a7565b3461063d576106276106213660046103ff565b9061460a565b61062f6103a1565b806106398161042c565b0390f35b6103a7565b61064b816103b3565b0361065257565b5f80fd5b9050359061066382610642565b565b9060208282031261067e5761067b915f01610656565b90565b6103ab565b61068c906103b3565b9052565b91906106a3905f60208501940190610683565b565b346106d5576106d16106c06106bb366004610665565b611907565b6106c86103a1565b91829182610690565b0390f35b6103a7565b1c90565b60018060a01b031690565b6106f99060086106fe93026106da565b6106de565b90565b9061070c91546106e9565b90565b61071b60015f90610701565b90565b60018060a01b031690565b90565b61074061073b6107459261071e565b610729565b61071e565b90565b6107519061072c565b90565b61075d90610748565b90565b61076990610754565b9052565b9190610780905f60208501940190610760565b565b346107b257610792366004610583565b6107ae61079d61070f565b6107a56103a1565b9182918261076d565b0390f35b6103a7565b346107e6576107d06107ca3660046103ff565b90612042565b6107d86103a1565b806107e28161042c565b0390f35b6103a7565b6107f49061071e565b90565b610800816107eb565b0361080757565b5f80fd5b90503590610818826107f7565b565b9190604083820312610842578061083661083f925f8601610656565b9360200161080b565b90565b6103ab565b346108765761086061085a36600461081a565b90611952565b6108686103a1565b806108728161042c565b0390f35b6103a7565b5f80fd5b5f80fd5b5f80fd5b909182601f830112156108c15781359167ffffffffffffffff83116108bc5760200192600183028401116108b757565b610883565b61087f565b61087b565b919091604081840312610907576108df835f83016103f0565b92602082013567ffffffffffffffff8111610902576108fe9201610887565b9091565b6103af565b6103ab565b3461093b5761092561091f3660046108c6565b9161290a565b61092d6103a1565b806109378161042c565b0390f35b6103a7565b3461096f5761095961095336600461081a565b90611a0d565b6109616103a1565b8061096b8161042c565b0390f35b6103a7565b346109a25761098c61098736600461050e565b61309f565b6109946103a1565b8061099e8161042c565b0390f35b6103a7565b346109d6576109c06109ba3660046103ff565b90614713565b6109c86103a1565b806109d28161042c565b0390f35b6103a7565b7f000000000000000000000000000000000000000000000000000000000000000090565b610a0890610748565b90565b610a14906109ff565b9052565b9190610a2b905f60208501940190610a0b565b565b34610a5d57610a3d366004610583565b610a59610a486109db565b610a506103a1565b91829182610a18565b0390f35b6103a7565b34610a9057610a7a610a7536600461050e565b612f86565b610a826103a1565b80610a8c8161042c565b0390f35b6103a7565b34610ac557610ac1610ab0610aab3660046105bb565b6138bd565b610ab86103a1565b91829182610539565b0390f35b6103a7565b34610afa57610af6610ae5610ae036600461050e565b613a85565b610aed6103a1565b91829182610539565b0390f35b6103a7565b610b08906107eb565b90565b610b1481610aff565b03610b1b57565b5f80fd5b90503590610b2c82610b0b565b565b9190604083820312610b565780610b4a610b53925f8601610b1f565b9360200161080b565b90565b6103ab565b34610b8a57610b74610b6e366004610b2e565b90615ec0565b610b7c6103a1565b80610b868161042c565b0390f35b6103a7565b34610bbf57610b9f366004610583565b610bbb610baa613677565b610bb26103a1565b91829182610539565b0390f35b6103a7565b34610bf257610bdc610bd73660046105bb565b614849565b610be46103a1565b80610bee8161042c565b0390f35b6103a7565b9091606082840312610c2c57610c29610c12845f85016103ca565b93610c2081602086016103ca565b936040016103f0565b90565b6103ab565b34610c6057610c4a610c44366004610bf7565b91612408565b610c526103a1565b80610c5c8161042c565b0390f35b6103a7565b34610c9357610c7d610c7836600461050e565b614a41565b610c856103a1565b80610c8f8161042c565b0390f35b6103a7565b34610cc757610cb1610cab366004610bf7565b916123b5565b610cb96103a1565b80610cc38161042c565b0390f35b6103a7565b5f1c90565b60018060a01b031690565b610ce8610ced91610ccc565b610cd1565b90565b610cfa9054610cdc565b90565b90565b610d0c610d1191610ccc565b610cfd565b90565b610d1e9054610d00565b90565b6006610d2e5f8201610cf0565b91610d3b60018301610cf0565b91610d4860028201610cf0565b91610d616004610d5a60038501610cf0565b9301610d14565b90565b610d6d906107eb565b9052565b90959492610dbc94610dab610db592610da1608096610d9760a088019c5f890190610d64565b6020870190610d64565b6040850190610d64565b6060830190610d64565b019061052c565b565b34610df257610dce366004610583565b610dee610dd9610d21565b91610de59593956103a1565b95869586610d71565b0390f35b6103a7565b34610e2657610e10610e0a3660046103ff565b90614590565b610e186103a1565b80610e228161042c565b0390f35b6103a7565b7f000000000000000000000000000000000000000000000000000000000000000090565b610e5890610748565b90565b610e6490610e4f565b9052565b9190610e7b905f60208501940190610e5b565b565b34610ead57610e8d366004610583565b610ea9610e98610e2b565b610ea06103a1565b91829182610e68565b0390f35b6103a7565b34610ee157610ecb610ec53660046103ff565b90611f06565b610ed36103a1565b80610edd8161042c565b0390f35b6103a7565b610ef6906008610efb93026106da565b610cfd565b90565b90610f099154610ee6565b90565b610f1860045f90610efe565b90565b34610f4b57610f2b366004610583565b610f47610f36610f0c565b610f3e6103a1565b91829182610539565b0390f35b6103a7565b7f73f9a0f79d0de650ebb1c7d68b67125ab5d93ce97641ba33e5e1e4b5f481921c90565b610f7c610f50565b90565b34610faf57610f8f366004610583565b610fab610f9a610f74565b610fa26103a1565b91829182610690565b0390f35b6103a7565b34610fe457610fc4366004610583565b610fe0610fcf613574565b610fd76103a1565b91829182610539565b0390f35b6103a7565b3461101a57611016611005610fff36600461081a565b906118b6565b61100d6103a1565b918291826104c4565b0390f35b6103a7565b3461104d576110376110323660046105bb565b613540565b61103f6103a1565b806110498161042c565b0390f35b6103a7565b346110825761107e61106d6110683660046105bb565b613993565b6110756103a1565b91829182610539565b0390f35b6103a7565b611090906107eb565b90565b61109c81611087565b036110a357565b5f80fd5b905035906110b482611093565b565b906020828203126110cf576110cc915f016110a7565b90565b6103ab565b34611102576110ec6110e73660046110b6565b611ca2565b6110f46103a1565b806110fe8161042c565b0390f35b6103a7565b346111375761113361112261111d3660046105bb565b614338565b61112a6103a1565b91829182610539565b0390f35b6103a7565b3461116a5761115461114f36600461050e565b614945565b61115c6103a1565b806111668161042c565b0390f35b6103a7565b3461119e576111886111823660046103ff565b90614750565b6111906103a1565b8061119a8161042c565b0390f35b6103a7565b90565b5f1b90565b6111bf6111ba6111c4926111a3565b6111a6565b6103b3565b90565b6111d05f6111ab565b90565b6111db6111c7565b90565b3461120e576111ee366004610583565b61120a6111f96111d3565b6112016103a1565b91829182610690565b0390f35b6103a7565b346112415761122b6112263660046105bb565b61327c565b6112336103a1565b8061123d8161042c565b0390f35b6103a7565b346112765761127261126161125c36600461050e565b613b96565b6112696103a1565b91829182610539565b0390f35b6103a7565b346112aa5761129461128e3660046108c6565b91612e63565b61129c6103a1565b806112a68161042c565b0390f35b6103a7565b634e487b7160e01b5f52603260045260245ffd5b5490565b5f5260205f2090565b6112d9816112c3565b8210156112f3576112eb6001916112c7565b910201905f90565b6112af565b90565b61130b90600861131093026106da565b6112f8565b90565b9061131e91546112fb565b90565b600261132c816112c3565b8210156113495761134691611340916112d0565b90611313565b90565b5f80fd5b611356906103b3565b90565b6113629061134d565b9052565b9190611379905f60208501940190611359565b565b346113ab576113a761139661139136600461050e565b611321565b61139e6103a1565b91829182611366565b0390f35b6103a7565b6080818303126113f1576113c6825f83016103ca565b926113ee6113d784602085016103ca565b936113e581604086016103f0565b936060016103f0565b90565b6103ab565b34611428576114126114093660046113b0565b9291909161278c565b61141a6103a1565b806114248161042c565b0390f35b6103a7565b3461145d576114596114486114433660046105bb565b6140bc565b6114506103a1565b91829182610539565b0390f35b6103a7565b90916060828403126114975761149461147d845f85016103ca565b9361148b81602086016103f0565b936040016103f0565b90565b6103ab565b346114cb576114b56114af366004611462565b91612362565b6114bd6103a1565b806114c78161042c565b0390f35b6103a7565b34611500576114fc6114eb6114e63660046105bb565b613fcd565b6114f36103a1565b918291826104c4565b0390f35b6103a7565b346115345761151e611518366004611462565b9161220a565b6115266103a1565b806115308161042c565b0390f35b6103a7565b346115685761155261154c36600461081a565b90611a01565b61155a6103a1565b806115648161042c565b0390f35b6103a7565b7f000000000000000000000000000000000000000000000000000000000000000090565b61159a90610748565b90565b6115a690611591565b9052565b91906115bd905f6020850194019061159d565b565b346115ef576115cf366004610583565b6115eb6115da61156d565b6115e26103a1565b918291826115aa565b0390f35b6103a7565b7f000000000000000000000000000000000000000000000000000000000000000090565b61162190610748565b90565b61162d90611618565b9052565b9190611644905f60208501940190611624565b565b3461167657611656366004610583565b6116726116616115f4565b6116696103a1565b91829182611631565b0390f35b6103a7565b90916060828403126116b0576116ad611696845f8501610b1f565b936116a4816020860161080b565b936040016103f0565b90565b6103ab565b346116e4576116ce6116c836600461167b565b91615fb2565b6116d66103a1565b806116e08161042c565b0390f35b6103a7565b7f000000000000000000000000000000000000000000000000000000000000000090565b3461173d5761171d366004610583565b6117396117286116e9565b6117306103a1565b918291826115aa565b0390f35b6103a7565b346117725761176e61175d61175836600461050e565b613db6565b6117656103a1565b91829182610539565b0390f35b6103a7565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92990565b6117a3611777565b90565b346117d6576117b6366004610583565b6117d26117c161179b565b6117c96103a1565b91829182610690565b0390f35b6103a7565b3461180a576117f46117ee36600461167b565b91615db2565b6117fc6103a1565b806118068161042c565b0390f35b6103a7565b5f80fd5b5f90565b61181f611813565b508061183a611834637965db0b60e01b610465565b91610465565b14908115611847575b5090565b6118519150611bfe565b5f611843565b906118619061134d565b5f5260205260405f2090565b61187690610748565b90565b906118839061186d565b5f5260205260405f2090565b60ff1690565b6118a16118a691610ccc565b61188f565b90565b6118b39054611895565b90565b6118dc915f6118d16118d7936118ca611813565b5082611857565b01611879565b6118a9565b90565b5f90565b90565b6118f26118f791610ccc565b6118e3565b90565b61190490546118e6565b90565b600161191f611925926119186118df565b505f611857565b016118fa565b90565b906119439161193e61193982611907565b61195e565b611945565b565b9061194f91611aa1565b50565b9061195c91611928565b565b6119709061196a611bf1565b90611995565b565b91602061199392949361198c60408201965f830190610d64565b0190610683565b565b906119aa6119a48383906118b6565b156104b2565b6119b2575050565b6119d36119bd6103a1565b92839263e2517d3f60e01b845260048401611972565b0390fd5b906119f2916119ed6119e882611907565b61195e565b6119f4565b565b906119fe91611b4c565b50565b90611a0b916119d7565b565b9080611a28611a22611a1d611bf1565b6107eb565b916107eb565b03611a3957611a3691611b4c565b50565b611a416103a1565b63334bd91960e11b815280611a586004820161042c565b0390fd5b90611a6860ff916111a6565b9181191691161790565b611a7b906104b2565b90565b90565b90611a96611a91611a9d92611a72565b611a7e565b8254611a5c565b9055565b611aa9611813565b50611abe611ab88284906118b6565b156104b2565b5f14611b4657611ae56001611ae05f611ad8818690611857565b018590611879565b611a81565b90611aee611bf1565b90611b2b611b25611b1f7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9561134d565b9261186d565b9261186d565b92611b346103a1565b80611b3e8161042c565b0390a4600190565b50505f90565b611b54611813565b50611b608183906118b6565b5f14611be757611b865f611b815f611b79818690611857565b018590611879565b611a81565b90611b8f611bf1565b90611bcc611bc6611bc07ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9561134d565b9261186d565b9261186d565b92611bd56103a1565b80611bdf8161042c565b0390a4600190565b50505f90565b5f90565b611bf9611bed565b503390565b611c06611813565b50611c20611c1a6301ffc9a760e01b610465565b91610465565b1490565b611c3d90611c38611c336111c7565b61195e565b611c95565b565b90611c5060018060a01b03916111a6565b9181191691161790565b611c639061072c565b90565b611c6f90611c5a565b90565b90565b90611c8a611c85611c9192611c66565b611c72565b8254611c3f565b9055565b611ca0906001611c75565b565b611cab90611c24565b565b90611cc791611cc2611cbd611777565b61195e565b611df6565b565b600190565b916020611cef929493611ce860408201965f830190611359565b01906104b7565b565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90611d1990611cf1565b810190811067ffffffffffffffff821117611d3357604052565b611cfb565b5f80fd5b60e01b90565b5f910312611d4c57565b6103ab565b5190565b60209181520190565b5f5b838110611d70575050905f910152565b806020918301518185015201611d60565b611da0611da9602093611dae93611d9781611d51565b93848093611d55565b95869101611d5e565b611cf1565b0190565b611dd6611de3949293611dcc60608401955f850190610d64565b602083019061052c565b6040818403910152611d81565b90565b611dee6103a1565b3d5f823e3d90fd5b90611e0082614ace565b611e297f0000000000000000000000000000000000000000000000000000000000000000611618565b9063e0232b4291611e597f0000000000000000000000000000000000000000000000000000000000000000611591565b919392611e8e611e67611cc9565b94611e7f611e736103a1565b96879260208401611cce565b60208201810382520385611d0f565b813b15611f01575f611eb391611ebe8296611ea76103a1565b98899788968795611d3c565b855260048501611db2565b03925af18015611efc57611ed0575b50565b611eef905f3d8111611ef5575b611ee78183611d0f565b810190611d42565b5f611ecd565b503d611edd565b611de6565b611d38565b90611f1091611cad565b565b90611f2c91611f27611f22611777565b61195e565b611f32565b565b5f90565b90611f3c82614ace565b611f657f0000000000000000000000000000000000000000000000000000000000000000611618565b9063e0232b4291611f957f0000000000000000000000000000000000000000000000000000000000000000611591565b919392611fca611fa3611f2e565b94611fbb611faf6103a1565b96879260208401611cce565b60208201810382520385611d0f565b813b1561203d575f611fef91611ffa8296611fe36103a1565b98899788968795611d3c565b855260048501611db2565b03925af180156120385761200c575b50565b61202b905f3d8111612031575b6120238183611d0f565b810190611d42565b5f612009565b503d612019565b611de6565b611d38565b9061204c91611f12565b565b90612069929161206461205f611777565b61195e565b6120dc565b565b906120775f19916111a6565b9181191691161790565b61209561209061209a926103d9565b610729565b6103d9565b90565b90565b906120b56120b06120bc92612081565b61209d565b825461206b565b9055565b6120d46120cf6120d9926111a3565b610729565b6103d9565b90565b916120f1906120ea84614ace565b60056120a0565b61211a7f0000000000000000000000000000000000000000000000000000000000000000611618565b9063e0232b429161214a7f0000000000000000000000000000000000000000000000000000000000000000611591565b91939261217f612158611cc9565b946121706121646103a1565b96879260208401611cce565b60208201810382520385611d0f565b813b15612205575f6121a4916121af82966121986103a1565b98899788968795611d3c565b855260048501611db2565b03925af18015612200576121d4575b506121d26121cb5f6120c0565b60056120a0565b565b6121f3905f3d81116121f9575b6121eb8183611d0f565b810190611d42565b5f6121be565b503d6121e1565b611de6565b611d38565b90612215929161204e565b565b90612232929161222d612228611777565b61195e565b612234565b565b916122499061224284614ace565b60056120a0565b6122727f0000000000000000000000000000000000000000000000000000000000000000611618565b9063e0232b42916122a27f0000000000000000000000000000000000000000000000000000000000000000611591565b9193926122d76122b0611f2e565b946122c86122bc6103a1565b96879260208401611cce565b60208201810382520385611d0f565b813b1561235d575f6122fc9161230782966122f06103a1565b98899788968795611d3c565b855260048501611db2565b03925af180156123585761232c575b5061232a6123235f6120c0565b60056120a0565b565b61234b905f3d8111612351575b6123438183611d0f565b810190611d42565b5f612316565b503d612339565b611de6565b611d38565b9061236d9291612217565b565b9061238a9291612385612380611777565b61195e565b61238c565b565b906123ae6123b3939261239e81614ace565b6123a783614ace565b83906157e7565b6155fc565b565b906123c0929161236f565b565b906123dd92916123d86123d3611777565b61195e565b6123df565b565b9061240161240693926123f181614ace565b6123fa83614ace565b8390614b7b565b614d81565b565b9061241392916123c2565b565b9061243193929161242c612427611777565b61195e565b6125f3565b565b5f80fd5b9061244a6124436103a1565b9283611d0f565b565b90505190612459826107f7565b565b90505190612468826103dc565b565b919060a0838203126124da576124d39061248460a0612437565b93612491825f830161244c565b5f8601526124a2826020830161244c565b60208601526124b4826040830161244c565b60408601526124c6826060830161244c565b606086015260800161245b565b6080830152565b612433565b9060a0828203126124f8576124f5915f0161246a565b90565b6103ab565b61250690610748565b90565b604090612532612539949695939661252860608401985f850190611359565b6020830190611359565b019061052c565b565b612544906107eb565b9052565b612551906103d9565b9052565b906080806125ad9361256d5f8201515f86019061253b565b61257f6020820151602086019061253b565b6125916040820151604086019061253b565b6125a36060820151606086019061253b565b0151910190612548565b565b90926125e3906125d96125f096946125cf6101008601975f870190612555565b60a085019061052c565b60c0830190610d64565b60e0818403910152611d81565b90565b92612690919361260281614ace565b61260b85614ace565b6126347f0000000000000000000000000000000000000000000000000000000000000000611618565b9163238d65799460a06126667f0000000000000000000000000000000000000000000000000000000000000000611618565b632c3c9157906126858a926126796103a1565b998a9485938493611d3c565b835260048301611366565b03915afa948515612787575f95612753575b506126da90966126cb6126b4306124fd565b9491936126bf6103a1565b94859360208501612509565b60208201810382520382611d0f565b823b1561274e575f9461270b8692612700946126f46103a1565b998a9889978896611d3c565b8652600486016125af565b03925af180156127495761271d575b50565b61273c905f3d8111612742575b6127348183611d0f565b810190611d42565b5f61271a565b503d61272a565b611de6565b611d38565b6126da9195506127799060a03d8111612780575b6127718183611d0f565b8101906124df565b94906126a2565b503d612767565b611de6565b90612798939291612415565b565b906127b592916127b06127ab610f50565b61195e565b612807565b565b6127c0816104b2565b036127c757565b5f80fd5b905035906127d8826127b7565b565b919060408382031261280257806127f66127ff925f86016103ca565b936020016127cb565b90565b6103ab565b9161281591908101906127da565b9190915f146128935761283e6128909261283761283184615c1c565b826155fc565b8290614b7b565b7f0000000000000000000000000000000000000000000000000000000000000000906128897f0000000000000000000000000000000000000000000000000000000000000000611618565b909161298f565b5b565b6128b3612905926128ac6128a684615a3b565b826151e4565b82906157e7565b7f0000000000000000000000000000000000000000000000000000000000000000906128fe7f0000000000000000000000000000000000000000000000000000000000000000611618565b909161298f565b612891565b90612915929161279a565b565b63ffffffff1690565b61293461292f61293992612917565b611d3c565b610465565b90565b91602061295d92949361295660408201965f830190610d64565b019061052c565b565b612968906120c0565b9052565b91602061298d92949361298660408201965f830190610d64565b019061295f565b565b90916129d26004916129c363095ea7b36129aa879391612920565b926129b36103a1565b958694602086019081520161293c565b60208201810382520382611d0f565b906129e76129e1828490612b8d565b156104b2565b6129f1575b505050565b612a3e6004612a4394612a398491612a2a63095ea7b3612a115f91612920565b92612a1a6103a1565b968794602086019081520161296c565b60208201810382520383611d0f565b612a8d565b612a8d565b5f80806129ec565b90505190612a58826127b7565b565b90602082820312612a7357612a70915f01612a4b565b90565b6103ab565b9190612a8b905f60208501940190610d64565b565b90612aa090612a9b83611591565b612c3a565b612aa981611d51565b612abb612ab55f6120c0565b916103d9565b14159081612afa575b50612acc5750565b612ad8612af691611591565b612ae06103a1565b918291635274afe760e01b835260048301612a78565b0390fd5b612b1f9150612b19906020612b0e82611d51565b818301019101612a5a565b156104b2565b5f612ac4565b67ffffffffffffffff8111612b4357612b3f602091611cf1565b0190565b611cfb565b90612b5a612b5583612b25565b612437565b918252565b606090565b3d5f14612b7f57612b743d612b48565b903d5f602084013e5b565b612b87612b5f565b90612b7d565b905f8091612b99611813565b50612ba384611591565b9082602082019151925af1612bb6612b64565b81612bec575b509081612bc8575b5090565b612bd29150611591565b3b612be5612bdf5f6120c0565b916103d9565b115f612bc4565b9050612bf781611d51565b612c09612c035f6120c0565b916103d9565b14908115612c19575b505f612bbc565b612c3491506020612c2982611d51565b818301019101612a5a565b5f612c12565b90612c5891612c47612b5f565b5090612c525f6120c0565b91612c67565b90565b612c6490610748565b90565b9091612c71612b5f565b50612c7b30612c5b565b31612c8e612c88836103d9565b916103d9565b10612cba575f8091612cb7948491602082019151925af190612cae612b64565b90919091612ce8565b90565b612ce4612cc630612c5b565b612cce6103a1565b91829163cd78605960e01b835260048301612a78565b0390fd5b90612cfc90612cf5612b5f565b50156104b2565b5f14612d085750612d73565b612d1182611d51565b612d23612d1d5f6120c0565b916103d9565b1480612d58575b612d32575090565b612d5490612d3e6103a1565b918291639996b31560e01b835260048301612a78565b0390fd5b50803b612d6d612d675f6120c0565b916103d9565b14612d2a565b612d7c81611d51565b612d8e612d885f6120c0565b916103d9565b115f14612d9d57805190602001fd5b612da56103a1565b630a12f52160e11b815280612dbc6004820161042c565b0390fd5b90612ddb9291612dd6612dd1610f50565b61195e565b612ddd565b565b90612e02612e08612df8612e6195612e0f9490810190610bf7565b9193908290614b7b565b82614d81565b82906157e7565b7f000000000000000000000000000000000000000000000000000000000000000090612e5a7f0000000000000000000000000000000000000000000000000000000000000000611618565b909161298f565b565b90612e6e9291612dc0565b565b612e8990612e84612e7f611777565b61195e565b612f5b565b565b90565b612ea2612e9d612ea792612e8b565b610729565b6103d9565b90565b60209181520190565b60207f3035250000000000000000000000000000000000000000000000000000000000917f4d617820736c6970706167652073686f756c64206265206174206d617820302e5f8201520152565b612f0d6023604092612eaa565b612f1681612eb3565b0190565b612f2f9060208101905f818303910152612f00565b90565b15612f3957565b612f416103a1565b62461bcd60e51b815280612f5760048201612f1a565b0390fd5b612f8490612f7d81612f76612f706005612e8e565b916103d9565b1115612f32565b60046120a0565b565b612f8f90612e70565b565b612faa90612fa5612fa06111c7565b61195e565b613073565b565b90565b612fc3612fbe612fc892612fac565b610729565b6103d9565b90565b60207f3025000000000000000000000000000000000000000000000000000000000000917f4d617820736c6970706167652073686f756c64206265206174206d61782031305f8201520152565b6130256022604092612eaa565b61302e81612fcb565b0190565b6130479060208101905f818303910152613018565b90565b1561305157565b6130596103a1565b62461bcd60e51b81528061306f60048201613032565b0390fd5b61309d906130968161308f613089612710612faf565b916103d9565b111561304a565b60046120a0565b565b6130a890612f91565b565b6130c3906130be6130b96111c7565b61195e565b613221565b565b906130cf9061134d565b5f5260205260405f2090565b5f7f4d61726b657420616c7265616479206164646564000000000000000000000000910152565b61310f6014602092612eaa565b613118816130db565b0190565b6131319060208101905f818303910152613102565b90565b1561313b57565b6131436103a1565b62461bcd60e51b8152806131596004820161311c565b0390fd5b90565b5f5260205f2090565b5490565b61317681613169565b82101561319057613188600191613160565b910201905f90565b6112af565b1b90565b919060086131b49102916131ae5f1984613195565b92613195565b9181191691161790565b6131c790610ccc565b90565b91906131e06131db6131e89361134d565b6131be565b908354613199565b9055565b908154916801000000000000000083101561321c578261321491600161321a9501815561316d565b906131ca565b565b611cfb565b61327a9061325461323c613237600384906130c5565b6118a9565b61324e6132485f6104b2565b916104b2565b14613134565b613268613261600261315d565b82906131ec565b61327560019160036130c5565b611a81565b565b613285906130aa565b565b6132a09061329b6132966111c7565b61195e565b61344e565b565b5f7f4d61726b65742069736e27742061646465642079657400000000000000000000910152565b6132d66016602092612eaa565b6132df816132a2565b0190565b6132f89060208101905f8183039101526132c9565b90565b1561330257565b61330a6103a1565b62461bcd60e51b815280613320600482016132e3565b0390fd5b634e487b7160e01b5f52601160045260245ffd5b613341906103d9565b5f19811461334f5760010190565b613324565b90565b61336b61336661337092613354565b610729565b6103d9565b90565b613382613388919392936103d9565b926103d9565b820391821161339357565b613324565b634e487b7160e01b5f52603160045260245ffd5b5f90565b6133c2916133bc6133ac565b916131ca565b565b6133cd81613169565b80156133ee5760019003906133eb6133e5838361316d565b906133b0565b55565b613398565b9190600861340e91029161340860ff84613195565b92613195565b9181191691161790565b919061342e61342961343693611a72565b611a7e565b9083546133f3565b9055565b61344c91613446611813565b91613418565b565b61347e613465613460600384906130c5565b6118a9565b61347861347260016104b2565b916104b2565b146132fb565b6134875f6120c0565b5b6134a56134a061349a600284906112d0565b90611313565b61134d565b6134bf6134b96134b48561134d565b6103b3565b916103b3565b146134d2576134cd90613338565b613488565b61353961353e926135205f9361351a61351261350c60026135066134f660026112c3565b6135006001613357565b90613373565b906112d0565b90611313565b9160026112d0565b906131ca565b61353261352d600261315d565b6133c4565b60036130c5565b61343a565b565b61354990613287565b565b5f90565b61355e613564919392936103d9565b926103d9565b820180921161356f57565b613324565b61357c61354b565b506135865f6120c0565b61358f5f6120c0565b905b816135ad6135a76135a260026112c3565b6103d9565b916103d9565b10156135e9576135dd6135e3916135d76135d26135cc600287906112d0565b90611313565b6138bd565b9061354f565b91613338565b90613591565b905090565b6135fd613603919392936103d9565b926103d9565b9161360f8382026103d9565b92818404149015171561361e57565b613324565b9060208282031261363c57613639915f0161245b565b90565b6103ab565b634e487b7160e01b5f52601260045260245ffd5b613661613667916103d9565b916103d9565b908115613672570490565b613641565b61367f61354b565b506136895f6120c0565b6136925f6120c0565b905b816136b06136aa6136a560026112c3565b6103d9565b916103d9565b10156136ec576136e06136e6916136da6136d56136cf600287906112d0565b90611313565b6138bd565b9061354f565b91613338565b90613694565b61375d915061371c907f0000000000000000000000000000000000000000000000000000000000000000906135ee565b60206137477f0000000000000000000000000000000000000000000000000000000000000000610e4f565b63a035b1fe906137556103a1565b948592611d3c565b8252818061376d6004820161042c565b03915afa9081156137bc57613789925f9261378c575b50613655565b90565b6137ae91925060203d81116137b5575b6137a68183611d0f565b810190613623565b905f613783565b503d61379c565b611de6565b91906101008382031261386957613862906137dd610100612437565b936137ea825f830161245b565b5f8601526137fb826020830161245b565b602086015261380d826040830161245b565b604086015261381f826060830161245b565b6060860152613831826080830161245b565b60808601526138438260a0830161245b565b60a08601526138558260c0830161245b565b60c086015260e00161245b565b60e0830152565b612433565b906101008282031261388857613885915f016137c1565b90565b6103ab565b9160206138ae9294936138a760408201965f830190611359565b0190610d64565b565b6138ba90516103d9565b90565b6138c561354b565b506101006138f27f00000000000000000000000000000000000000000000000000000000000000006109ff565b635c388821929061391d613905306124fd565b946139286139116103a1565b96879586948594611d3c565b84526004840161388d565b03915afa801561398e5761395c915f9161395f575b50613956606061394f60a084016138b0565b92016138b0565b90613373565b90565b61398191506101003d8111613987575b6139798183611d0f565b81019061386e565b5f61393d565b503d61396f565b611de6565b6139d26139ab613a13926139a561354b565b506138bd565b7f0000000000000000000000000000000000000000000000000000000000000000906135ee565b60206139fd7f0000000000000000000000000000000000000000000000000000000000000000610e4f565b63a035b1fe90613a0b6103a1565b948592611d3c565b82528180613a236004820161042c565b03915afa908115613a7257613a3f925f92613a42575b50613655565b90565b613a6491925060203d8111613a6b575b613a5c8183611d0f565b810190613623565b905f613a39565b503d613a52565b611de6565b613a82612710612faf565b90565b613acd613abf613b0e92613a9761354b565b507f0000000000000000000000000000000000000000000000000000000000000000906135ee565b613ac7613a77565b906135ee565b6020613af87f0000000000000000000000000000000000000000000000000000000000000000610e4f565b63a035b1fe90613b066103a1565b948592611d3c565b82528180613b1e6004820161042c565b03915afa918215613b9157613b6092613b5a915f91613b63575b50613b54613b44613a77565b613b4e6004610d14565b90613373565b906135ee565b90613655565b90565b613b84915060203d8111613b8a575b613b7c8183611d0f565b810190613623565b5f613b38565b503d613b72565b611de6565b613b9e61354b565b50613be36020613bcd7f0000000000000000000000000000000000000000000000000000000000000000610e4f565b63a035b1fe90613bdb6103a1565b938492611d3c565b82528180613bf36004820161042c565b03915afa8015613c6c57613c3992613c12925f92613c3c575b506135ee565b7f000000000000000000000000000000000000000000000000000000000000000090613655565b90565b613c5e91925060203d8111613c65575b613c568183611d0f565b810190613623565b905f613c0c565b503d613c4c565b611de6565b613c7961354b565b50613c846005610d14565b613c96613c905f6120c0565b916103d9565b115f14613cac5750613ca86005610d14565b5b90565b613cfe613cdd613d3f927f0000000000000000000000000000000000000000000000000000000000000000906135ee565b613cf8613ce8613a77565b613cf26004610d14565b90613373565b906135ee565b6020613d297f0000000000000000000000000000000000000000000000000000000000000000610e4f565b63a035b1fe90613d376103a1565b948592611d3c565b82528180613d4f6004820161042c565b03915afa918215613db157613d7e92613d78915f91613d83575b50613d72613a77565b906135ee565b90613655565b613ca9565b613da4915060203d8111613daa575b613d9c8183611d0f565b810190613623565b5f613d69565b503d613d92565b611de6565b613dbe61354b565b50613dc96005610d14565b613ddb613dd55f6120c0565b916103d9565b115f14613df15750613ded6005610d14565b5b90565b613e36906020613e207f0000000000000000000000000000000000000000000000000000000000000000610e4f565b63a035b1fe90613e2e6103a1565b948592611d3c565b82528180613e466004820161042c565b03915afa918215613ef857613ec392613e8b92613e6a925f92613ec8575b506135ee565b613e85613e75613a77565b613e7f6004610d14565b90613373565b906135ee565b613ebd7f0000000000000000000000000000000000000000000000000000000000000000613eb7613a77565b906135ee565b90613655565b613dee565b613eea91925060203d8111613ef1575b613ee28183611d0f565b810190613623565b905f613e64565b503d613ed8565b611de6565b6fffffffffffffffffffffffffffffffff1690565b613f1b81613efd565b03613f2257565b5f80fd5b90505190613f3382613f12565b565b9190606083820312613f8157613f7a90613f4f6060612437565b93613f5c825f830161245b565b5f860152613f6d8260208301613f26565b6020860152604001613f26565b6040830152565b612433565b90606082820312613f9f57613f9c915f01613f35565b90565b6103ab565b613fae9051613efd565b90565b613fc5613fc0613fca926111a3565b610729565b613efd565b90565b613fd5611813565b5060606140017f0000000000000000000000000000000000000000000000000000000000000000611618565b6393c52062929061402c614014306124fd565b946140376140206103a1565b96879586948594611d3c565b84526004840161388d565b03915afa90811561409b57614057916020915f9161406d575b5001613fa4565b6140696140635f613fb1565b91613efd565b1490565b61408e915060603d8111614094575b6140868183611d0f565b810190613f86565b5f614050565b503d61407c565b611de6565b6140b46140af6140b992613efd565b610729565b6103d9565b90565b6140c461354b565b5060606140f07f0000000000000000000000000000000000000000000000000000000000000000611618565b6393c52062929061411b614103306124fd565b9461412661410f6103a1565b96879586948594611d3c565b84526004840161388d565b03915afa801561417e5760206141489161414d935f91614150575b5001613fa4565b6140a0565b90565b614171915060603d8111614177575b6141698183611d0f565b810190613f86565b5f614141565b503d61415f565b611de6565b91906101008382031261422b576142249061419f610100612437565b936141ac825f830161245b565b5f8601526141bd826020830161245b565b60208601526141cf826040830161245b565b60408601526141e1826060830161245b565b60608601526141f3826080830161245b565b60808601526142058260a0830161245b565b60a08601526142178260c0830161245b565b60c086015260e00161245b565b60e0830152565b612433565b906101008282031261424a57614247915f01614183565b90565b6103ab565b6101006142af9161425e61354b565b506142887f00000000000000000000000000000000000000000000000000000000000000006109ff565b6142a46330f4f4bb6142986103a1565b95869485938493611d3c565b835260048301611366565b03915afa8015614314576142e2915f916142e5575b506142dc60406142d55f84016138b0565b92016138b0565b90613373565b90565b61430791506101003d811161430d575b6142ff8183611d0f565b810190614230565b5f6142c4565b503d6142f5565b611de6565b90565b61433061432b61433592614319565b610729565b6103d9565b90565b61434061354b565b5061434a8161424f565b6143737f00000000000000000000000000000000000000000000000000000000000000006109ff565b610100635c3888219184906143a261438a306124fd565b946143ad6143966103a1565b96879586948594611d3c565b84526004840161388d565b03915afa90811561455a576144189160a0915f9161452b575b50936143f17f0000000000000000000000000000000000000000000000000000000000000000611618565b61440d632c3c91576144016103a1565b95869485938493611d3c565b835260048301611366565b03915afa8015614526576144a1915f916144f8575b5061449b61445261444060a087016138b0565b61444c606088016138b0565b90613373565b916144956144718461446b670de0b6b3a764000061431c565b906135ee565b9161449061448a6080670de0b6b3a764000093016138b0565b9161431c565b613373565b90613655565b9061354f565b90816144c06144ba6144b5606087016138b0565b6103d9565b916103d9565b106144e9576144e6926144da60606144e0939492016138b0565b90613373565b90615d55565b90565b5050506144f55f6120c0565b90565b614519915060a03d811161451f575b6145118183611d0f565b8101906124df565b5f61442d565b503d614507565b611de6565b61454d91506101003d8111614553575b6145458183611d0f565b81019061386e565b5f6143c6565b503d61453b565b611de6565b906145799161457461456f611777565b61195e565b61457b565b565b9061458e9161458981614ace565b614b7b565b565b9061459a9161455f565b565b906145b6916145b16145ac611777565b61195e565b6145b8565b565b906145cb916145c681614ace565b614d81565b565b906145d79161459c565b565b906145f3916145ee6145e9611777565b61195e565b6145f5565b565b906146089161460381614ace565b614f7e565b565b90614614916145d9565b565b906146309161462b614626611777565b61195e565b614632565b565b9061463c82614ace565b8061464f6146495f6120c0565b916103d9565b14614660575b61465e916155fc565b565b506146c29060206146907f0000000000000000000000000000000000000000000000000000000000000000611591565b6370a08231906146b76146a2306124fd565b926146ab6103a1565b96879485938493611d3c565b835260048301612a78565b03915afa801561470e5761465e925f916146e0575b50909150614655565b614701915060203d8111614707575b6146f98183611d0f565b810190613623565b5f6146d7565b503d6146ef565b611de6565b9061471d91614616565b565b906147399161473461472f611777565b61195e565b61473b565b565b9061474e9161474981614ace565b6157e7565b565b9061475a9161471f565b565b6147759061477061476b611777565b61195e565b614777565b565b61478081614ace565b6147a97f0000000000000000000000000000000000000000000000000000000000000000611618565b9060606393c520629282906147d86147c0306124fd565b956147e36147cc6103a1565b97889586948594611d3c565b84526004840161388d565b03915afa9182156148445761480960406148149461480e935f91614816575b5001613fa4565b6140a0565b906157e7565b565b614837915060603d811161483d575b61482f8183611d0f565b810190613f86565b5f614802565b503d614825565b611de6565b6148529061475c565b565b61486d90614868614863611777565b61195e565b61486f565b565b8061488261487c5f6120c0565b916103d9565b14614894575b61489190615a3b565b50565b506148f560206148c37f0000000000000000000000000000000000000000000000000000000000000000611591565b6370a08231906148ea6148d5306124fd565b926148de6103a1565b95869485938493611d3c565b835260048301612a78565b03915afa801561494057614891915f91614912575b509050614888565b614933915060203d8111614939575b61492b8183611d0f565b810190613623565b5f61490a565b503d614921565b611de6565b61494e90614854565b565b6149699061496461495f611777565b61195e565b61496b565b565b8061497e6149785f6120c0565b916103d9565b14614990575b61498d90615c1c565b50565b506149f160206149bf7f0000000000000000000000000000000000000000000000000000000000000000611591565b6370a08231906149e66149d1306124fd565b926149da6103a1565b95869485938493611d3c565b835260048301612a78565b03915afa8015614a3c5761498d915f91614a0e575b509050614984565b614a2f915060203d8111614a35575b614a278183611d0f565b810190613623565b5f614a06565b503d614a1d565b611de6565b614a4a90614950565b565b5f7f4d61726b6574206973206e6f7420616c6c6f7765640000000000000000000000910152565b614a806015602092612eaa565b614a8981614a4c565b0190565b614aa29060208101905f818303910152614a73565b90565b15614aac57565b614ab46103a1565b62461bcd60e51b815280614aca60048201614a8d565b0390fd5b614ae4614adf614afd9260036130c5565b6118a9565b614af7614af160016104b2565b916104b2565b14614aa5565b565b9190604083820312614b275780614b1b614b24925f860161245b565b9360200161245b565b90565b6103ab565b90959492614b7994614b68614b7292614b5e61010096614b5461012088019c5f890190612555565b60a087019061052c565b60c085019061295f565b60e0830190610d64565b0190610d64565b565b90614c0190614ba97f0000000000000000000000000000000000000000000000000000000000000000611618565b60a06350d8cd4b94614bda7f0000000000000000000000000000000000000000000000000000000000000000611618565b614bf6632c3c9157614bea6103a1565b97889485938493611d3c565b835260048301611366565b03915afa918215614ccd576040935f93614c97575b505f614c489195614c5382614c2a306124fd565b614c33306124fd565b91614c3c6103a1565b9a8b998a988997611d3c565b875260048701614b2c565b03925af18015614c9257614c65575b50565b614c859060403d8111614c8b575b614c7d8183611d0f565b810190614aff565b50614c62565b503d614c73565b611de6565b614c48919350614cbe5f9160a03d8111614cc6575b614cb68183611d0f565b8101906124df565b939150614c16565b503d614cac565b611de6565b67ffffffffffffffff8111614cf057614cec602091611cf1565b0190565b611cfb565b90614d07614d0283614cd2565b612437565b918252565b614d155f614cf5565b90565b614d20614d0c565b90565b614d2b614d18565b90565b9193614d66614d7e9694614d5c614d709497614d526101208801995f890190612555565b60a087019061052c565b60c085019061295f565b60e0830190610d64565b610100818403910152611d81565b90565b90614e5b90614dda7f0000000000000000000000000000000000000000000000000000000000000000614dd37f0000000000000000000000000000000000000000000000000000000000000000611618565b839161298f565b614e037f0000000000000000000000000000000000000000000000000000000000000000611618565b60a06320b76e8194614e347f0000000000000000000000000000000000000000000000000000000000000000611618565b614e50632c3c9157614e446103a1565b97889485938493611d3c565b835260048301611366565b03915afa918215614f26576040935f93614ef0575b505f614ea19195614eac82614e84306124fd565b614e8c614d23565b91614e956103a1565b9a8b998a988997611d3c565b875260048701614d2e565b03925af18015614eeb57614ebe575b50565b614ede9060403d8111614ee4575b614ed68183611d0f565b810190614aff565b50614ebb565b503d614ecc565b611de6565b614ea1919350614f175f9160a03d8111614f1f575b614f0f8183611d0f565b8101906124df565b939150614e70565b503d614f05565b611de6565b9193614f63614f7b9694614f59614f6d9497614f4f6101208801995f890190612555565b60a087019061295f565b60c085019061052c565b60e0830190610d64565b610100818403910152611d81565b90565b61505890614fd77f0000000000000000000000000000000000000000000000000000000000000000614fcf7f0000000000000000000000000000000000000000000000000000000000000000611618565b5f199161298f565b6150007f0000000000000000000000000000000000000000000000000000000000000000611618565b60a06320b76e81926150317f0000000000000000000000000000000000000000000000000000000000000000611618565b61504d632c3c91576150416103a1565b97889485938493611d3c565b835260048301611366565b03915afa91821561517f576040935f93615149575b505f61509e916150a98297615081306124fd565b615089614d23565b916150926103a1565b9a8b998a988997611d3c565b875260048701614f2b565b03925af1801561514457615117575b506151157f00000000000000000000000000000000000000000000000000000000000000006151067f0000000000000000000000000000000000000000000000000000000000000000611618565b61510f5f6120c0565b9161298f565b565b6151379060403d811161513d575b61512f8183611d0f565b810190614aff565b506150b8565b503d615125565b611de6565b61509e9193506151705f9160a03d8111615178575b6151688183611d0f565b8101906124df565b93915061506d565b503d61515e565b611de6565b61518d906140a0565b9052565b91936151c96151e196946151bf6151d394976151b56101208801995f890190612555565b60a087019061295f565b60c0850190615184565b60e0830190610d64565b610100818403910152611d81565b90565b61523c60a06152127f0000000000000000000000000000000000000000000000000000000000000000611618565b632c3c91579061523185926152256103a1565b95869485938493611d3c565b835260048301611366565b03915afa9081156155f7575f916155c9575b50916152a47f000000000000000000000000000000000000000000000000000000000000000061529d7f0000000000000000000000000000000000000000000000000000000000000000611618565b839161298f565b60406152cf7f0000000000000000000000000000000000000000000000000000000000000000611618565b916320b76e81926153075f879395615312826152ea306124fd565b6152f2614d23565b916152fb6103a1565b9a8b998a988997611d3c565b875260048701614d2e565b03925af1908161559c575b50155f14615595576001615331575b50505b565b61535a7f0000000000000000000000000000000000000000000000000000000000000000611618565b60606393c52062918390615388615370306124fd565b9461539361537c6103a1565b96879586948594611d3c565b84526004840161388d565b03915afa908115615590575f91615562575b50916153b360208401613fa4565b6153c56153bf5f613fb1565b91613efd565b116154a1575b5061542e915060206153fc7f0000000000000000000000000000000000000000000000000000000000000000611591565b6370a082319061542361540e306124fd565b926154176103a1565b96879485938493611d3c565b835260048301612a78565b03915afa91821561549c5761546792615461915f9161546e575b5061545c6154555f6120c0565b60056120a0565b615c1c565b906155fc565b5f8061532c565b61548f915060203d8111615495575b6154878183611d0f565b810190613623565b5f615448565b503d61547d565b611de6565b6040906154cd7f0000000000000000000000000000000000000000000000000000000000000000611618565b61550c5f6320b76e816155176154e66020849a01613fa4565b6154ef306124fd565b6154f7614d23565b916155006103a1565b9b8c998a988997611d3c565b875260048701615191565b03925af191821561555d5761542e92615530575b6153cb565b6155509060403d8111615556575b6155488183611d0f565b810190614aff565b5061552b565b503d61553e565b611de6565b615583915060603d8111615589575b61557b8183611d0f565b810190613f86565b5f6153a5565b503d615571565b611de6565b505061532f565b6155bc9060403d81116155c2575b6155b48183611d0f565b810190614aff565b5061531d565b503d6155aa565b6155ea915060a03d81116155f0575b6155e28183611d0f565b8101906124df565b5f61524e565b503d6155d8565b611de6565b6156507f00000000000000000000000000000000000000000000000000000000000000006156497f0000000000000000000000000000000000000000000000000000000000000000611618565b849161298f565b6156d561567c7f0000000000000000000000000000000000000000000000000000000000000000611618565b9260a063238d6579936156ae7f0000000000000000000000000000000000000000000000000000000000000000611618565b6156ca632c3c91576156be6103a1565b96879485938493611d3c565b835260048301611366565b03915afa9182156157a3575f92615773575b50926156f2306124fd565b6156fa614d23565b823b1561576e575f9461572b8692615720946157146103a1565b998a9889978896611d3c565b8652600486016125af565b03925af180156157695761573d575b50565b61575c905f3d8111615762575b6157548183611d0f565b810190611d42565b5f61573a565b503d61574a565b611de6565b611d38565b61579591925060a03d811161579c575b61578d8183611d0f565b8101906124df565b905f6156e7565b503d615783565b611de6565b6157de6157e5946157d460e0949897956157ca61010086019a5f870190612555565b60a085019061052c565b60c0830190610d64565b0190610d64565b565b61586c6158137f0000000000000000000000000000000000000000000000000000000000000000611618565b9260a0638720316d936158457f0000000000000000000000000000000000000000000000000000000000000000611618565b615861632c3c91576158556103a1565b96879485938493611d3c565b835260048301611366565b03915afa91821561593b575f9261590b575b5092615889306124fd565b615892306124fd565b823b15615906575f946158c386926158b8946158ac6103a1565b998a9889978896611d3c565b8652600486016157a8565b03925af18015615901576158d5575b50565b6158f4905f3d81116158fa575b6158ec8183611d0f565b810190611d42565b5f6158d2565b503d6158e2565b611de6565b611d38565b61592d91925060a03d8111615934575b6159258183611d0f565b8101906124df565b905f61587e565b503d61591b565b611de6565b61594c61595191610ccc565b6106de565b90565b61595e9054615940565b90565b60409061598a615991949695939661598060608401985f85019061159d565b602083019061159d565b019061052c565b565b60207f7465640000000000000000000000000000000000000000000000000000000000917f4c657373206173736574732067656e657261746564207468616e2065787065635f8201520152565b6159ed6023604092612eaa565b6159f681615993565b0190565b615a0f9060208101905f8183039101526159e0565b90565b15615a1957565b615a216103a1565b62461bcd60e51b815280615a37600482016159fa565b0390fd5b615a4361354b565b50615a817f0000000000000000000000000000000000000000000000000000000000000000615a7a615a756001615954565b610754565b839161298f565b615a93615a8e6001615954565b610754565b602063cae270b6917f000000000000000000000000000000000000000000000000000000000000000090615afb5f7f000000000000000000000000000000000000000000000000000000000000000095615b0688615aef6103a1565b98899788968795611d3c565b855260048501615961565b03925af18015615b6f57615b3e915f91615b41575b5091615b38615b32615b2d8593613db6565b6103d9565b916103d9565b11615a12565b90565b615b62915060203d8111615b68575b615b5a8183611d0f565b810190613623565b5f615b1b565b503d615b50565b611de6565b60207f7870656374656400000000000000000000000000000000000000000000000000917f4c65737320636f6c6c61746572616c2067656e657261746564207468616e20655f8201520152565b615bce6027604092612eaa565b615bd781615b74565b0190565b615bf09060208101905f818303910152615bc1565b90565b15615bfa57565b615c026103a1565b62461bcd60e51b815280615c1860048201615bdb565b0390fd5b615c2461354b565b50615c627f0000000000000000000000000000000000000000000000000000000000000000615c5b615c566001615954565b610754565b839161298f565b615c74615c6f6001615954565b610754565b602063cae270b6917f000000000000000000000000000000000000000000000000000000000000000090615cdc5f7f000000000000000000000000000000000000000000000000000000000000000095615ce788615cd06103a1565b98899788968795611d3c565b855260048501615961565b03925af18015615d5057615d1f915f91615d22575b5091615d19615d13615d0e8593613c71565b6103d9565b916103d9565b11615bf3565b90565b615d43915060203d8111615d49575b615d3b8183611d0f565b810190613623565b5f615cfc565b503d615d31565b611de6565b90615d5e61354b565b5081615d72615d6c836103d9565b916103d9565b11155f14615d7f57505b90565b9050615d7c565b90615da19291615d9c615d976111c7565b61195e565b615da3565b565b91615db092919091615dbf565b565b90615dbd9291615d86565b565b90615e06615e0b93615df760049493615dde63a9059cbb919391612920565b92615de76103a1565b968794602086019081520161293c565b60208201810382520383611d0f565b612a8d565b565b90615e2791615e22615e1d6111c7565b61195e565b615e29565b565b90615e6d916020615e3b829392611591565b6370a0823190615e62615e4d306124fd565b92615e566103a1565b97889485938493611d3c565b835260048301612a78565b03915afa918215615ebb57615e89935f93615e8b575b50615dbf565b565b615ead91935060203d8111615eb4575b615ea58183611d0f565b810190613623565b915f615e83565b503d615e9b565b611de6565b90615eca91615e0d565b565b615edc615ed76111c7565b61195e565b615ee4615f35565b565b615eef9061072c565b90565b615efb90615ee6565b90565b615f0790610748565b90565b905090565b615f1a5f8092615f0a565b0190565b615f2790615f0f565b90565b15615f3157565b5f80fd5b615f7a5f80615f4b615f4633615ef2565b615efe565b615f54306124fd565b31615f5d6103a1565b9081615f6881615f1e565b03925af1615f74612b64565b50615f2a565b565b615f84615ecc565b565b90615fa19291615f9c615f976111c7565b61195e565b615fa3565b565b91615fb09291909161298f565b565b90615fbd9291615f86565b56fea264697066735822122042f08489efa257df34392e642cbb41d279a93ffe7b2f01563a585552e669d95464736f6c6343000815003300000000000000000000000044ac1031d245d965fe5f016da9ba643cd79f95f3000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a3931d71877c0e7a3148cb7eb4463524fec27fbd0000000000000000000000000c426d174fc88b7a25d59945ab2f7274bf7b4c79000000000000000000000000cd0066ec3f96afe3f6015539d16def2ce648ab770000000000000000000000002fa62f205d6c33071d52c95252630d8b1927edef