solc-0.8.36-doubleshift20 0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640 optimized
23934 bytes
608060405234801561000f575f5ffd5b5060043610610187575f3560e01c806370cf754a116100d9578063c45a015511610093578063ddca3f431161006e578063ddca3f431461059f578063f3058399146105da578063f30dba93146105e3578063f637731d146106b6575f5ffd5b8063c45a015514610517578063d0c93a7c1461053e578063d21220a714610578575f5ffd5b806370cf754a146104555780638206a4d11461047c57806385b667291461048f578063883bdbfd146104a2578063a34123a7146104c3578063a38807f2146104d6575f5ffd5b80633850c7bd11610144578063490e6cbc1161011f578063490e6cbc146103905780634f1eb3d8146103a3578063514ea4bf146103b65780635339c29614610436575f5ffd5b80633850c7bd146102c25780633c8a7d8d146103665780634614131914610379575f5ffd5b80630dfe16811461018b578063128acb08146101cf5780631a686502146101f75780631ad8b03b14610222578063252c09d71461026057806332148f67146102ad575b5f5ffd5b6101b27f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6040516001600160a01b0390911681526020015b60405180910390f35b6101e26101dd3660046153a2565b6106c9565b604080519283526020830191909152016101c6565b60045461020a906001600160801b031681565b6040516001600160801b0390911681526020016101c6565b600354610240906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016101c6565b61027361026e366004615422565b61121b565b6040805163ffffffff909516855260069390930b60208501526001600160a01b0390911691830191909152151560608201526080016101c6565b6102c06102bb366004615439565b61125f565b005b5f54610315906001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b604080516001600160a01b03909816885260029690960b602088015261ffff94851695870195909552918316606086015291909116608084015260ff1660a0830152151560c082015260e0016101c6565b6101e2610374366004615481565b611338565b61038260025481565b6040519081526020016101c6565b6102c061039e3660046154cb565b611570565b6102406103b1366004615530565b6119bc565b6104006103c4366004615422565b60076020525f908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a0016101c6565b610382610444366004615593565b60066020525f908152604090205481565b61020a7f0000000000000000000000000000000000005e8b2285f864419ac400be90719681565b6102c061048a3660046155c3565b611bf7565b61024061049d3660046155f4565b611db4565b6104b56104b0366004615636565b6120a9565b6040516101c69291906156a7565b6101e26104d1366004615733565b61212f565b6104e96104e436600461575c565b6122b0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff16908201526060016101c6565b6101b27f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98481565b6105657f000000000000000000000000000000000000000000000000000000000000000a81565b60405160029190910b81526020016101c6565b6101b27f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6105c67f00000000000000000000000000000000000000000000000000000000000001f481565b60405162ffffff90911681526020016101c6565b61038260015481565b61065a6105f1366004615784565b60056020525f908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b604080516001600160801b039099168952600f9790970b602089015295870194909452606086019290925260060b60808501526001600160a01b031660a084015263ffffffff1660c0830152151560e0820152610100016101c6565b6102c06106c436600461579d565b6124e6565b5f5f6106d361261e565b855f0361070c5760405162461bcd60e51b8152602060048201526002602482015261415360f01b60448201526064015b60405180910390fd5b6040805160e0810182525f546001600160a01b0381168252600160a01b810460020b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526107a35760405162461bcd60e51b8152600401610703906157b8565b876107e65780516001600160a01b039081169087161180156107e1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610810565b80516001600160a01b0390811690871610801561081057506401000276a36001600160a01b038716115b6108425760405162461bcd60e51b815260206004820152600360248201526214d41360ea1b6044820152606401610703565b5f805460ff60f01b191681556040805160c08101909152808a6108705760048460a0015160ff16901c610881565b60108460a0015161088191906157e9565b60ff1681526004546001600160801b031660208201526040014263ffffffff1681526020015f60060b81526020015f60601b60601c81526020015f151581525090505f5f891390505f6040518060e001604052808b81526020015f8152602001855f015160601b60601c8152602001856020015160020b81526020018c61090a5760025461090e565b6001545b81525f6020808301919091528501516001600160801b031660409091015290505b80511580159061094f575060408101516001600160a01b038a8116911614155b15610d81576040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260408201516001600160a01b0316815260608201516109cf906006907f000000000000000000000000000000000000000000000000000000000000000a8f612654565b1515604083015260020b60208201819052620d89e71913156109fa57620d89e7196020820152610a2e565b610a07620d89e71961581e565b60020b816020015160020b1315610a2e57610a25620d89e71961581e565b60020b60208201525b610a3b8160200151612809565b6001600160a01b031660608201526040820151610ac0908d610a6f5760608301516001600160a01b03808e16911611610a83565b60608301516001600160a01b03808e169116105b610a91578260600151610a93565b8b5b60c085015185517f00000000000000000000000000000000000000000000000000000000000001f4612c21565b60c085015260a084015260808301526001600160a01b031660408301528215610b3857610aff8160c001518260800151610afa919061583e565b612e30565b82518390610b0e908390615851565b90525060a0810151610b2e90610b2390612e30565b602084015190612e44565b6020830152610b84565b610b458160a00151612e30565b82518390610b54908390615877565b90525060c08101516080820151610b7e91610b7391610afa919061583e565b602084015190612e68565b60208301525b835160ff1615610bde575f845f015160ff168260c00151610ba5919061589e565b9050808260c001818151610bb991906158b1565b90525060a083018051829190610bd09083906158c4565b6001600160801b0316905250505b60c08201516001600160801b031615610c2357610c0e8160c00151600160801b8460c0015160801b60801c612e86565b82608001818151610c1f919061583e565b9052505b606081015160408301516001600160a01b03918216911603610d4c57806040015115610d1f578360a00151610ca257610c8484604001515f8760200151886040015188602001518a606001516008612ff7909695949392919063ffffffff16565b6001600160a01b0316608086015260060b6060850152600160a08501525b5f610ced82602001518e610cb857600154610cbe565b84608001515b8f610ccd578560800151610cd1565b6002545b608089015160608a015160408b015160059594939291906131e2565b90508c15610d0157610cfe816158e3565b90505b610d0f8360c00151826132f4565b6001600160801b031660c0840152505b8b610d2e578060200151610d3f565b60018160200151610d3f9190615908565b60020b6060830152610d7b565b805160408301516001600160a01b03908116911614610d7b57610d7282604001516133b3565b60020b60608301525b5061092f565b836020015160020b816060015160020b14610e49575f5f610dce86604001518660400151886020015188602001518a606001518b6080015160086136e8909695949392919063ffffffff16565b604085015160608601515f805463ffffffff60b81b1916600160c81b61ffff9586160261ffff60b81b191617600160b81b9590941694909402929092176001600160b81b031916600160a01b62ffffff909316929092026001600160a01b031916919091176001600160a01b0390911617905550610e6d9050565b60408101515f80546001600160a01b0319166001600160a01b039092169190911790555b60c081015160208401516001600160801b03908116911614610eae5760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a15610f1557608081015160015560a08101516001600160801b031615610f105760a0810151600380545f90610eee9084906001600160801b03166158c4565b92506101000a8154816001600160801b03021916908360801b60801c02179055505b610f79565b608081015160025560a08101516001600160801b031615610f795760a081015160038054601090610f57908490600160801b90046001600160801b03166158c4565b92506101000a8154816001600160801b03021916908360801b60801c02179055505b8115158b151514610f9a5760208101518151610f95908c615851565b610fac565b8051610fa6908b615851565b81602001515b90965094508a156110a0575f851215610ff257610ff27f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28d610fed8861592d565b61386f565b5f610ffb61396a565b60405163fa461e3360e01b8152909150339063fa461e3390611027908a908a908e908e9060040161596f565b5f604051808303815f87803b15801561103e575f5ffd5b505af1158015611050573d5f5f3e3d5ffd5b5050505061105c61396a565b6110668289613a63565b111561109a5760405162461bcd60e51b815260206004820152600360248201526249494160e81b6044820152606401610703565b50611180565b5f8612156110d6576110d67f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488d610fed8961592d565b5f6110df613a7c565b60405163fa461e3360e01b8152909150339063fa461e339061110b908a908a908e908e9060040161596f565b5f604051808303815f87803b158015611122575f5ffd5b505af1158015611134573d5f5f3e3d5ffd5b50505050611140613a7c565b61114a8288613a63565b111561117e5760405162461bcd60e51b815260206004820152600360248201526249494160e81b6044820152606401610703565b505b60408082015160c083015160608481015184518b8152602081018b90526001600160a01b03948516958101959095526001600160801b039092169084015260020b60808301528d169033907fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679060a00160405180910390a350505f805460ff60f01b1916600160f01b17905550919890975095505050505050565b60088161ffff811061122b575f80fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b5f54600160f01b900460ff166112875760405162461bcd60e51b8152600401610703906157b8565b5f805460ff60f01b1916905561129b61261e565b5f8054600160d81b900461ffff16906112b660088385613ac7565b5f805461ffff808416600160d81b810261ffff60d81b1990931692909217909255919250831614611321576040805161ffff8085168252831660208201527fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a91015b60405180910390a15b50505f805460ff60f01b1916600160f01b17905550565b5f80548190600160f01b900460ff166113635760405162461bcd60e51b8152600401610703906157b8565b5f805460ff60f01b191690556001600160801b038516611381575f5ffd5b5f5f6113c860405180608001604052808c60601b60601c81526020018b60020b81526020018a60020b81526020016113be8a60801b60801c613b6a565b600f0b9052613b7f565b92509250508193508092505f5f5f8611156113e8576113e561396a565b91505b84156113f9576113f6613a7c565b90505b60405163d348799760e01b8152339063d34879979061142290899089908d908d9060040161596f565b5f604051808303815f87803b158015611439575f5ffd5b505af115801561144b573d5f5f3e3d5ffd5b505050505f86111561149c5761145f61396a565b6114698388613a63565b111561149c5760405162461bcd60e51b815260206004820152600260248201526104d360f41b6044820152606401610703565b84156114e7576114aa613a7c565b6114b48287613a63565b11156114e75760405162461bcd60e51b81526020600482015260026024820152614d3160f01b6044820152606401610703565b604080513381526001600160801b038b1660208201529081018790526060810186905260028b810b91908d900b906001600160a01b038f16907f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde9060800160405180910390a450505f805460ff60f01b1916600160f01b17905550919890975095505050505050565b5f54600160f01b900460ff166115985760405162461bcd60e51b8152600401610703906157b8565b5f805460ff60f01b191690556115ac61261e565b6004546001600160801b0316806115e95760405162461bcd60e51b81526020600482015260016024820152601360fa1b6044820152606401610703565b5f61161d867f00000000000000000000000000000000000000000000000000000000000001f462ffffff16620f4240613daf565b90505f611653867f00000000000000000000000000000000000000000000000000000000000001f462ffffff16620f4240613daf565b90505f61165e61396a565b90505f611669613a7c565b9050881561169c5761169c7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488b8b61386f565b87156116cd576116cd7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b8a61386f565b604051630e9cbafb60e41b8152339063e9cbafb0906116f690879087908c908c9060040161596f565b5f604051808303815f87803b15801561170d575f5ffd5b505af115801561171f573d5f5f3e3d5ffd5b505050505f61172c61396a565b90505f611737613a7c565b9050816117448588613a63565b11156117775760405162461bcd60e51b8152602060048201526002602482015261046360f41b6044820152606401610703565b806117828487613a63565b11156117b55760405162461bcd60e51b8152602060048201526002602482015261463160f01b6044820152606401610703565b5f6117c085846158b1565b90505f6117cd85846158b1565b90508115611897575f80546117ee90601090600160e81b900460ff166157e9565b90505f60ff82161561180c5761180760ff83168561589e565b61180e565b5f5b90506001600160801b0381161561185e57600380548291905f9061183c9084906001600160801b03166158c4565b92506101000a8154816001600160801b03021916908360801b60801c02179055505b61187f61186b82866158b1565b600160801b6001600160801b038e16612e86565b60015f82825461188f919061583e565b909155505050505b8015611945575f8054600160e81b900460041c600f169081156118c6576118c160ff83168461589e565b6118c8565b5f5b90506001600160801b0381161561192057600380548291906010906118fe908490600160801b90046001600160801b03166158c4565b92506101000a8154816001600160801b03021916908360801b60801c02179055505b61192d61186b82856158b1565b60025f82825461193d919061583e565b909155505050505b604080518e8152602081018e9052908101839052606081018290526001600160a01b038f169033907fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6339060800160405180910390a350505f805460ff60f01b1916600160f01b179055505050505050505050505050565b5f80548190600160f01b900460ff166119e75760405162461bcd60e51b8152600401610703906157b8565b5f805460ff60f01b19168155611a006007338989613df4565b60038101549091506001600160801b0390811690861611611a215784611a30565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611a585783611a6e565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611af0576003810180548491905f90611a9e9084906001600160801b0316615998565b92506101000a8154816001600160801b03021916908360801b60801c0217905550611af07f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48898560801b60801c61386f565b6001600160801b03821615611b7857600381018054839190601090611b26908490600160801b90046001600160801b0316615998565b92506101000a8154816001600160801b03021916908360801b60801c0217905550611b787f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2898460801b60801c61386f565b604080516001600160a01b038a1681526001600160801b0385811660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4505f805460ff60f01b1916600160f01b17905590969095509350505050565b5f54600160f01b900460ff16611c1f5760405162461bcd60e51b8152600401610703906157b8565b5f805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9841691638da5cb5b9160048083019260209291908290030181865afa158015611c8e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb291906159b7565b6001600160a01b03163314611cc5575f5ffd5b60ff82161580611ce8575060048260ff1610158015611ce85750600a8260ff1611155b8015611d12575060ff81161580611d12575060048160ff1610158015611d125750600a8160ff1611155b611d1a575f5ffd5b5f54600160e81b900460ff16611d38600483901b610ff016846159d2565b5f805460ff92909216600160e81b0260ff60e81b199092169190911790557f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b133611d826010836157e9565b6040805160ff9283168152600f600486901c166020820152868316918101919091529084166060820152608001611318565b5f80548190600160f01b900460ff16611ddf5760405162461bcd60e51b8152600401610703906157b8565b5f805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9841691638da5cb5b9160048083019260209291908290030181865afa158015611e4e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7291906159b7565b6001600160a01b03163314611e85575f5ffd5b6003546001600160801b0390811690851611611ea15783611eae565b6003546001600160801b03165b6003549092506001600160801b03600160801b909104811690841611611ed45782611ee8565b600354600160801b90046001600160801b03165b90506001600160801b03821615611f8c576003546001600160801b0390811690831603611f1d5781611f19816159eb565b9250505b600380548391905f90611f3a9084906001600160801b0316615998565b92506101000a8154816001600160801b03021916908360801b60801c0217905550611f8c7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48868460801b60801c61386f565b6001600160801b0381161561203d576003546001600160801b03600160801b909104811690821603611fc65780611fc2816159eb565b9150505b60038054829190601090611feb908490600160801b90046001600160801b0316615998565b92506101000a8154816001600160801b03021916908360801b60801c021790555061203d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2868360801b60801c61386f565b604080516001600160801b038085168252831660208201526001600160a01b0387169133917f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151910160405180910390a35f805460ff60f01b1916600160f01b1790559094909350915050565b6060806120b461261e565b612123428585808060200260200160405190810160405280939291908181526020018383602002808284375f92018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416613e50565b915091505b9250929050565b5f80548190600160f01b900460ff1661215a5760405162461bcd60e51b8152600401610703906157b8565b5f805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b91810191909152819081906121ae90606081016121a56001600160801b038a16613b6a565b6113be906158e3565b925092509250816121be9061592d565b94506121c98161592d565b93505f8511806121d857505f84115b1561223a5760038301546121f69086906001600160801b03166158c4565b6003840154612216908690600160801b90046001600160801b03166158c4565b6001600160801b039182169116600160801b026001600160801b0319161760038401555b604080516001600160801b038816815260208101879052908101859052600288810b91908a900b9033907f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c9060600160405180910390a450505f805460ff60f01b1916600160f01b179055509094909350915050565b5f5f5f6122bb61261e565b6122c58585613fac565b600285810b5f908152600560205260408082209287900b825281206003830154600681900b93600160381b82046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff1680612323575f5ffd5b6003820154600681900b9850600160381b81046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff1680612363575f5ffd5b50506040805160e0810182525f546001600160a01b0381168252600160a01b8104600290810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e900b13159050612420576123fa8688615a0c565b6124048587615a39565b61240e8486615a58565b995099509950505050505050506124df565b8a60020b816020015160020b12156124c15760208101516040820151600454606084015142935f9384936124689360089388938793919290916001600160801b031690612ff7565b9092509050886124788b84615a0c565b6124829190615a0c565b8761248d8a84615a39565b6124979190615a39565b866124a28987615a58565b6124ac9190615a58565b9c509c509c50505050505050505050506124df565b6124cb8787615a0c565b6124d58686615a39565b61240e8585615a58565b9250925092565b5f546001600160a01b0316156125235760405162461bcd60e51b8152602060048201526002602482015261414960f01b6044820152606401610703565b5f61252d826133b3565b604080516080808201835263ffffffff42168083525f602080850182905284860182905260016060958601819052600160f81b909317600855855160e0810187526001600160a01b038a16808252600289900b82840181905282890185905296820185905294810184905260a0810183905260c00183905281546001600160b81b0319168417600160a01b62ffffff8916021767ffffffffffffffff60b81b19166501000001000160c81b1790915584519283528201929092528251939450909283927f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95928290030190a150505050565b306001600160a01b037f00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f56401614612652575f5ffd5b565b5f80806126618587615a74565b90505f8660020b128015612680575061267a8587615aac565b60020b15155b15612693578061268f81615acd565b9150505b831561273d575f5f6126a483614071565b90925090505f600160ff831681901b906126be90826158b1565b6126c8919061583e565b600184900b5f90815260208c90526040902054811680151596509091508561270757886126f860ff851687615908565b6127029190615ae5565b612732565b886127118261408d565b61271b9085615b04565b6127289060ff1687615908565b6127329190615ae5565b9650505050506127ff565b5f8061275261274d846001615b1d565b614071565b90925090505f612769600160ff841681901b6158b1565b600184900b5f90815260208c9052604090205490199081168015159650909150856127c1578861279a8460ff615b04565b60ff166127a8876001615b1d565b6127b29190615b1d565b6127bc9190615ae5565b6127f8565b88836127cc8361417a565b6127d69190615b04565b60ff166127e4876001615b1d565b6127ee9190615b1d565b6127f89190615ae5565b9650505050505b5094509492505050565b5f5f5f8360020b1261281e578260020b61282b565b8260020b61282b9061592d565b905061283a620d89e71961581e565b60020b8111156128705760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610703565b5f816001165f0361288557600160801b612897565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156128d65760806128d1826ffff97272373d413259a46990580e213a615b42565b901c90505b60048216156129005760806128fb826ffff2e50f5f656932ef12357cf3c7fdcc615b42565b901c90505b600882161561292a576080612925826fffe5caca7e10e4e61c3624eaa0941cd0615b42565b901c90505b601082161561295457608061294f826fffcb9843d60f6159c9db58835c926644615b42565b901c90505b602082161561297e576080612979826fff973b41fa98c081472e6896dfb254c0615b42565b901c90505b60408216156129a85760806129a3826fff2ea16466c96a3843ec78b326b52861615b42565b901c90505b60808216156129d25760806129cd826ffe5dee046a99a2a811c461f1969c3053615b42565b901c90505b6101008216156129fd5760806129f8826ffcbe86c7900a88aedcffc83b479aa3a4615b42565b901c90505b610200821615612a28576080612a23826ff987a7253ac413176f2b074cf7815e54615b42565b901c90505b610400821615612a53576080612a4e826ff3392b0822b70005940c7a398e4b70f3615b42565b901c90505b610800821615612a7e576080612a79826fe7159475a2c29b7443b29c7fa6e889d9615b42565b901c90505b611000821615612aa9576080612aa4826fd097f3bdfd2022b8845ad8f792aa5825615b42565b901c90505b612000821615612ad4576080612acf826fa9f746462d870fdf8a65dc1f90e061e5615b42565b901c90505b614000821615612aff576080612afa826f70d869a156d2a1b890bb3df62baf32f7615b42565b901c90505b618000821615612b2a576080612b25826f31be135f97d08fd981231505542fcfa6615b42565b901c90505b62010000821615612b56576080612b51826f09aa508b5b7a84e1c677de54f3e99bc9615b42565b901c90505b62020000821615612b81576080612b7c826e5d6af8dedb81196699c329225ee604615b42565b901c90505b62040000821615612bab576080612ba6826d2216e584f5fa1ea926041bedfe98615b42565b901c90505b62080000821615612bd3576080612bce826b048a170391f7dc42444e8fa2615b42565b901c90505b5f8460020b1315612bec57612be9815f1961589e565b90505b612bfa600160201b82615b59565b15612c06576001612c08565b5f5b612c199060ff16602083901c61583e565b949350505050565b5f8080806001600160a01b03808916908a161015818712801590612cab575f612c5f89612c518a620f4240615b6c565b62ffffff16620f4240612e86565b905082612c7857612c738c8c8c60016142a3565b612c85565b612c858b8d8c600161431a565b9550858110612c96578a9650612ca5565b612ca28c8b83866143c9565b96505b50612cfd565b81612cc157612cbc8b8b8b5f61431a565b612ccd565b612ccd8a8c8b5f6142a3565b935083612cd98961592d565b10612ce657899550612cfd565b612cfa8b8a612cf48b61592d565b8561440d565b95505b6001600160a01b038a8116908716148215612d5f57808015612d1c5750815b612d3257612d2d878d8c600161431a565b612d34565b855b9550808015612d41575081155b612d5657612d51878d8c5f6142a3565b612d58565b845b9450612da8565b808015612d695750815b612d7f57612d7a8c888c60016142a3565b612d81565b855b9550808015612d8e575081155b612da357612d9e8c888c5f61431a565b612da5565b845b94505b81158015612dbd5750612dba8961592d565b85115b15612dce57612dcb8961592d565b94505b818015612de757506001600160a01b03878116908c1614155b15612dfd57612df6868a6158b1565b9350612e21565b612e1e8662ffffff8a16612e148b620f4240615b6c565b62ffffff16613daf565b93505b50505095509550955095915050565b5f600160ff1b8210612e40575f5ffd5b5090565b5f8082121583612e548482615851565b925082131514612e62575f5ffd5b92915050565b5f8082121583612e788482615877565b925082121514612e62575f5ffd5b5f80805f19858709858702925082811083820303915050805f03612eba575f8411612eaf575f5ffd5b508290049050612ff0565b808411612ec5575f5ffd5b5f848688098084039381119092039190505f85612ee48119600161583e565b16958690049593849004935f819003046001019050612f038184615b42565b909317925f612f13876003615b42565b6002189050612f228188615b42565b612f2d9060026158b1565b612f379082615b42565b9050612f438188615b42565b612f4e9060026158b1565b612f589082615b42565b9050612f648188615b42565b612f6f9060026158b1565b612f799082615b42565b9050612f858188615b42565b612f909060026158b1565b612f9a9082615b42565b9050612fa68188615b42565b612fb19060026158b1565b612fbb9082615b42565b9050612fc78188615b42565b612fd29060026158b1565b612fdc9082615b42565b9050612fe88186615b42565b955050505050505b9392505050565b5f5f8663ffffffff165f0361309d575f898661ffff1661ffff811061301e5761301e615b87565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461308957613086818a898861444f565b90505b8060200151816040015192509250506131d6565b5f6130a8888a615a58565b90505f5f6130bb8c8c858c8c8c8c614528565b91509150815f015163ffffffff168363ffffffff16036130eb5781602001518260400151945094505050506131d6565b805f015163ffffffff168363ffffffff16036131175780602001518160400151945094505050506131d6565b815181515f9161312691615a58565b83519091505f906131379086615a58565b90508063ffffffff168263ffffffff168560200151856020015161315b9190615a0c565b6131659190615b9b565b61316f9190615bce565b846020015161317e9190615bed565b8263ffffffff168263ffffffff16866040015186604001516131a09190615a39565b6131b391906001600160a01b0316615b42565b6131bd919061589e565b85604001516131cc9190615c1a565b9650965050505050505b97509795505050505050565b600286900b5f908152602088905260408120600181015461320390886158b1565b6001820155600281015461321790876158b1565b6002820155600381015461323b90600160381b90046001600160a01b031686615a39565b6003820180546001600160a01b0392909216600160381b02670100000000000000600160d81b0319909216919091179081905561327b9060060b85615a0c565b60038201805466ffffffffffffff191666ffffffffffffff9290921691909117908190556132b690600160d81b900463ffffffff1684615a58565b60038201805463ffffffff92909216600160d81b0263ffffffff60d81b1990921691909117905554600160801b9004600f0b98975050505050505050565b5f5f82600f0b1215613360576001600160801b038316613313836158e3565b61331d9085615998565b91506001600160801b0382161061335b5760405162461bcd60e51b81526020600482015260026024820152614c5360f01b6044820152606401610703565b612e62565b6001600160801b03831661337483856158c4565b91506001600160801b0382161015612e625760405162461bcd60e51b81526020600482015260026024820152614c4160f01b6044820152606401610703565b5f6401000276a36001600160a01b038316108015906133ee575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b61341e5760405162461bcd60e51b81526020600482015260016024820152602960f91b6044820152606401610703565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106134b9576134af607f826158b1565b83901c91506134ca565b6134c481607f6158b1565b83901b91505b5f60406134d8608084615851565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b82179150505f81693627a301d71055774c8561365a9190615c39565b90505f60806136796f028f6481ab7f045a5af012a19d003aaa84615851565b901d90505f608061369a846fdb2df09e81959a81455e260799a0632f615877565b901d90508060020b8260020b146136d9576001600160a01b0389166136be82612809565b6001600160a01b031611156136d357816136db565b806136db565b815b9998505050505050505050565b5f5f5f898961ffff1661ffff811061370257613702615b87565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508916900361376b57888592509250506131d6565b8461ffff168461ffff161180156137935750613788600186615c68565b61ffff168961ffff16145b156137a0578391506137a4565b8491505b816137b08a6001615c82565b6137ba9190615c9c565b92506137c88189898961444f565b8a8461ffff1661ffff81106137df576137df615b87565b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02959095166affffffffffffffffffffff66ffffffffffffff909216600160201b026affffffffffffffffffffff1990931663ffffffff909516949094179190911716919091179190911790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916138ca9190615cbf565b5f604051808303815f865af19150503d805f8114613903576040519150601f19603f3d011682016040523d82523d5f602084013e613908565b606091505b50915091508180156139325750805115806139325750808060200190518101906139329190615cd5565b6139635760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610703565b5050505050565b6040513060248201525f90819081906001600160a01b037f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4816906370a0823160e01b906044015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516139ef9190615cbf565b5f60405180830381855afa9150503d805f8114613a27576040519150601f19603f3d011682016040523d82523d5f602084013e613a2c565b606091505b5091509150818015613a4057506020815110155b613a48575f5ffd5b80806020019051810190613a5c9190615cf0565b9250505090565b5f82613a6f838261583e565b9150811015612e62575f5ffd5b6040513060248201525f90819081906001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216906370a0823160e01b906044016139b1565b5f5f8361ffff1611613aff5760405162461bcd60e51b81526020600482015260016024820152604960f81b6044820152606401610703565b8261ffff168261ffff1611613b15575081612ff0565b825b8261ffff168161ffff161015613b61576001858261ffff1661ffff8110613b4057613b40615b87565b01805463ffffffff191663ffffffff92909216919091179055600101613b17565b50909392505050565b80600f81900b8114613b7a575f5ffd5b919050565b5f5f5f613b8a61261e565b613b9c84602001518560400151613fac565b6040805160e0810182525f546001600160a01b0381168252600160a01b810460020b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c085015288519089015194890151928901519394613c399491939092909190614741565b93508460600151600f0b5f14613da757846020015160020b816020015160020b1215613c8d57613c86613c6f8660200151612809565b613c7c8760400151612809565b876060015161491e565b9250613da7565b846040015160020b816020015160020b1215613d7d5760045460408201516001600160801b0390911690613cd8904260208501516060860151608087015160089493929187916136e8565b5f805463ffffffff60b81b1916600160c81b61ffff9384160261ffff60b81b191617600160b81b939092169290920217905581516040870151613d299190613d1f90612809565b886060015161491e565b9350613d47613d3b8760200151612809565b8351606089015161495e565b9250613d578187606001516132f4565b600480546001600160801b0319166001600160801b039290921691909117905550613da7565b613da4613d8d8660200151612809565b613d9a8760400151612809565b876060015161495e565b91505b509193909250565b5f613dbb848484612e86565b90505f8280613dcc57613dcc6157d5565b8486091115612ff0575f198110613de1575f5ffd5b80613deb81615d07565b95945050505050565b6040805160609490941b6bffffffffffffffffffffffff191660208086019190915260e893841b60348601529190921b60378401528151601a818503018152603a90930182528251928101929092205f90815292909152902090565b6060805f8361ffff1611613e8a5760405162461bcd60e51b81526020600482015260016024820152604960f81b6044820152606401610703565b865167ffffffffffffffff811115613ea457613ea4615d1f565b604051908082528060200260200182016040528015613ecd578160200160208202803683370190505b509150865167ffffffffffffffff811115613eea57613eea615d1f565b604051908082528060200260200182016040528015613f13578160200160208202803683370190505b5090505f5b8751811015613f9f57613f498a8a8a8481518110613f3857613f38615b87565b60200260200101518a8a8a8a612ff7565b848381518110613f5b57613f5b615b87565b60200260200101848481518110613f7457613f74615b87565b6001600160a01b039093166020938402919091019092019190915260069190910b9052600101613f18565b5097509795505050505050565b8060020b8260020b12613fe75760405162461bcd60e51b8152602060048201526003602482015262544c5560e81b6044820152606401610703565b620d89e719600283900b12156140255760405162461bcd60e51b8152602060048201526003602482015262544c4d60e81b6044820152606401610703565b614032620d89e71961581e565b60020b8160020b131561406d5760405162461bcd60e51b815260206004820152600360248201526254554d60e81b6044820152606401610703565b5050565b600281900b60081d5f61408661010084615aac565b9050915091565b5f5f8211614099575f5ffd5b600160801b82106140b757608091821c916140b490826159d2565b90505b6801000000000000000082106140da57604091821c916140d790826159d2565b90505b600160201b82106140f857602091821c916140f590826159d2565b90505b62010000821061411557601091821c9161411290826159d2565b90505b610100821061413157600891821c9161412e90826159d2565b90505b6010821061414c57600491821c9161414990826159d2565b90505b6004821061416757600291821c9161416490826159d2565b90505b60028210613b7a57612e626001826159d2565b5f5f8211614186575f5ffd5b5060ff6001600160801b038216156141aa576141a3608082615b04565b90506141b2565b608082901c91505b67ffffffffffffffff8216156141d4576141cd604082615b04565b90506141dc565b604082901c91505b63ffffffff8216156141fa576141f3602082615b04565b9050614202565b602082901c91505b61ffff82161561421e57614217601082615b04565b9050614226565b601082901c91505b60ff8216156142415761423a600882615b04565b9050614249565b600882901c91505b600f8216156142645761425d600482615b04565b905061426c565b600482901c91505b600382161561428757614280600282615b04565b905061428f565b600282901c91505b6001821615613b7a57612e62600182615b04565b5f6001600160a01b0380851690861611156142bc579293925b816142f0576142eb6001600160801b0384166142d88787615a39565b6001600160a01b0316600160601b612e86565b613deb565b613deb6001600160801b0384166143078787615a39565b6001600160a01b0316600160601b613daf565b5f6001600160a01b038085169086161115614333579293925b600160601b600160e01b03606084901b165f61434f8787615a39565b6001600160a01b0390811691508716614366575f5ffd5b83614392578660601b60601c61438383838960601b60601c612e86565b61438d919061589e565b6143be565b6143be6143a983836001600160a01b038a16613daf565b6001600160a01b038916808204910615150190565b979650505050505050565b5f6001600160a01b0385166143dc575f5ffd5b6001600160801b0384166143ee575f5ffd5b81614400576142eb8585856001614990565b613deb8585856001614a73565b5f6001600160a01b038516614420575f5ffd5b6001600160801b038416614432575f5ffd5b81614443576142eb8585855f614a73565b613deb8585855f614990565b604080516080810182525f80825260208201819052918101829052606081019190915284515f906144809086615a58565b905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b6144ae9190615bce565b88602001516144bd9190615bed565b60060b81526020016001600160801b0385166144da5760016144dc565b845b6144fc906001600160801b031663ffffffff60801b608086901b16615d33565b886040015161450b9190615c1a565b6001600160a01b0316815260016020909101529695505050505050565b604080516080810182525f808252602082018190529181018290526060810191909152604080516080810182525f808252602082018190529181018290526060810191909152888561ffff1661ffff811061458557614585615b87565b60408051608081018252919092015463ffffffff8116808352600160201b820460060b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff161515606082015292506145e390899089614b83565b1561460f57815163ffffffff8881169116146131d657816146068389898861444f565b915091506131d6565b888361461c876001615c82565b6146269190615c9c565b61ffff1661ffff811061463b5761463b615b87565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082018190529092506146e457604080516080810182528a5463ffffffff81168252600160201b810460060b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b6146f288835f015189614b83565b6147245760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b6044820152606401610703565b6147318989898887614c4f565b9150915097509795505050505050565b5f61474f6007878787613df4565b600154600254919250905f80600f87900b15614884575f805460045442929182916147aa9160089186918591600160a01b820460020b9161ffff600160b81b82048116926001600160801b031691600160c81b900416612ff7565b90925090506147e360058d8b8d8b8b87898b5f7f0000000000000000000000000000000000005e8b2285f864419ac400be907196614e60565b945061481a60058c8b8d8b8b87898b60017f0000000000000000000000000000000000005e8b2285f864419ac400be907196614e60565b9350841561484e5761484e60068d7f000000000000000000000000000000000000000000000000000000000000000a61500e565b83156148805761488060068c7f000000000000000000000000000000000000000000000000000000000000000a61500e565b5050505b5f8061489560058c8c8b8a8a61505e565b90925090506148a6878a8484615146565b5f89600f0b121561490f5783156148e05760028b810b5f908152600560205260408120818155600181018290559182018190556003909101555b821561490f5760028a810b5f908152600560205260408120818155600181018290559182018190556003909101555b50505050505095945050505050565b5f5f82600f0b1261493e57614939610afa858585600161431a565b612c19565b614955610afa858561494f866158e3565b5f61431a565b612c199061592d565b5f5f82600f0b1261497957614939610afa85858560016142a3565b614955610afa858561498a866158e3565b5f6142a3565b5f8115614a00575f6001600160a01b038411156149c4576149bf84600160601b6001600160801b038816612e86565b6149db565b6149db6001600160801b038616606086901b61589e565b90506149f86149f36001600160a01b03881683613a63565b61532b565b915050612c19565b5f6001600160a01b03841115614a2d57614a2884600160601b6001600160801b038816613daf565b614a4a565b614a4a606085901b6001600160801b038716808204910615150190565b90506001600160a01b0386168110614a60575f5ffd5b6149f8816001600160a01b0388166158b1565b5f825f03614a82575083612c19565b600160601b600160e01b03606085901b168215614b29575f6001600160a01b03871685614aaf8282615b42565b9250614abb908361589e565b03614af4575f614acb828461583e565b9050828110614af257614ae8836001600160a01b038a1683613daf565b9350505050612c19565b505b614b2082614b1587614b0f6001600160a01b038c168461589e565b90613a63565b808204910615150190565b92505050612c19565b5f6001600160a01b03871685614b3f8282615b42565b9250614b4b908361589e565b148015614b5757508082115b614b5f575f5ffd5b5f614b6a82846158b1565b9050614ae86149f3846001600160a01b038b1684613daf565b5f8363ffffffff168363ffffffff1611158015614bac57508363ffffffff168263ffffffff1611155b15614bc8578163ffffffff168363ffffffff1611159050612ff0565b5f8463ffffffff168463ffffffff1611614bf557614bf063ffffffff8516600160201b615d61565b614bfd565b8363ffffffff165b64ffffffffff1690505f8563ffffffff168463ffffffff1611614c3357614c2e63ffffffff8516600160201b615d61565b614c3b565b8363ffffffff165b64ffffffffff169091111595945050505050565b604080516080810182525f808252602082018190529181018290526060810191909152604080516080810182525f8082526020820181905291810182905260608101919091525f83614ca2866001615c82565b614cac9190615c9c565b61ffff1690505f60018561ffff1683614cc5919061583e565b614ccf91906158b1565b90505f5b6002614cdf838561583e565b614ce9919061589e565b905089614cfa61ffff881683615b59565b61ffff8110614d0b57614d0b615b87565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909550614d7657614d6f81600161583e565b9250614cd3565b8961ffff8716614d8783600161583e565b614d919190615b59565b61ffff8110614da257614da2615b87565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094505f90614e05908b908b614b83565b9050808015614e1d5750614e1d8a8a875f0151614b83565b15614e285750614e53565b80614e3f57614e386001836158b1565b9250614e4d565b614e4a82600161583e565b93505b50614cd3565b5050509550959350505050565b60028a900b5f90815260208c90526040812080546001600160801b031682614e88828d6132f4565b90506001600160801b038086169082161115614ecb5760405162461bcd60e51b81526020600482015260026024820152614c4f60f01b6044820152606401610703565b6001600160801b03818116159083168015919091141594505f03614f7d578c60020b8e60020b13614f6557600183018b9055600283018a905560038301805466ffffffffffffff8a166001600160f81b0319909116600160381b6001600160a01b038d16027fff00000000ffffffffffffffffffffffffffffffffffffffff00000000000000161717600160d81b63ffffffff8a16021790555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b03821617835585614fc4578254614fbf90614fba90600160801b9004600f90810b908f900b612e68565b613b6a565b614fe3565b8254614fe390614fba90600160801b9004600f90810b908f900b612e44565b83546001600160801b03918216600160801b0291161790925550909c9b505050505050505050505050565b6150188183615aac565b60020b15615024575f5ffd5b5f8061503361274d8486615a74565b600191820b5f9081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b5f8181526020899052604080822088850b83529082209193849391929184918291908a900b1261509e575050600182015460028301546150c2565b60018401546150ad90896158b1565b91508360020154876150bf91906158b1565b90505b5f5f8b60020b8b60020b12156150e357505060018301546002840154615107565b60018501546150f2908b6158b1565b915084600201548961510491906158b1565b90505b81615112858c6158b1565b61511c91906158b1565b975080615129848b6158b1565b61513391906158b1565b9650505050505050965096945050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201525f600f85900b81036151e15781516001600160801b03166151d95760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610703565b5080516151f0565b81516151ed90866132f4565b90505b5f61521983602001518661520491906158b1565b84516001600160801b0316600160801b612e86565b90505f61524484604001518661522f91906158b1565b85516001600160801b0316600160801b612e86565b905086600f0b5f1461526a5787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061529757506001600160801b03811615155b15615321576003880180548391905f906152bb9084906001600160801b03166158c4565b92506101000a8154816001600160801b03021916908360801b60801c0217905550808860030160108282829054906101000a900460801b60801c6152ff91906158c4565b92506101000a8154816001600160801b03021916908360801b60801c02179055505b5050505050505050565b806001600160a01b0381168114613b7a575f5ffd5b6001600160a01b0381168114615354575f5ffd5b50565b8015158114615354575f5ffd5b5f5f83601f840112615374575f5ffd5b50813567ffffffffffffffff81111561538b575f5ffd5b602083019150836020828501011115612128575f5ffd5b5f5f5f5f5f5f60a087890312156153b7575f5ffd5b86356153c281615340565b955060208701356153d281615357565b94506040870135935060608701356153e981615340565b9250608087013567ffffffffffffffff811115615404575f5ffd5b61541089828a01615364565b979a9699509497509295939492505050565b5f60208284031215615432575f5ffd5b5035919050565b5f60208284031215615449575f5ffd5b813561ffff81168114612ff0575f5ffd5b8035600281900b8114613b7a575f5ffd5b80356001600160801b0381168114613b7a575f5ffd5b5f5f5f5f5f5f60a08789031215615496575f5ffd5b86356154a181615340565b95506154af6020880161545a565b94506154bd6040880161545a565b93506153e96060880161546b565b5f5f5f5f5f608086880312156154df575f5ffd5b85356154ea81615340565b94506020860135935060408601359250606086013567ffffffffffffffff811115615513575f5ffd5b61551f88828901615364565b969995985093965092949392505050565b5f5f5f5f5f60a08688031215615544575f5ffd5b853561554f81615340565b945061555d6020870161545a565b935061556b6040870161545a565b92506155796060870161546b565b91506155876080870161546b565b90509295509295909350565b5f602082840312156155a3575f5ffd5b81358060010b8114612ff0575f5ffd5b803560ff81168114613b7a575f5ffd5b5f5f604083850312156155d4575f5ffd5b6155dd836155b3565b91506155eb602084016155b3565b90509250929050565b5f5f5f60608486031215615606575f5ffd5b833561561181615340565b925061561f6020850161546b565b915061562d6040850161546b565b90509250925092565b5f5f60208385031215615647575f5ffd5b823567ffffffffffffffff81111561565d575f5ffd5b8301601f8101851361566d575f5ffd5b803567ffffffffffffffff811115615683575f5ffd5b8560208260051b8401011115615697575f5ffd5b6020919091019590945092505050565b604080825283519082018190525f9060208501906060840190835b818110156156e357835160060b8352602093840193909201916001016156c2565b5050838103602080860191909152855180835291810192508501905f5b818110156157275782516001600160a01b0316845260209384019390920191600101615700565b50919695505050505050565b5f5f5f60608486031215615745575f5ffd5b61574e8461545a565b925061561f6020850161545a565b5f5f6040838503121561576d575f5ffd5b6157768361545a565b91506155eb6020840161545a565b5f60208284031215615794575f5ffd5b612ff08261545a565b5f602082840312156157ad575f5ffd5b8135612ff081615340565b6020808252600390820152624c4f4b60e81b604082015260600190565b634e487b7160e01b5f52601260045260245ffd5b5f60ff8316806157fb576157fb6157d5565b8060ff84160691505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f8160020b627fffff1981036158365761583661580a565b5f0392915050565b80820180821115612e6257612e6261580a565b8181035f8312801583831316838312821617156158705761587061580a565b5092915050565b8082018281125f8312801582168215821617156158965761589661580a565b505092915050565b5f826158ac576158ac6157d5565b500490565b81810381811115612e6257612e6261580a565b6001600160801b038181168382160190811115612e6257612e6261580a565b5f81600f0b6f7fffffffffffffffffffffffffffffff1981036158365761583661580a565b600282810b9082900b03627fffff198112627fffff82131715612e6257612e6261580a565b5f600160ff1b82016159415761594161580a565b505f0390565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b848152836020820152606060408201525f61598e606083018486615947565b9695505050505050565b6001600160801b038281168282160390811115612e6257612e6261580a565b5f602082840312156159c7575f5ffd5b8151612ff081615340565b60ff8181168382160190811115612e6257612e6261580a565b5f6001600160801b03821680615a0357615a0361580a565b5f190192915050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff82131715612e6257612e6261580a565b6001600160a01b038281168282160390811115612e6257612e6261580a565b63ffffffff8281168282160390811115612e6257612e6261580a565b5f8160020b8360020b80615a8a57615a8a6157d5565b627fffff1982145f1982141615615aa357615aa361580a565b90059392505050565b5f8260020b80615abe57615abe6157d5565b808360020b0791505092915050565b5f8160020b627fffff198103615a0357615a0361580a565b5f8260020b8260020b028060020b91508082146158705761587061580a565b60ff8281168282160390811115612e6257612e6261580a565b600281810b9083900b01627fffff8113627fffff1982121715612e6257612e6261580a565b8082028115828204841417612e6257612e6261580a565b5f82615b6757615b676157d5565b500690565b62ffffff8281168282160390811115612e6257612e6261580a565b634e487b7160e01b5f52603260045260245ffd5b5f8160060b8360060b80615bb157615bb16157d5565b667fffffffffffff1982145f1982141615615aa357615aa361580a565b5f8260060b8260060b028060060b91508082146158705761587061580a565b600681810b9083900b01667fffffffffffff8113667fffffffffffff1982121715612e6257612e6261580a565b6001600160a01b038181168382160190811115612e6257612e6261580a565b8082025f8212600160ff1b84141615615c5457615c5461580a565b8181058314821517612e6257612e6261580a565b61ffff8281168282160390811115612e6257612e6261580a565b61ffff8181168382160190811115612e6257612e6261580a565b5f61ffff831680615caf57615caf6157d5565b8061ffff84160691505092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615ce5575f5ffd5b8151612ff081615357565b5f60208284031215615d00575f5ffd5b5051919050565b5f60018201615d1857615d1861580a565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f6001600160a01b03831680615d4b57615d4b6157d5565b6001600160a01b03929092169190910492915050565b64ffffffffff8181168382160190811115612e6257612e6261580a56