1 tx
4 calls
constructor
constructor(address kycRegistry_, address poolRegistry_, address sharePriceCalculatorFactory_, address collateralManagerFactory_)
functions
COLLATERAL_MANAGER_FACTORY
viewfunction COLLATERAL_MANAGER_FACTORY() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEPLOYER_ROLE
viewfunction DEPLOYER_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
ICL_IMPLEMENTATION
viewfunction ICL_IMPLEMENTATION() view returns (address)
KYC_REGISTRY
viewfunction KYC_REGISTRY() view returns (address)
POOL_REGISTRY
viewfunction POOL_REGISTRY() view returns (address)
SHARE_PRICE_CALCULATOR_FACTORY
viewfunction SHARE_PRICE_CALCULATOR_FACTORY() view returns (address)
SHARE_TOKEN_IMPLEMENTATION
viewfunction SHARE_TOKEN_IMPLEMENTATION() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
createInsuranceCapitalLayer
nonpayablefunction createInsuranceCapitalLayer(address depositTokenRegistry, string tokenName, string tokenSymbol, address admin, address operator, uint256 initialSharePrice) returns (address)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
events
InsuranceCapitalLayerCreated
event InsuranceCapitalLayerCreated(address indexed icl, address indexed shareToken)
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)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
creation bytecode
0x61014034620001ae576001600160401b0390601f6200774c38819003918201601f1916830191908483118484101762000198578160809285926040958652833981010312620001ae576200005382620001b3565b6200006160208401620001b3565b906200007d606062000075858701620001b3565b9501620001b3565b6001600160a01b0391821660805291811660a05292831660c052821660e0528051614a36808201939190858511828610176200019857620012e2823980600094039084f09384156200018c578161010095168552825190611a348083019183831090831117620001785790829162005d188339039084f09283156200016d5750610120921682526200010f33620001c8565b50519061108892836200025a843960805183818161040f01526108d5015260a05183610ab3015260c0518381816101760152610382015260e051836109aa015251828181610489015261091c01525181818161030801526109630152f35b8251903d90823e3d90fd5b634e487b7160e01b86526041600452602486fd5b505051903d90823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b51906001600160a01b0382168203620001ae57565b6001600160a01b031660008181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205490919060ff166200025557818052816020526040822081835260205260408220600160ff1982541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b509056fe60808060405260043610156200001457600080fd5b600090813560e01c90816301ffc9a71462000ae2575080631cda4a8d1462000a9b578063248a9ca31462000a6d5780632f2ff15d1462000a2857806336568abe14620009d9578063439577a014620009925780635db27897146200094b5780637a89862914620009045780638b7cc1e314620008bd57806391d148541462000871578063a217fddf1462000853578063ab6343c414620001a5578063b18fd8a8146200015e578063d547741f14620001155763ecd0026114620000d657600080fd5b34620001125780600319360112620001125760206040517ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c8152f35b80fd5b50346200011257604036600319011262000112576200015a6004356200013a62000b3c565b908084528360205262000154600160408620015462000bfa565b62000ca0565b5080f35b503462000112578060031936011262000112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034620001125760c03660031901126200011257600435906001600160a01b038216820362000112576024356001600160401b0381116200067d57620001f090369060040162000b9f565b6044356001600160401b0381116200084f576200021290369060040162000b9f565b6064356001600160a01b03811690036200084f57608435906001600160a01b03821682036200068c577ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c808552846020526040852033865260205260ff6040862054161562000831575060405163de7ea79d60e01b602082015260806024820152620002da81620002be620002ab60a483018862000d16565b8281036023190160448401528562000d16565b6012606483015233608483015203601f19810183528262000b7d565b604051906102d382018281106001600160401b038211176200081d5782916200032e916102d362000d8085397f00000000000000000000000000000000000000000000000000000000000000009062000d58565b039085f0948515620006cf57604051633d1c7bfd60e01b81526001600160a01b03828116600483015260a4356024830152606480358216604484015285821690830152909290602090849060849082908a907f0000000000000000000000000000000000000000000000000000000000000000165af192831562000812578693620007c0575b50916200045b939162000405620003f29694604051978896632c021a4360e21b602089015233602489015260e0604489015261010488019062000d16565b8681036023190160648801529062000d16565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116608487015293841660a486015290831660c4850152911660e483015203601f19810183528262000b7d565b604051906102d382018281106001600160401b03821117620007ac578291620004af916102d362000d8085397f00000000000000000000000000000000000000000000000000000000000000009062000d58565b039082f080156200079f5760405163a217fddf60e01b8082526001600160a01b0394851694929092169190602081600481885afa908115620006cf57849162000767575b50843b156200068c57604051632f2ff15d60e01b80825260048201929092526064356001600160a01b031660248201528481604481838a5af18015620006f25762000751575b5060405163d539139360e01b8152602081600481895afa908115620006f257859162000719575b50853b15620007155760405182815260048101919091526001600160a01b03841660248201528481604481838a5af18015620006f257908591620006fd575b5050823b156200068c576040516340f797bb60e01b815260048101869052848160248183885af18015620006f257908591620006da575b5050604051918252602082600481865afa918215620006cf57849262000690575b50823b156200068c5760405190815260048101919091526064356001600160a01b03166024820152828160448183865af18015620006815762000665575b50602092817fc914ea709f3eb6988a1adfd36b9ecfb22a736fce308704c1ed8c596a0301ef8e6040519480a38152f35b62000671839162000b53565b6200067d573862000635565b5080fd5b6040513d85823e3d90fd5b8380fd5b9091506020813d602011620006c6575b81620006af6020938362000b7d565b81010312620006c157519038620005f7565b600080fd5b3d9150620006a0565b6040513d86823e3d90fd5b620006e59062000b53565b6200068c578338620005d6565b6040513d87823e3d90fd5b620007089062000b53565b6200068c5783386200059f565b8480fd5b90506020813d60201162000748575b81620007376020938362000b7d565b81010312620006c157513862000560565b3d915062000728565b6200075f9094919462000b53565b923862000539565b90506020813d60201162000796575b81620007856020938362000b7d565b810103126200068c575138620004f3565b3d915062000776565b50604051903d90823e3d90fd5b634e487b7160e01b84526041600452602484fd5b9092506020813d60201162000809575b81620007df6020938362000b7d565b810103126200080557516001600160a01b03811681036200080557916200045b620003b4565b8580fd5b3d9150620007d0565b6040513d88823e3d90fd5b634e487b7160e01b87526041600452602487fd5b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b8280fd5b50346200011257806003193601126200011257602090604051908152f35b503462000112576040366003190112620001125760ff60406020926200089662000b3c565b60043582528185528282206001600160a01b03909116825284522054604051911615158152f35b503462000112578060031936011262000112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503462000112578060031936011262000112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503462000112578060031936011262000112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503462000112578060031936011262000112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034620001125760403660031901126200011257620009f762000b3c565b336001600160a01b0382160362000a16576200015a9060043562000ca0565b60405163334bd91960e11b8152600490fd5b50346200011257604036600319011262000112576200015a60043562000a4d62000b3c565b908084528360205262000a67600160408620015462000bfa565b62000c21565b5034620001125760203660031901126200011257600160406020926004358152808452200154604051908152f35b503462000112578060031936011262000112576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9050346200067d5760203660031901126200067d5760043563ffffffff60e01b81168091036200084f5760209250637965db0b60e01b811490811562000b2a575b5015158152f35b6301ffc9a760e01b1490503862000b23565b602435906001600160a01b0382168203620006c157565b6001600160401b03811162000b6757604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b0382111762000b6757604052565b81601f82011215620006c1578035906001600160401b03821162000b67576040519262000bd7601f8401601f19166020018562000b7d565b82845260208383010111620006c157816000926020809301838601378301015290565b80600052600060205260406000203360005260205260ff6040600020541615620008315750565b9060009180835282602052604083209160018060a01b03169182845260205260ff6040842054161560001462000c9b57808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b9060009180835282602052604083209160018060a01b03169182845260205260ff60408420541660001462000c9b5780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b919082519283825260005b84811062000d43575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520162000d21565b6001600160a01b03909116815260406020820181905262000d7c9291019062000d16565b9056fe60806040526102d38038038061001481610194565b92833981019060408183031261018f5780516001600160a01b03811680820361018f5760208381015190936001600160401b03821161018f570184601f8201121561018f5780519061006d610068836101cf565b610194565b9582875285838301011161018f57849060005b83811061017b57505060009186010152813b15610163577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351156101455750600080848461012c96519101845af4903d1561013c573d61011c610068826101cf565b908152600081943d92013e6101ea565b505b6040516085908161024e8239f35b606092506101ea565b9250505034610154575061012e565b63b398979f60e01b8152600490fd5b60249060405190634c9c8ce360e01b82526004820152fd5b818101830151888201840152869201610080565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101b957604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b957601f01601f191660200190565b9061021157508051156101ff57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580610244575b610222575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561021a56fe60806040527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600090819081906001600160a01b0316368280378136915af43d82803e15604b573d90f35b3d90fdfea264697066735822122064e05d6b50f7e38be358c5202a9c5465626b986a9ff403ce9b298bc4f4509dbb64736f6c63430008140033a26469706673582212204246a924d2afef461866302df991654983b700d98497f920d6b8d7669d14a81964736f6c6343000814003360a08060405234620000d157306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000c257506001600160401b036002600160401b0319828216016200007c575b60405161495f9081620000d7823960805181818161268301526127260152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880806200005c565b63f92ee8a960e01b8152600490fd5b600080fdfe6080604081815260048036101561001557600080fd5b600092833560e01c90816301ffc9a7146137005750806305db2f41146136c5578063061525371461366c57806306fdde03146135825780630df9ef2c146135225780630efe6a8b14613209578063156c2a6e146131e057806320483dd114613134578063205023d3146130f957806322b6fea914612fd957806323be345c14612fb0578063248a9ca314612f795780632b38e26614612f225780632ccbef8b14612d8d5780632e08ebcd14612d1c5780632e718ab714612ce15780632eebe78e14612cbd5780632f2ff15d14612c945780633278eb0414612c6b57806336568abe14612c24578063383e6d4a14612b6a5780633e5541f114612ab95780633f4ba83a14612a4257806340f797bb146129b65780634788a26b146129565780634b155b971461292d5780634efde8d01461290e5780634f1ef286146126d557806352d1902d1461266e5780635a8f00c81461261e5780635b17d04b146125b95780635c975abb14612588578063608fc37a146121fb578063635b6a3a1461219b57806363f926231461208157806366c4257b146120495780636c24a76f14611f635780636c9fa59e14611f3b57806375b238fc14611f00578063842a05d414611e775780638456cb5914611e0f57806384b594dc14611c405780638795feb814611adf5780638863e5c4146117a55780638dcfbfab146115ba5780639137c1771461157d57806391d148541461152b57806395d89b411461143757806399caf5dd1461120e5780639b18847e1461116d5780639f5bd0f3146110ba578063a217fddf1461109f578063a64b6e5f14610f52578063a819462514610d6a578063a981c7b414610d3d578063ad3cb1cc14610cf8578063b008690c14610a32578063b04b3f57146109f3578063b8b99b7a146109a5578063b8f82b2614610973578063beb96acf14610855578063c5cc6bb314610807578063c79445d0146107cc578063cc2b2523146107ad578063cf177dbc14610655578063d1f810a514610611578063d547741f146105c5578063e63ab1e91461058a578063f5b541a614610561578063f72c0d8b146105345763fade00fe1461033057600080fd5b3461044f57602090816003193601126104415780359061034e614255565b61035661422a565b6009546001600160a01b03908116330361052557821561050f5785541684516370a0823160e01b9081815230848201528581602481865afa801561050557859189916104d4575b501061045357509085916103b384600c54613f89565b600c55803b1561044f578383916103e093838951809681958294632770a7eb60e21b845230908401613eb0565b03925af180156104455761042d575b50507f0158b5c01453469bf562bebba531d45a08d8162682a2d56d652909caf8e9cbaa9251908152a1600160008051602061490a8339815191525580f35b610436906137c4565b6104415783386103ef565b8380fd5b85513d84823e3d90fd5b8280fd5b9380879395602488949851809981938252308a8301525afa9283156104c95792610493575b505163cf47918160e01b815292830152602482015260449150fd5b90915084813d83116104c2575b6104aa8183613823565b810103126104bd57604493519085610478565b600080fd5b503d6104a0565b8251903d90823e3d90fd5b809250878092503d83116104fe575b6104ed8183613823565b810103126104bd578490513861039d565b503d6104e3565b87513d8a823e3d90fd5b50602491845191633728b83d60e01b8352820152fd5b5083516367a3563f60e01b8152fd5b50503461055d578160031936011261055d576020905160008051602061484a8339815191528152f35b5080fd5b50503461055d578160031936011261055d57602090516000805160206148aa8339815191528152f35b50503461055d578160031936011261055d57602090517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b50903461044f578060031936011261044f5761060d913561060860016105e961376a565b938387526000805160206148ca83398151915260205286200154613a6e565b613cda565b5080f35b50503461055d578060031936011261055d5761065190610643610632613754565b61063a61422a565b60243590614363565b919492935194859485613929565b0390f35b503461044f578160031936011261044f5761066e613754565b6024359061067a614255565b61068261422a565b6009546001600160a01b0391908216330361079d5716928051926370a0823160e01b845230818501526020938481602481895afa908115610793578791610766575b50858752600d85526106ed6106dc8489205486614285565b878952600e87528489205490614285565b9081811061074d57505050907f3b3cc6e6e4f41ea6d60a8a018c24e335d06b91f3eaa9dfc6e7f51cd00155c4e49291848652600d8352808620610731838254614285565b905551908152a2600160008051602061490a8339815191525580f35b604493519263adb9e04360e01b84528301526024820152fd5b90508481813d831161078c575b61077d8183613823565b810103126104bd5751386106c4565b503d610773565b83513d89823e3d90fd5b84516367a3563f60e01b81528490fd5b50503461055d578160031936011261055d576020906005549051908152f35b50503461055d578160031936011261055d57602090517fe28434228950b641dbbc0178de89daa359a87c6ee0d8399aeace52a98fe902b98152f35b50503461055d578060031936011261055d57602091610824613754565b8261082d61376a565b6001600160a01b039283168452600f8652922091166000908152908352819020549051908152f35b503461044f5761086436613884565b91939061086f614255565b61087761422a565b6009546001600160a01b039590861633036109635785821695861561094c57841561093557811694858852600d6020528388205485811061091657505050916020916108fc827f466568d995c4d20c1611745da0ee5c713e401f183df24615614ad6ce33e67fce95878a52600d8652838a206108f4838254613f89565b9055876147e4565b51908152a3600160008051602061490a8339815191525580f35b8561093191865194859463162f9a1960e31b8652850161480b565b0390fd5b8351633728b83d60e01b8152808701869052602490fd5b8351630bc2c5df60e11b8152808701889052602490fd5b82516367a3563f60e01b81528590fd5b50503461055d578060031936011261055d5761065190610643610994613754565b61099c61422a565b60243590613fac565b50503461055d578060031936011261055d576020916109c2613754565b826109cb61376a565b6001600160a01b03928316845260108652922091166000908152908352819020549051908152f35b50503461055d578060031936011261055d57602090610a29610a13613754565b610a1b61376a565b90610a2461422a565b614746565b90519015158152f35b503461044f5760e036600319011261044f57610a4c613754565b906001600160401b03602435818111610cf457610a6c903690840161390b565b50604435818111610cf457610a84903690840161390b565b50610a8d613780565b926001600160a01b0392608435908482168083036104bd5760a435868116928382036104bd5760c435938885168095036104bd578a987ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009a60ff8c54809c1c1615998b169a8b1580610ced575b6001809d149081610ce3575b159081610cda575b50610cca5767ffffffffffffffff1981168c178d558a610cab575b50610b32613df0565b610b3a613df0565b8a60008051602061490a83398151915255610b53613df0565b610b5b613df0565b610b63613df0565b6000805160206148ea833981519152805460ff19169055610b82613df0565b81891615610c9b5716938415610c8b5715610c7c5715610c6e578315610c60575086546001600160a01b0319908116909217875560068054610100600160a81b03191660089290921b610100600160a81b0316919091179055600780549091169091179055610c199190610c0990610bf983613aa1565b50610c0333613aa1565b50613b2f565b50610c1333613b2f565b50613bcd565b50610c22578380f35b815460ff60401b191690915590519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880808380f35b8951630538eaff60e51b8152fd5b8951637bfd2e8360e01b8152fd5b50895163eb32d3bf60e01b8152fd5b8b51630201aae160e21b81528390fd5b8c5163016ed19f60e21b81528490fd5b68ffffffffffffffffff191668010000000000000001178c5538610b29565b8d5163f92ee8a960e01b81528590fd5b90501538610b0e565b303b159150610b06565b508a610afa565b8580fd5b50503461055d578160031936011261055d57805161065191610d19826137ed565b60058252640352e302e360dc1b602083015251918291602083526020830190613844565b50503461055d578160031936011261055d57600654905160089190911c6001600160a01b03168152602090f35b5082903461055d578260031936011261055d57610d85613754565b92602490813590610d94614255565b610d9c61422a565b6009546001600160a01b039081163303610f4257808716948515610f2c578315610f175781875416908351956370a0823160e01b808852308389015260209788818481885afa908115610f0d579088918c91610edc575b5010610e6e5750505050828697610e5492877f3a19b6efdb4fa34812cbff59a94c0d953fa352016b0c438a40a5520d69b26492989952600b8752848a20610e3b848254613f89565b9055610e4983600c54613f89565b600c558954166147e4565b51908152a2600160008051602061490a8339815191525580f35b90898689808a95858451809a81938252308b8301525afa9283156104c95792610eab575b505163cf47918160e01b81529384015282015260449150fd5b90915085813d8311610ed5575b610ec28183613823565b810103126104bd57604494519086610e92565b503d610eb8565b8092508a8092503d8311610f06575b610ef58183613823565b810103126104bd578790518d610df3565b503d610eeb565b87513d8d823e3d90fd5b939450505191633728b83d60e01b8352820152fd5b8251630bc2c5df60e11b81529081018690528490fd5b81516367a3563f60e01b81528590fd5b5082903461055d57610f6336613884565b92610f6f929192614255565b610f7761422a565b6008546001600160a01b0392908316330361109057821691821561107a57831680156110645750831561104d5785516370a0823160e01b81523082820152602081602481865afa908115611043578691611012575b50848110610ff6575050610fe19394506147e4565b600160008051602061490a8339815191525580f35b865163adb9e04360e01b81529182015260248101849052604490fd5b90506020813d821161103b575b8161102c60209383613823565b810103126104bd575187610fcc565b3d915061101f565b87513d88823e3d90fd5b8551633728b83d60e01b8152908101849052602490fd5b8651630bc2c5df60e11b81529182015260249150fd5b5060249186519163961c9a4f60e01b8352820152fd5b50855163b693a60960e01b8152fd5b50503461055d578160031936011261055d5751908152602090f35b50503461055d5760208060031936011261044f576110d6613754565b926110df61422a565b6001600160a01b039384168152600a825282812083518154808252918352838320818501949192859190855b8181106111575750505082611121910383613823565b8451948186019282875251809352850193925b8281106111415785850386f35b8351871685529381019392810192600101611134565b82548a168452928401926001928301920161110b565b50913461120b578160031936011261120b57611187613754565b9161119061376a565b60018060a01b03809416938484526010602052828420911690816000526020528160002054938352600f60205281832090600052602052806000205483810392808512828512811690838613901516176111f857506060945081519384526020840152820152f35b634e487b7160e01b815260118652602490fd5b80fd5b50903461044f578060031936011261044f57611228613754565b9060243590611235614255565b61123d61422a565b6001600160a01b03831692831561142057821561140957331580156113f0575b6113d457508051636eb1769f60e11b8082526020959186818061128330338884016145bf565b0381895afa9081156113ca579085918991611399575b501061130d575050828552600f8452808520336000528452806000206112c0838254614285565b90556112ce823033866142b4565b519081527fdad7dfd8821ceb98a6dd83b8f330e604bd0e832f55ca902bbfadabde5e40132342933392a4600160008051602061490a8339815191525580f35b9480919583949593519384918252818061132a30338c84016145bf565b03915afa95861561138e579561135a575b505051630c95cf2760e11b81529283926109319291903390850161480b565b908093929550813d8311611387575b6113738183613823565b810103126104bd579051926109313861133b565b503d611369565b8351903d90823e3d90fd5b809250888092503d83116113c3575b6113b28183613823565b810103126104bd5784905138611299565b503d6113a8565b84513d8a823e3d90fd5b815163188fe79360e21b815290819061093190338389016145bf565b506113f961422a565b6114033382614746565b1561125d565b8151633728b83d60e01b8152808601849052602490fd5b815163961c9a4f60e01b8152808601859052602490fd5b50913461120b578060031936011261120b575080519060009060035491600183811c90808516948515611521575b602095868410811461150e578388528794939291879082156114ec5750506001146114ac575b5050610651929161149d910385613823565b51928284938452830190613844565b90859250600360005282600020916000925b8284106114d4575050508201018161149d61148b565b8054848a0186015288955087949093019281016114be565b60ff19168682015292151560051b8501909201925083915061149d905061148b565b634e487b7160e01b855260228952602485fd5b91607f1691611465565b503461044f578160031936011261044f578160209361154861376a565b923581526000805160206148ca8339815191528552209060018060a01b0316600052825260ff81600020541690519015158152f35b50503461055d5736600319011261120b576115b7611599613754565b6115a161376a565b906115aa61422a565b6115b26139b6565b6145e8565b80f35b5082903461055d578260031936011261055d576115d5613754565b92602435906115e2614255565b6115ea61422a565b6009546001600160a01b0390811633036117955780861693841561177e5783156117675785548351636eb1769f60e11b80825260209695949392841691878180611637308f838a016145bf565b0381865afa90811561175d579087918b9161172c575b50106116af5750505082610e54918798877f6926ad0f7f6f6814be2630ac9d46a2d1988f933254ad20700c1425aaf64a27a4989952600b8752848a20611694848254614285565b90556116a283600c54614285565b600c5530918a54166142b4565b8993508885888089948351968791825281806116ce308d8d84016145bf565b03915afa9283156104c957926116fa575b5051630c95cf2760e11b81529485946109319450850161480b565b90915083813d8311611725575b6117118183613823565b810103126104bd57610931925190866116df565b503d611707565b809250898092503d8311611756575b6117458183613823565b810103126104bd578690518c61164d565b503d61173b565b86513d8c823e3d90fd5b8251633728b83d60e01b8152908101849052602490fd5b82516313053d9360e21b8152908101859052602490fd5b81516367a3563f60e01b81528490fd5b503461044f57608036600319011261044f576117bf613754565b6024803592604435916117d0613780565b926117d9614255565b6117e161422a565b60015487516373bed91960e11b81526001600160a01b0386811686830152939160209190829082908590829089165afa908115611ad5578b91611ab8575b5015611aa85761182d61422a565b60065460ff811615611a98578815611a825789516313a9822560e31b8152888616878201819052949160081c86169083818681855afa9081156119fa578d91611a55575b5015611a3f578a5163146f4ea360e21b815295949392919082908790818061189c8f8f838f01613eb0565b03915afa928315611a35578c93611a04575b6118e09650826118be858d613f89565b8d8c8b8a6007541692519b8c9485938493633e5541f160e01b85528401613eb0565b03915afa9687156119fa578d976119cb575b508187106119b05750508261192692878b938e9a999897968b525261191b8c8a20918254614285565b9055309033906142b4565b845416803b156119ac57611951938580948a51968795869485936340c10f1960e01b85528401613eb0565b03925af1801561044557611998575b505061198060008051602061488a83398151915293519283923384614292565b0390a1600160008051602061490a8339815191525580f35b6119a1906137c4565b610441578338611960565b8480fd5b6044918891888e519363658ec5dd60e11b8552840152820152fd5b9096508281813d83116119f3575b6119e38183613823565b810103126104bd575195386118f2565b503d6119d9565b8c513d8f823e3d90fd5b92508186813d8311611a2e575b611a1b8183613823565b810103126104bd576118e09551926118ae565b503d611a11565b8b513d8e823e3d90fd5b8a51639d42b4b360e01b81528088018690528490fd5b611a759150843d8611611a7b575b611a6d8183613823565b810190613e63565b38611871565b503d611a63565b8951633728b83d60e01b81528087018a90528390fd5b895163bb60b89360e01b81528690fd5b885163110781d160e31b81528590fd5b611acf9150823d8411611a7b57611a6d8183613823565b3861181f565b8a513d8d823e3d90fd5b50903461044f578060031936011261044f57611af9613754565b92611b0261376a565b93611b0b614255565b611b1361422a565b7f6c0757dc3e6b28b2580c03fd9e96c274acf4f99d91fbec9b418fa1d70604ff1c94856000526020956000805160206148ca83398151915287528460002033600052875260ff85600020541615611c2257506001600160a01b03918216918215611c0b578116928315611bf45782815285875284812054958615611be657838252875284812055611ba6908590836147e4565b7fd74e462593ae4127bbc183389b3775357426f157e9625f81271612b86b8000a6858451868152a3600160008051602061490a8339815191525551908152f35b855163211b631760e21b8152fd5b8451630bc2c5df60e11b8152808701859052602490fd5b845163961c9a4f60e01b8152808701849052602490fd5b845163e2517d3f60e01b815233818801526024810191909152604490fd5b50903461044f57611c5036613884565b93909192611c5c61394e565b611c64614255565b611c6c61422a565b6001600160a01b0383811694908515611df8578615611de15781169384158015611dc8575b611dac575081516370a0823160e01b815230848201526020939084816024818a5afa908115611da2578991611d73575b50611cda611ceb91888b52600d8752858b205490613f89565b878a52600e8652848a205490613f89565b878110611d5757505090611d3b867ff7924cd170ae143405ff2557ce6b4615c3a29b30bcd8a70b49d4d0b3475efb0c9493878a5260108552838a20876000528552836000206108f4838254614285565b519485524294a4600160008051602061490a8339815191525580f35b835163adb9e04360e01b81529182015260248101879052604490fd5b90508481813d8311611d9b575b611d8a8183613823565b810103126104bd5751611cda611cc1565b503d611d80565b84513d8b823e3d90fd5b915163188fe79360e21b815292839261093192909184016145bf565b50611dd161422a565b611ddb8282614746565b15611c91565b8251633728b83d60e01b8152808501889052602490fd5b825163961c9a4f60e01b8152808501879052602490fd5b50503461055d578160031936011261055d5760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891611e4d613a12565b611e5561422a565b6000805160206148ea833981519152805460ff1916600117905551338152a180f35b50903461044f57602036600319011261044f57611e92613754565b611e9a61422a565b611ea261394e565b6001600160a01b0316918215611ef25750600880546001600160a01b03191683179055519081527f507e88d0e3541203c8e7dba038a3e807ac9121f0872ed9ed895cd7f3358334eb90602090a180f35b9051630d432b0160e21b8152fd5b50503461055d578160031936011261055d57602090517fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758152f35b50503461055d578160031936011261055d57905490516001600160a01b039091168152602090f35b503461044f576020928360031936011261120b576001600160a01b03611f87613754565b84516370a0823160e01b8152308582015291168582602481845afa91821561203f578392612010575b508252600d85528382205490600e8652848320549386528483205492611fdf84611fda8786614285565b614285565b821115612005575092611ff8611ff892611ffd95613f89565b613f89565b905b51908152f35b935050505090611fff565b9091508581813d8311612038575b6120288183613823565b810103126104bd57519038611fb0565b503d61201e565b85513d85823e3d90fd5b50503461055d57602036600319011261055d5760209181906001600160a01b03612071613754565b168152600b845220549051908152f35b503461044f578160031936011261044f5761209a613754565b600854602435916001600160a01b03918216330361218b576120ba61422a565b16928051926370a0823160e01b845230818501526020938481602481895afa90811561079357879161215e575b50858752600e85526121106120ff8489205486614285565b878952600d87528489205490614285565b9081811061074d57505050907f36bea377ee4a4c4516cc608cc232173faafbeb7ee10ad11c6420f2863a97644b9291848652600e8352808620612154838254614285565b905551908152a280f35b90508481813d8311612184575b6121758183613823565b810103126104bd5751386120e7565b503d61216b565b845163b693a60960e01b81528490fd5b503461044f57602036600319011261044f576121b5613754565b6121bd61422a565b6121c561394e565b6001600160a01b03169182156121ee575050600780546001600160a01b03191691909117905580f35b51630538eaff60e51b8152fd5b5082906020928360031936011261044f57813591612217614255565b61221f61422a565b60015482516373bed91960e11b815233838201526001600160a01b03949187908290602490829089165afa90811561257e578691612561575b50156125525734156125435760065460ff81161561253357849060081c1683519463e861e90760e01b865287868581855afa9586156125295787966124ed575b5084516313a9822560e31b815286821685820181905293908981602481875afa9081156124735789916124d0575b50156124b857888651809463146f4ea360e21b825281806122ea348d8c8401613eb0565b03915afa9081156124ae57889161247d575b61232c93508961230c8334613f89565b84600754168a8a51809881948293633e5541f160e01b84528d8401613eb0565b03915afa938415612473578994612444575b508084106124275750848899858a98999a525261235f878720918254614285565b9055845416803b156119ac5785516340c10f1960e01b8152918591839182908490829061238f90338b8401613eb0565b03925af1801561241d57908491612409575b5050803b1561044f578290845192838092630d0e30db60e41b825234905af180156123ff576123eb575b50815160008051602061488a833981519152908061198034873384614292565b6123f4906137c4565b61044f5782846123cb565b83513d84823e3d90fd5b612412906137c4565b61044f5782876123a1565b85513d86823e3d90fd5b93505050604493519263658ec5dd60e11b84528301526024820152fd5b9093508981813d831161246c575b61245c8183613823565b810103126104bd5751928a61233e565b503d612452565b87513d8b823e3d90fd5b90508883813d83116124a7575b6124948183613823565b810103126104bd5761232c9251906122fc565b503d61248a565b86513d8a823e3d90fd5b50509251639d42b4b360e01b81529182015260249150fd5b6124e791508a3d8c11611a7b57611a6d8183613823565b8a6122c6565b9095508781813d8311612522575b6125058183613823565b8101031261251e5751858116810361251e579488612298565b8680fd5b503d6124fb565b85513d89823e3d90fd5b835163bb60b89360e01b81528390fd5b509051633b903ec760e01b8152fd5b50905163110781d160e31b8152fd5b6125789150873d8911611a7b57611a6d8183613823565b87612258565b84513d88823e3d90fd5b50503461055d578160031936011261055d5760209060ff6000805160206148ea833981519152541690519015158152f35b503461044f57602036600319011261044f57803590811515809203610441576125e061422a565b6125e861394e565b600654928260ff851615151461260957505060ff169060ff19161760065580f35b91602492519163ca255b0b60e01b8352820152fd5b503461044f57602036600319011261044f576001600160a01b03612640613754565b16801561265a579282916020948252845220549051908152f35b602492519163961c9a4f60e01b8352820152fd5b50913461120b578060031936011261120b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036126c8576020905160008051602061486a8339815191528152f35b5163703e46dd60e11b8152fd5b50908060031936011261044f576126ea613754565b9060249384356001600160401b03811161055d573660238201121561055d5761271b903690878188013591016138d4565b6001600160a01b03937f000000000000000000000000000000000000000000000000000000000000000085163081149081156128f2575b506128e25760008051602061484a83398151915294856000526020956000805160206148ca83398151915287528560002033600052875260ff866000205416156128c5575081169484516352d1902d60e01b8152818189818a5afa859181612896575b506127d05750505050505191634c9c8ce360e01b8352820152fd5b868996899260008051602061486a833981519152908181036128815750853b1561286c5780546001600160a01b0319168317905551869392917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2855115612850575050835161060d94839201845af461284a613d5d565b91613d8d565b9350935050503461286057505080f35b63b398979f60e01b8152fd5b5051634c9c8ce360e01b815291820152859150fd5b848a91845191632a87526960e21b8352820152fd5b9091508281813d83116128be575b6128ae8183613823565b81010312610cf4575190386127b5565b503d6128a4565b855163e2517d3f60e01b815233818a0152808a0191909152604490fd5b835163703e46dd60e11b81528690fd5b90508560008051602061486a8339815191525416141538612752565b50503461055d578160031936011261055d57602090600c549051908152f35b50503461055d578160031936011261055d5760015490516001600160a01b039091168152602090f35b503461044f57602036600319011261044f57612970613754565b61297861422a565b61298061394e565b6001600160a01b03169182156129a9575050600180546001600160a01b03191691909117905580f35b51630201aae160e21b8152fd5b50903461044f57602036600319011261044f5781356001600160a01b0381169290839003610441576129e661394e565b6011549160ff8316612a3557505082546001600160a01b0319168217835560ff19166001176011557fdb40a5259506fa101ac4485d4ccbd019c99ada5fb7212fe1254374f7a10e02dc8280a280f35b51630f4bac1b60e21b8152fd5b503461044f578260031936011261044f57612a5b613a12565b6000805160206148ea8339815191529081549060ff821615612aab575060ff19169055513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a180f35b8351638dfc202b60e01b8152fd5b5091903461055d578060031936011261055d576020612b1093612ada613754565b612ae261422a565b6007548451633e5541f160e01b81529687936001600160a01b03909216928492839291602435918401613eb0565b03915afa918215612b5f5791612b2b575b6020925051908152f35b90506020823d8211612b57575b81612b4560209383613823565b810103126104bd576020915190612b21565b3d9150612b38565b9051903d90823e3d90fd5b50903461044f578060031936011261044f57612b84613754565b6008546024359291906001600160a01b039081163303612c1457612ba661422a565b811693848652600e60205282862054848110612bf9575050507fbcb639e764c5cd7d736acef943167eb10be8fc46f9e33b29c69c89473fb79fd791602091848652600e8352808620612154838254613f89565b84610931918551948594631664bf6360e01b8652850161480b565b825163b693a60960e01b81528590fd5b5091903461055d578060031936011261055d57612c3f61376a565b90336001600160a01b03831603612c5c575061060d919235613cda565b5163334bd91960e11b81528390fd5b50503461055d578160031936011261055d5760095490516001600160a01b039091168152602090f35b50903461044f578060031936011261044f5761060d9135612cb860016105e961376a565b613c65565b50503461055d578160031936011261055d5760209060ff6006541690519015158152f35b50503461055d578160031936011261055d57602090517f85e8f2d6819d6b24108062d87ea08f54651bcb8960d98062d3faf96e7873b8b98152f35b503461044f57602036600319011261044f57612d36613754565b91612d3f61422a565b612d4761394e565b6001600160a01b03831615612d8057505060068054610100600160a81b03191660089290921b610100600160a81b031691909117905580f35b51637bfd2e8360e01b8152fd5b50903461044f57612d9d36613884565b93909192612da9614255565b612db161422a565b6008546001600160a01b03949085163303612f14578416938415612efd5783168015612ee857508415612ed2578051636eb1769f60e11b808252602091828180612dfe308a8a84016145bf565b03818a5afa908115611da2579088918a91612ea1575b5010612e275787610fe18830888a6142b4565b81908398949795985196879182528180612e44308d8d84016145bf565b03915afa9283156104c95792612e6f575051630c95cf2760e11b81529485946109319450850161480b565b90915083813d8311612e9a575b612e868183613823565b810103126104bd57610931925190386116df565b503d612e7c565b809250848092503d8311612ecb575b612eba8183613823565b810103126104bd5787905138612e14565b503d612eb0565b51633728b83d60e01b8152908101849052602490fd5b90516313053d9360e21b815291820152602490fd5b815163961c9a4f60e01b8152808401869052602490fd5b505163b693a60960e01b8152fd5b5091903461055d578060031936011261055d576020612b1093612f43613754565b612f4b61422a565b600754845163159c713360e11b81529687936001600160a01b03909216928492839291602435918401613eb0565b503461044f57602036600319011261044f57816020936001923581526000805160206148ca83398151915285522001549051908152f35b50503461055d578160031936011261055d5760085490516001600160a01b039091168152602090f35b50903461044f578060031936011261044f57612ff3613754565b91612ffc61376a565b9061300561422a565b61300d6139b6565b6001600160a01b0384811693908415612efd5783169485156130e05761303161422a565b61303b8482614746565b6130c75750838652600a6020528520805491600160401b8310156130b457508161306e91600161308d9594018155613796565b90919082549060031b9160018060a01b03809116831b921b1916179055565b7f2c79891dd909910a9ed2116eb868a4783a4abeb6da7c8dc217cd5b198b329b5d8380a380f35b634e487b7160e01b875260419052602486fd5b610931915193849363aebbe4f960e01b855284016145bf565b610931915193849363188fe79360e21b855284016145bf565b50503461055d578160031936011261055d57602090517f0792b37891b8244bb8149106fc05e84f10f266ef581c099bf3d880350e979b2f8152f35b50823461120b576020908160031936011261120b576001600160a01b03613159613754565b1690818152600d835282858220549460248751809581936370a0823160e01b835230908301525afa9081156131d55784916131a4575b6131999250613f89565b908351928352820152f35b50508181813d83116131ce575b6131bb8183613823565b810103126104bd5782613199915161318f565b503d6131b1565b8551903d90823e3d90fd5b50503461055d578160031936011261055d5760075490516001600160a01b039091168152602090f35b50913461120b57606036600319011261120b57613224613754565b92602493843591604435613236614255565b61323e61422a565b60015486516373bed91960e11b815233848201526020986001600160a01b0393929091908a9082908490829088165afa9081156135185788916134fb575b50156134eb5761328a61422a565b60065460ff8116156134db5786156134c657839060081c1698899289516313a9822560e31b815282818581898c1698898c8301525afa9081156134bc578a9161349f575b501561348957818a51809c63146f4ea360e21b825281806132f28d8d8d8401613eb0565b03915afa92831561347f578993613449575b88999a9b50826133188561333b9a9b613f89565b6007548e51633e5541f160e01b81529a8b92918a1691839182918f838f01613eb0565b03915afa97881561343f578b9861340c575b508188106133f15750509187918561337194838c525261191b8b8b20918254614285565b85541690813b15610cf45791859161339f938389518096819582946340c10f1960e01b845233908401613eb0565b03925af1801561241d576133ce575b5061198060008051602061488a8339815191529394519283923384614292565b60008051602061488a833981519152936133ea611980926137c4565b93506133ae565b6044918791898e519363658ec5dd60e11b8552840152820152fd5b9097508281813d8311613438575b6134248183613823565b810103126134345751963861334d565b8a80fd5b503d61341a565b8c513d8d823e3d90fd5b9250818b813d8311613478575b6134608183613823565b8101031261347457995198998a9992613304565b8880fd5b503d613456565b8a513d8b823e3d90fd5b8951639d42b4b360e01b81528087018590528390fd5b6134b69150833d8511611a7b57611a6d8183613823565b386132ce565b8b513d8c823e3d90fd5b508751633728b83d60e01b8152808501879052fd5b885163bb60b89360e01b81528590fd5b875163110781d160e31b81528490fd5b61351291508a3d8c11611a7b57611a6d8183613823565b3861327c565b89513d8a823e3d90fd5b503461044f57602036600319011261044f5761353c613754565b61354461422a565b61354c61394e565b6001600160a01b0316918215613575575050600980546001600160a01b03191691909117905580f35b516348db2b6f60e11b8152fd5b50913461120b578060031936011261120b578151918160025492600184811c91818616958615613662575b602096878510811461364f578899509688969785829a5291826000146136285750506001146135ea575b505050610651929161149d910385613823565b9190869350600283528383205b828410613610575050508201018161149d6106516135d7565b8054848a0186015288955087949093019281016135f7565b60ff19168782015293151560051b8601909301935084925061149d915061065190506135d7565b634e487b7160e01b835260228a52602483fd5b92607f16926135ad565b50503461055d578060031936011261055d57613686613754565b6001600160a01b039081168352600a6020528183208054602435949085101561120b57506020936136b691613796565b92905490519260031b1c168152f35b50503461055d578160031936011261055d57602090517f6c0757dc3e6b28b2580c03fd9e96c274acf4f99d91fbec9b418fa1d70604ff1c8152f35b9250503461044f57602036600319011261044f573563ffffffff60e01b811680910361044f5760209250637965db0b60e01b8114908115613743575b5015158152f35b6301ffc9a760e01b1490503861373c565b600435906001600160a01b03821682036104bd57565b602435906001600160a01b03821682036104bd57565b606435906001600160a01b03821682036104bd57565b80548210156137ae5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b6001600160401b0381116137d757604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176137d757604052565b602081019081106001600160401b038211176137d757604052565b90601f801991011681019081106001600160401b038211176137d757604052565b919082519283825260005b848110613870575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161384f565b60609060031901126104bd576001600160a01b039060043582811681036104bd579160243590811681036104bd579060443590565b6001600160401b0381116137d757601f01601f191660200190565b9291926138e0826138b9565b916138ee6040519384613823565b8294818452818301116104bd578281602093846000960137010152565b9080601f830112156104bd57816020613926933591016138d4565b90565b9092608092613926959483526020830152151560408201528160608201520190613844565b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260409020546000805160206148aa8339815191529060ff16156139985750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527f4e5d4d14b1d64b65403760d275670011644f8f7998f1ef964b0082bdadeaa41460205260409020547f0792b37891b8244bb8149106fc05e84f10f266ef581c099bf3d880350e979b2f9060ff16156139985750565b3360009081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b60205260409020547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9060ff16156139985750565b806000526000805160206148ca83398151915260205260406000203360005260205260ff60406000205416156139985750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120549091906000805160206148ca8339815191529060ff16613b2a578280526020526040822081835260205260408220600160ff19825416179055339160008051602061482a8339815191528180a4600190565b505090565b6001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260408120549091906000805160206148aa833981519152906000805160206148ca8339815191529060ff16613bc7578184526020526040832082845260205260408320600160ff1982541617905560008051602061482a833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a8602052604081205490919060008051602061484a833981519152906000805160206148ca8339815191529060ff16613bc7578184526020526040832082845260205260408320600160ff1982541617905560008051602061482a833981519152339380a4600190565b906000918083526000805160206148ca83398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014613bc7578184526020526040832082845260205260408320600160ff1982541617905560008051602061482a833981519152339380a4600190565b906000918083526000805160206148ca83398151915280602052604084209260018060a01b03169283855260205260ff604085205416600014613bc757818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b3d15613d88573d90613d6e826138b9565b91613d7c6040519384613823565b82523d6000602084013e565b606090565b90613db45750805115613da257805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580613de7575b613dc5575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15613dbd565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613e1f57565b604051631afcd79f60e31b8152600490fd5b60405190613e3e826137ed565b601682527511195c1bdcda5d081a5cc81b9bdd08195b98589b195960521b6020830152565b908160209103126104bd575180151581036104bd5790565b60405190613e88826137ed565b6019825278151bdad95b8819195c1bdcda5d081b9bdd08195b98589b1959603a1b6020830152565b6001600160a01b039091168152602081019190915260400190565b60009060033d11613ed857565b905060046000803e60005160e01c90565b600060443d1061392657604051600319913d83016004833e81516001600160401b03918282113d602484011117613f4657818401948551938411613f4e573d85010160208487010111613f46575061392692910160200190613823565b949350505050565b50949350505050565b60405190613f64826137ed565b60168252754572726f722063616c63756c6174696e67206665657360501b6020830152565b91908203918211613f9657565b634e487b7160e01b600052601160045260246000fd5b6006549160ff83161561421657604080516313a9822560e31b81526001600160a01b03848116600483015260209592949260081c8116918681602481865afa90811561420b576000916141ee575b50156141d75783156141a357858551809363146f4ea360e21b82528180614025898960048401613eb0565b03915afa60009281614174575b5061407d57505050505050614045613ecb565b6308c379a014614061575b600090600090600090613926613f57565b614069613ee9565b806140745750614050565b60009182918291565b6140ae9261408d87938096613f89565b9160075416908651809581948293633e5541f160e01b845260048401613eb0565b03915afa60009181614145575b5061412d5750506140ca613ecb565b6308c379a01461410f575b600092600092774572726f722063616c63756c6174696e672073686172657360401b6000935191614105836137ed565b6018835282015290565b614117613ee9565b8061412257506140d5565b600093849350839250565b909250926001915161413e81613808565b6000815290565b90918582813d831161416d575b61415c8183613823565b8101031261120b57505190386140bb565b503d614152565b90928782813d831161419c575b61418b8183613823565b8101031261120b5750519138614032565b503d614181565b505050506000926000926d125b9d985b1a5908185b5bdd5b9d60921b60009351916141cd836137ed565b600e835282015290565b505050505050600090600090600090613926613e7b565b6142059150873d8911611a7b57611a6d8183613823565b38613ffa565b86513d6000823e3d90fd5b505050600090600090600090613926613e31565b60ff6000805160206148ea833981519152541661424357565b60405163d93c066560e01b8152600490fd5b60008051602061490a83398151915260028154146142735760029055565b604051633ee5aeb560e01b8152600490fd5b91908201809211613f9657565b6001600160a01b03918216815291166020820152604081019190915260600190565b906142ea906142dc6142ef956040519586936323b872dd60e01b602086015260248501614292565b03601f198101845283613823565b6142f1565b565b60008061431a9260018060a01b03169360208151910182865af1614313613d5d565b9083613d8d565b8051908115159182614348575b50506143305750565b60249060405190635274afe760e01b82526004820152fd5b61435b9250602080918301019101613e63565b153880614327565b906006549160ff83161561421657604080516313a9822560e31b81526001600160a01b038381166004830152602095929460089390931c81169392918681602481885afa90811561420b576000916145a2575b50156141d757858215614566576143e992600092600754168751808096819463159c713360e11b83528960048401613eb0565b03915afa90918282614534575b505061446457505050614407613ecb565b6308c379a014614451575b6000926000927f4572726f722063616c63756c6174696e6720746f6b656e20616d6f756e7400006000935191614447836137ed565b601e835282015290565b614459613ee9565b806141225750614412565b9380916144889386918651809681948293637b897f3960e01b845260048401613eb0565b03915afa918291600093614503575b50506144dd5750506144a7613ecb565b6308c379a0146144c1575b90600090600090613926613f57565b6144c9613ee9565b806144d457506144b2565b90916000918291565b806144ea91949293614285565b90600192516144f881613808565b600081529193929190565b8181949293943d831161452d575b61451b8183613823565b8101031261120b575051903880614497565b503d614511565b909192508682813d831161455f575b61454d8183613823565b8101031261120b5750519038806143f6565b503d614543565b505050505060009260009274125b9d985b1a59081cda185c995cc8185b5bdd5b9d605a1b6000935191614598836137ed565b6015835282015290565b6145b99150873d8911611a7b57611a6d8183613823565b386143b6565b6001600160a01b0391821681529116602082015260400190565b6000198114613f965760010190565b90916001600160a01b03808316801561472e5781851691821561471257600090828252600a60205260408220825b8154808210156146f657838761462c8486613796565b929054600393841b1c161461464b575050614646906145d9565b614616565b9495969798509850600092919219988981019081116146e2579061306e836146766146849487613796565b905490881b1c169185613796565b81549788156146ce577f1c0cdcc74010449d4477f9576aaf31cee9e18d2611031462fcd5bf5329dec88e9596979801926146be8484613796565b81939154921b1b191690555580a3565b634e487b7160e01b85526031600452602485fd5b634e487b7160e01b86526011600452602486fd5b60405163188fe79360e21b8152806109318b8d600484016145bf565b60405163188fe79360e21b8152806109318789600484016145bf565b6024906040519063961c9a4f60e01b82526004820152fd5b9060018060a01b03806000931683526020600a815260408420604051808284829454938481520190885284882092885b868282106147cc5750505061478d92500382613823565b845b81518110156147c45783838260051b8401015116848616146147b9576147b4906145d9565b61478f565b505050505050600190565b505050505090565b85548916845260019586019587955093019201614776565b6142ea6142ef93926142dc60405194859263a9059cbb60e01b602085015260248401613eb0565b604091949392606082019560018060a01b031682526020820152015256fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a797667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220be2fce2831af35267343bb59637196e7fb5fc02321f7ed193c9efa949d4b67c464736f6c6343000814003360a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b60405161196290816100d28239608051818181610a080152610aaf0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610059565b63f92ee8a960e01b8152600490fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146111e95750806306fdde031461114b578063095ea7b3146110ca57806318160ddd1461109f57806323b872dd14610fba578063248a9ca314610f7e5780632f2ff15d14610f32578063313ce56714610f1157806336568abe14610eca57806340c10f1914610e0c5780634f1ef28614610a6057806352d1902d146109f557806370a08231146109ae57806391d148541461095457806395d89b411461086f5780639dc29fac1461078a578063a217fddf1461076e578063a9059cbb1461073d578063ad3cb1cc146106e9578063d5391393146106ae578063d547741f14610660578063dd62ed3e14610617578063de7ea79d146101555763f72c0d8b1461012757600080fd5b3461015057600036600319011261015057602060405160008051602061188d8339815191528152f35b600080fd5b34610150576080366003190112610150576004356001600160401b03811161015057610185903690600401611356565b6024356001600160401b038111610150576101a4903690600401611356565b60443560ff81168103610150576064356001600160a01b03811690036101505760008051602061190d83398151915254906001600160401b03821680159081610607575b60011490816105fd575b1590816105f4575b506105e25760016001600160401b031983161760008051602061190d8339815191525560ff8260401c16156105b5575b6102326117c5565b61023a6117c5565b83516001600160401b0381116104a25761026260008051602061182d8339815191525461167e565b601f8111610547575b506020601f82116001146104c35781929394956000926104b8575b50508160011b916000199060031b1c19161760008051602061182d833981519152555b82516001600160401b0381116104a2577f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04906102e5825461167e565b601f811161045a575b506020601f82116001146103f157819060ff95966000926103e6575b50508160011b916000199060031b1c19161790555b6103276117c5565b61032f6117c5565b1660ff19600054161760005561034660643561145a565b506103503361145a565b5061035c6064356114e8565b506040519060ff906064356001600160a01b03167fa479080e7e939829babda407ef044045c57ee261eb6bebe01946a649d8a8735e600080a260401c16156103a057005b60008051602061190d833981519152805460ff60401b19169055600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b01519050868061030a565b601f1982169583600052816000209660005b81811061044257509160ff969791846001959410610429575b505050811b01905561031f565b015160001960f88460031b161c1916905586808061041c565b83830151895560019098019760209384019301610403565b826000526020600020601f830160051c81019160208410610498575b601f0160051c01905b81811061048c57506102ee565b6000815560010161047f565b9091508190610476565b634e487b7160e01b600052604160045260246000fd5b015190508580610286565b60008051602061182d833981519152600052806000209060005b601f198416811061052f575060019394959683601f19811610610516575b505050811b0160008051602061182d833981519152556102a9565b015160001960f88460031b161c191690558580806104fb565b9091602060018192858b0151815501930191016104dd565b60008051602061182d8339815191526000527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c8101602084106105ae575b601f830160051c820181106105a257505061026b565b6000815560010161058c565b508061058c565b68ffffffffffffffffff198216680100000000000000011760008051602061190d8339815191525561022a565b60405163f92ee8a960e01b8152600490fd5b905015856101fa565b303b1591506101f2565b604084901c60ff161591506101e8565b34610150576040366003190112610150576106306112b7565b61064161063b6112cd565b91611374565b9060018060a01b03166000526020526020604060002054604051908152f35b34610150576040366003190112610150576106ac60043561067f6112cd565b90806000526000805160206118ed8339815191526020526106a7600160406000200154611427565b6115fb565b005b346101505760003660031901126101505760206040517f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68152f35b346101505760003660031901126101505760405160408101908082106001600160401b038311176104a2576107399160405260058152640352e302e360dc1b60208201526040519182918261126e565b0390f35b34610150576040366003190112610150576107636107596112b7565b60243590336116b8565b602060405160018152f35b3461015057600036600319011261015057602060405160008152f35b34610150576040366003190112610150576107a36112b7565b6024356107ae6113ad565b6001600160a01b038216908115610856578160005260008051602061184d83398151915280602052604060002054938285106108255750816000805160206118cd83398151915292600095602093868852845203604086205560008051602061186d833981519152818154039055604051908152a3005b60405163391434e360e21b81526001600160a01b039190911660048201526024810185905260448101839052606490fd5b604051634b637e8f60e11b815260006004820152602490fd5b34610150576000366003190112610150576040516000907f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054906108b38261167e565b90818452600192838116908160001461092c57506001146108eb575b610739846108df818803826112e3565b6040519182918261126e565b90935060005260209283600020916000925b8284106109195750505081610739936108df92820101936108cf565b80548585018701529285019281016108fd565b61073996506108df9450602092508593915060ff191682840152151560051b820101936108cf565b346101505760403660031901126101505761096d6112cd565b6004356000526000805160206118ed83398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b34610150576020366003190112610150576001600160a01b036109cf6112b7565b1660005260008051602061184d8339815191526020526020604060002054604051908152f35b34610150576000366003190112610150577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610a4e5760206040516000805160206118ad8339815191528152f35b60405163703e46dd60e11b8152600490fd5b604036600319011261015057610a746112b7565b60249081356001600160401b038111610150573660238201121561015057610aa5903690848160040135910161131f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115610df0575b50610a4e573360009081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a8602090815260409091205490919060008051602061188d8339815191529060ff1615610dd357506040516301ffc9a760e01b8082526336372b0760e01b600483015291851694919083818881895afa908115610d7c57600091610db6575b5015610d8857604051908152637965db0b60e01b600482015282818781885afa908115610d7c57600091610d4f575b5015610d1957604051847f7961c8f9895a011e1bdea60033539eb2f075513509777f3f37b4c6ec745f45fd600080a26352d1902d60e01b81528281600481885afa60009181610cea575b50610bfb57604051634c9c8ce360e01b8152600481018690528690fd5b8490866000805160206118ad83398151915291828103610cd55750833b15610cbf575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2835115610ca5575060008084846106ac96519101845af4903d15610c9c573d610c7f81611304565b90610c8d60405192836112e3565b8152600081943d92013e611762565b60609250611762565b9250505034610cb057005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508381813d8311610d12575b610d0281836112e3565b8101031261015057519087610bde565b503d610cf8565b6040516301a1fdbb60e41b815260048101839052600e818701526d125058d8d95cdcd0dbdb9d1c9bdb60921b6044820152606490fd5b610d6f9150833d8511610d75575b610d6781836112e3565b8101906117f4565b86610b94565b503d610d5d565b6040513d6000823e3d90fd5b6040516301a1fdbb60e41b8152600481018490526006818801526504945524332360d41b6044820152606490fd5b610dcd9150843d8611610d7557610d6781836112e3565b87610b65565b856044916040519163e2517d3f60e01b8352336004840152820152fd5b9050816000805160206118ad8339815191525416141585610adb565b3461015057604036600319011261015057610e256112b7565b60243590610e316113ad565b6001600160a01b0316908115610eb15760008051602061186d833981519152805490828201809211610e9b576000926000805160206118cd833981519152926020925584845260008051602061184d833981519152825260408420818154019055604051908152a3005b634e487b7160e01b600052601160045260246000fd5b60405163ec442f0560e01b815260006004820152602490fd5b3461015057604036600319011261015057610ee36112cd565b336001600160a01b03821603610eff576106ac906004356115fb565b60405163334bd91960e11b8152600490fd5b3461015057600036600319011261015057602060ff60005416604051908152f35b34610150576040366003190112610150576106ac600435610f516112cd565b90806000526000805160206118ed833981519152602052610f79600160406000200154611427565b611586565b34610150576020366003190112610150576004356000526000805160206118ed8339815191526020526020600160406000200154604051908152f35b3461015057606036600319011261015057610fd36112b7565b610fdb6112cd565b60443590610fe883611374565b3360005260205260406000205492600019840361100a575b61076393506116b8565b828410611079576001600160a01b0381161561106057331561104757826107639461103483611374565b3360005260205203604060002055611000565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b604051637dc7a0d960e11b81523360048201526024810185905260448101849052606490fd5b3461015057600036600319011261015057602060008051602061186d83398151915254604051908152f35b34610150576040366003190112610150576110e36112b7565b602435903315611060576001600160a01b03169081156110475761110633611374565b82600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346101505760003660031901126101505760405160009060008051602061182d83398151915280549061117d8261167e565b90818452600192838116908160001461092c57506001146111a857610739846108df818803826112e3565b90935060005260209283600020916000925b8284106111d65750505081610739936108df92820101936108cf565b80548585018701529285019281016111ba565b34610150576020366003190112610150576004359063ffffffff60e01b8216809203610150576020916336372b0760e01b811490811561125d575b8115611232575b5015158152f35b637965db0b60e01b81149150811561124c575b508361122b565b6301ffc9a760e01b14905083611245565b637965db0b60e01b81149150611224565b6020808252825181830181905290939260005b8281106112a357505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611281565b600435906001600160a01b038216820361015057565b602435906001600160a01b038216820361015057565b90601f801991011681019081106001600160401b038211176104a257604052565b6001600160401b0381116104a257601f01601f191660200190565b92919261132b82611304565b9161133960405193846112e3565b829481845281830111610150578281602093846000960137010152565b9080601f83011215610150578160206113719335910161131f565b90565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b3360009081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d460205260409020547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a69060ff16156114095750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b806000526000805160206118ed83398151915260205260406000203360005260205260ff60406000205416156114095750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120549091906000805160206118ed8339815191529060ff166114e3578280526020526040822081835260205260408220600160ff19825416179055339160008051602061180d8339815191528180a4600190565b505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a8602052604081205490919060008051602061188d833981519152906000805160206118ed8339815191529060ff16611580578184526020526040832082845260205260408320600160ff1982541617905560008051602061180d833981519152339380a4600190565b50505090565b906000918083526000805160206118ed83398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014611580578184526020526040832082845260205260408320600160ff1982541617905560008051602061180d833981519152339380a4600190565b906000918083526000805160206118ed83398151915280602052604084209260018060a01b03169283855260205260ff60408520541660001461158057818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b90600182811c921680156116ae575b602083101461169857565b634e487b7160e01b600052602260045260246000fd5b91607f169161168d565b916001600160a01b038084169283156108565716928315610eb15760009083825260008051602061184d8339815191528060205260408320549184831061172f575082846000805160206118cd833981519152959360409388602097528652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b0391909116600482015260248101929092525060448101839052606490fd5b90611789575080511561177757805190602001fd5b604051630a12f52160e11b8152600490fd5b815115806117bc575b61179a575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15611792565b60ff60008051602061190d8339815191525460401c16156117e257565b604051631afcd79f60e31b8152600490fd5b9081602091031261015057518015158103610150579056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122064f2754949c7a5616102acfc1983cac826bd20810243de24114c019913508da264736f6c6343000814003300000000000000000000000082f1806aeab5ecb9a485eb041d5ed4940b123995000000000000000000000000cbd8dbcbdde849188bacbf19313043d102413985000000000000000000000000071df66df17f894606988f237ecb6ee36ab0512e000000000000000000000000cf5ca0b3d358c39daff24142d1bbc7c6b96395d3