solc-0.8.36-doubleshift20 0x8b0e044e364f2ce913799d53b300e15a6974dc97 optimized-low-runs
20487 bytes
608060405234801561000f575f5ffd5b506004361061015d575f3560e01c8063022c0d9f1461016157806304c785bc1461017657806307d3277f146101935780630902f1ac146101c75780630cf6c461146101fb578063182148ef1461020e57806321d0ee70146102e4578063259982e5146102e4578063575e24b41461031057806367e4ac2c1461034e57806369ef7317146103645780636c2bbe7e146103795780636fe7e6eb146103ac5780637165485d146103bf57806374e750bb146103e357806374f792fa1461044657806379d8353b146104595780638e0dc28d146104805780639f063efc14610379578063a5e90eee14610493578063a70354a1146104a1578063aaed87a3146104c7578063b47b2fb1146104ef578063b6a8b0fa14610525578063c4e833ce14610538578063dc4c90d31461054d578063dc98354e14610574578063e1b4af6914610525578063fdff9b4d14610587575b5f5ffd5b61017461016f3660046143c0565b61059a565b005b61017e610820565b60405190151581526020015b60405180910390f35b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b60405161018a9190614424565b6101cf6108ff565b604080516001600160701b03948516815293909216602084015263ffffffff169082015260600161018a565b610174610209366004614445565b610975565b6102916040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a0810182525f546001600160a01b039081168252600154808216602084015262ffffff600160a01b82041693830193909352600160b81b909204600290810b606083015254909116608082015290565b60405161018a919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015160020b90830152608092830151169181019190915260a00190565b6102f76102f23660046144b0565b610981565b6040516001600160e01b0319909116815260200161018a565b61032361031e366004614519565b6109e2565b604080516001600160e01b03199094168452602084019290925262ffffff169082015260600161018a565b610356610a4c565b60405161018a929190614572565b61036c610b23565b60405161018a9190614599565b61038c6103873660046146c0565b610b38565b604080516001600160e01b0319909316835260208301919091520161018a565b6102f76103ba366004614758565b610ba2565b6103d56b22bab632b929bbb0b8103b1960a11b81565b60405190815260200161018a565b6103eb610c03565b60405161018a919081516001600160a01b03908116825260208084015182169083015260408084015182169083015260608084015182169083015260808084015182169083015260a092830151169181019190915260c00190565b610174610454366004614445565b610c13565b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6103d561048e3660046147be565b610c2b565b610174610209366004614803565b7f00000000000000000000000000000000000000000000000000000000000000006101ba565b6104da6104d536600461483a565b610cc1565b6040805192835260208301919091520161018a565b6105026104fd366004614866565b610e62565b604080516001600160e01b03199093168352600f9190910b60208301520161018a565b6102f76105333660046148e6565b610eca565b610540610f2d565b60405161018a919061493f565b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6102f7610582366004614a59565b611011565b61017e610595366004614aa0565b611070565b6105a261109e565b5f6105ab61112a565b8054909150600160e01b900463ffffffff166001146105dd576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781556001600160701b03861180159061060e57506001600160701b038511155b61062b57604051636b2f218360e01b815260040160405180910390fd5b5f61067f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061067961114e565b88611213565b905061068c81888861138d565b6106958161139f565b61069e816114b6565b821561070d576001600160a01b038516638f536f3e6106bb61114e565b898988886040518663ffffffff1660e01b81526004016106df959493929190614abb565b5f604051808303815f87803b1580156106f6575f5ffd5b505af1158015610708573d5f5f3e3d5ffd5b505050505b6107f381826080015160601b60601c6370a08231306040518263ffffffff1660e01b815260040161073e9190614424565b602060405180830381865afa158015610759573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077d9190614b06565b60a08401516040516370a0823160e01b81526001600160a01b03909116906370a08231906107af903090600401614424565b602060405180830381865afa1580156107ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ee9190614b06565b6114ce565b6107fc816114e0565b610805816114f5565b5080546001600160e01b0316600160e01b1790555050505050565b5f5f61082a61112a565b8054909150600160e01b900463ffffffff1660020361085c576040516303cb96db60e21b815260040160405180910390fd5b5f6108656116af565b6080810151604051630b23949560e11b81529192506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631647292a916108b9913090600401614572565b602060405180830381865afa1580156108d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f89190614b1d565b9250505090565b5f5f5f5f61090b61112a565b8054909150600160e01b900463ffffffff1660020361093d576040516303cb96db60e21b815260040160405180910390fd5b5f61094661112a565b546001600160701b038082169650600160701b820416945063ffffffff600160e01b9091041692505050909192565b61097d6116f6565b5050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109cb5760405163570c108560e11b815260040160405180910390fd5b6109d8868686868661177e565b9695505050505050565b5f8080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a2e5760405163570c108560e11b815260040160405180910390fd5b610a3b8888888888611798565b925092509250955095509592505050565b5f5f5f610a576116af565b9050805f015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a95573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab99190614b38565b9250806020015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610af8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1c9190614b38565b9150509091565b610b2b61424f565b610b33611be7565b905090565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b835760405163570c108560e11b815260040160405180910390fd5b610b9289898989898989611d67565b9150915097509795505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bec5760405163570c108560e11b815260040160405180910390fd5b610bf88585858561177e565b90505b949350505050565b610c0b6142ba565b610b336116af565b610c1b6116f6565b61097d610c266116af565b611d82565b5f5f610c3561112a565b8054909150600160e01b900463ffffffff16600203610c67576040516303cb96db60e21b815260040160405180910390fd5b5f610c706116af565b90505f610c7b611be7565b9050610cb57f00000000000000000000000000000000000000000000000000000000000000008383610cae868d8d61201b565b8a8a61216c565b98975050505050505050565b5f5f5f610ccc61112a565b8054909150600160e01b900463ffffffff16600203610cfe576040516303cb96db60e21b815260040160405180910390fd5b5f610d076116af565b90505f610d12611be7565b6080830151604051630b23949560e11b81529192506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631647292a91610d66913090600401614572565b602060405180830381865afa158015610d81573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da59190614b1d565b610db6575f5f945094505050610e5a565b61014081015164ffffffffff1615801590610ddc57504281610140015160d81b60d81c11155b15610dee575f5f945094505050610e5a565b5f610dfa83898961201b565b90505f610e0783836123a4565b6001600160401b03169050670de0b6b3a76400008110610e30575f5f9650965050505050610e5a565b610e3c84848484612505565b90975095508515610e555785610e5181614b67565b9650505b505050505b509250929050565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ead5760405163570c108560e11b815260040160405180910390fd5b610ebb888888888888611d67565b91509150965096945050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f145760405163570c108560e11b815260040160405180910390fd5b610f2287878787878761177e565b979650505050505050565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018190526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b5f336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461105b5760405163570c108560e11b815260040160405180910390fd5b61106684848461177e565b90505b9392505050565b5f5f61107a61112a565b6001600160a01b039093165f90815260019093016020525050604090205460ff1690565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811633036110d25750565b631f8b521560e01b5f52306004523360245234604452608060645236608452365f60a4375f3660a401525f5f601f19601f36011660a4015f34855af13d5f5f3e8080156111215760403d036040f35b3d5ffd5b505050565b7f10ee9b31f73104ff2cf413742414a498e1f7b56c11cb512bca58a9c50727bb5890565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016810361120e57604051630c281d0f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318503a1e906111cc905f90600401614424565b6040805180830381865afa1580156111e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120a9190614b7c565b5090505b919050565b61121b6142ee565b6001600160a01b038086168252841660208201526112376116af565b6040820152611244611be7565b816060018190525080604001515f015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b09190614b38565b6001600160a01b03908116608083015260408083015160209081015182516338d52e0f60e01b815292519316926338d52e0f9260048082019392918290030181865afa158015611302573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113269190614b38565b6001600160a01b0390811660a083015283811660c0830152821660e08201526060810151610140015164ffffffffff1615806113705750428160600151610140015160d81b60d81c115b610bfb57604051630407b05b60e31b815260040160405180910390fd5b61014083019190915261016090910152565b606081015161016001516001165f036113b55750565b6060810151610180015161014082015161016083015160c084015160e0850151604051602481019490945260448401929092526001600160a01b03908116606484015290811660848301525f92839291169060a40160408051601f198184030181529181526020820180516001600160e01b03166337b9cd0d60e11b1790525161143f9190614ba9565b5f604051808303815f865af19150503d805f8114611478576040519150601f19603f3d011682016040523d82523d5f602084013e61147d565b606091505b509092509050600181836114af57604051630351728360e61b81526004016114a6929190614bed565b60405180910390fd5b5050505050565b6114c0815f612aee565b6114cb816001612aee565b50565b61010083019190915261012090910152565b6114eb816001612b66565b6114cb815f612b66565b5f6114fe61112a565b61014083015161018084015182549293505f9261152491906001600160701b0316614c08565b61152e9190614c1b565b6101608401516101a085015184549293505f9261155b9190600160701b90046001600160701b0316614c08565b6115659190614c1b565b905061157684606001518383612dca565b6115935760405163d93c670b60e01b815260040160405180910390fd5b82546001600160701b03828116600160701b026001600160e01b0319909216908416171783556101808401516101008501515f916115d091614c1b565b90505f856101a001518661012001516115e99190614c1b565b60e08781015160c0808a01516101808b01516101a08c01516101408d01516101608e01518d546040805195865260208601949094529284019190915260608301526080820189905260a082018790526001600160701b0380821694830194909452600160701b9004909216938201939093529293506001600160a01b03908116929116907f8337ab1cd063c6a0121e4b67ad00ec5640783101bb89ad879ffb0fe28b503e95906101000160405180910390a36116a786868484612f12565b505050505050565b6116b76142ba565b60c03610156116d95760405163a7c1249960e01b815260040160405180910390fd5b6116e93660bf198101815f614c2e565b810190610b339190614c99565b5f5f7f000000000000000000000000000000000000000000000000000000000000000060601b60601c5f3660405161172f929190614d43565b5f60405180830381855af49150503d805f8114611767576040519150601f19603f3d011682016040523d82523d5f602084013e61176c565b606091505b50915091508161097d57805181602001fd5b5f604051630a85dc2960e01b815260040160405180910390fd5b5f5f5f5f6117a461112a565b8054909150600160e01b900463ffffffff166001146117d6576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781555f6118367f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008c33611213565b90505f808060208b0135811380156118a65761185560208d0135614d52565b935061189f7f0000000000000000000000000000000000000000000000000000000000000000866040015187606001518f5f0160208101906118979190614d6c565b88600161216c565b92506118f7565b8b6020013592506118f47f0000000000000000000000000000000000000000000000000000000000000000866040015187606001518f5f0160208101906118ed9190614d6c565b875f61216c565b93505b61190460208d018d614d6c565b1561192457611914855f8561138d565b61191f85855f6114ce565b61193a565b61192f85845f61138d565b61193a855f866114ce565b6119438561139f565b8061197e5761197961195484613094565b61195d90614d87565b61196686613094565b6001600160801b031660809190911b1790565b61199c565b61199c61198a85613094565b61199385613094565b61196690614d87565b91506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b0d9c096119da60208f018f614d6c565b6119f6578e60200160208101906119f19190614aa0565b611a08565b8e5f016020810190611a089190614aa0565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018790526064015f604051808303815f87803b158015611a53575f5ffd5b505af1158015611a65573d5f5f3e3d5ffd5b50505050611a72856114e0565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a5841194611aae60208f018f614d6c565b611ac9578e5f016020810190611ac49190614aa0565b611adc565b8e6020016020810190611adc9190614aa0565b6040518263ffffffff1660e01b8152600401611af89190614424565b5f604051808303815f87803b158015611b0f575f5ffd5b505af1158015611b21573d5f5f3e3d5ffd5b50505050611b2e856114b6565b7f000000000000000000000000000000000000000000000000000000000000000060601b60601c6311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611b88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bac9190614b06565b50611bb6856114f5565b5084546001600160e01b0316600160e01b17909455506315d7892d60e21b9b929a505f995091975050505050505050565b611bef61424f565b50604080516101a0810182527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb219546001600160701b038082168352600160701b91829004811660208401527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21a5480821694840194909452920490911660608201527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21b546001600160501b038082166080840152600160501b82041660a0830152600160a01b90046001600160401b0390811660c08301527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21c5480821660e0840152600160401b81048216610100840152600160801b8104909116610120830152600160c01b810464ffffffffff16610140830152600160e81b900460ff166101608201527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21d546001600160a01b031661018082015290565b5f5f604051630a85dc2960e01b815260040160405180910390fd5b5f611d8b61112a565b8054909150600160e01b900463ffffffff16600114611dbd576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161561200557611e1030611e0b610f2d565b6130b4565b5f825f015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e4d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e719190614b38565b90505f836020015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eb1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed59190614b38565b6040805160a080820183526001600160a01b03868116808452858216602085018190525f85870181905260016060870181905230608090970187905281546001600160a01b0319908116851790925580546001600160d01b031916909217600160b81b17918290556002805490911686178155955163313b65df60e11b8152600481019290925280831660248301529283901c62ffffff16604482015260b89290921c90930b60648201526084810191909152600160601b60a48201529192507f00000000000000000000000000000000000000000000000000000000000000001690636276cbbe9060c4016020604051808303815f875af1158015611fdd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120019190614da8565b5050505b80546001600160e01b0316600160e01b17905550565b5f5f845f015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612059573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207d9190614b38565b90505f856020015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e19190614b38565b90506001600160a01b0385811690831614801561210957506001600160a01b03848116908216145b156121175760019250612163565b6001600160a01b0385811690821614801561213d57506001600160a01b03848116908316145b1561214a575f9250612163565b604051634617192b60e01b815260040160405180910390fd5b50509392505050565b5f825f0361217b57505f6109d8565b6001600160701b038311156121a357604051630e8d18f560e31b815260040160405180910390fd5b6080860151604051630b23949560e11b81526001600160a01b03891691631647292a916121d591903090600401614572565b602060405180830381865afa1580156121f0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122149190614b1d565b6122315760405163715756a960e01b815260040160405180910390fd5b61014085015164ffffffffff16158061225457504285610140015160d81b60d81c115b61227157604051630407b05b60e31b815260040160405180910390fd5b5f61227c86866123a4565b6001600160401b03169050670de0b6b3a764000081106122af57604051631f77084960e01b815260040160405180910390fd5b5f5f6122bd89898986612505565b9150915084156122f157670de0b6b3a76400006122da8488614dc3565b6122e49190614dda565b6122ee9087614c1b565b95505b5f6122fe8988888b6132e1565b90508515612338578287111580156123165750818111155b61233357604051630e8d18f560e31b815260040160405180910390fd5b612396565b8187111580156123485750828111155b61236557604051630e8d18f560e31b815260040160405180910390fd5b61237784670de0b6b3a7640000614c1b565b61238982670de0b6b3a7640000614dc3565b6123939190614dda565b90505b9a9950505050505050505050565b6101608201516001600160401b0390600216156124cd575f6123c461112a565b61018085015181546040519293505f9283926001600160a01b0316916124079188916001600160701b0380821692600160701b9092041690600190602401614df9565b60408051601f198184030181529181526020820180516001600160e01b031663b7788faf60e01b1790525161243c9190614ba9565b5f60405180830381855afa9150503d805f8114612474576040519150601f19603f3d011682016040523d82523d5f602084013e612479565b606091505b509150915081801561248d57506020815110155b60028290916124b157604051630351728360e61b81526004016114a6929190614bed565b5050808060200190518101906124c79190614e38565b93505050505b6002600160401b03196001600160401b038216016124ff57816124f5578261012001516124fc565b8261010001515b90505b92915050565b5f5f5f61251061112a565b60808801519091506001600160701b039081905f88612533578a60200151612536565b8a515b90505f89612548578b6060015161254e565b8b604001515b60405163402d267d60e01b81529091505f906001600160a01b0384169063402d267d9061257f908790600401614424565b602060405180830381865afa15801561259a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125be9190614b06565b90506001600160a01b038216156126475760405163d283e75f60e01b81526001600160a01b0383169063d283e75f906125fb908790600401614424565b602060405180830381865afa158015612616573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061263a9190614b06565b6126449082614c08565b90505b85811015612653578095505b5050505f8861267b5760408a0151855461267691906001600160701b0316614e51565b61269c565b60608a0151855461269c9190600160701b90046001600160701b0316614e51565b90506001600160701b0381168311156126bc576001600160701b03811692505b505f886126ca578a516126d0565b8a602001515b90505f896126e2578b604001516126e8565b8b606001515b6040516370a0823160e01b81529091505f906001600160a01b038416906307a2d13a9082906370a0823190612721908990600401614424565b602060405180830381865afa15801561273c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127609190614b06565b6040518263ffffffff1660e01b815260040161277e91815260200190565b602060405180830381865afa158015612799573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127bd9190614b06565b90505f8360601b60601c63961be3916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061281d9190614b06565b90508082118061283857506001600160a01b03848116908416145b1561284e5785811015612849578095505b6128d6565b816001600160a01b038416156128c8578360601b60601c63961be3916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612897573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128bb9190614b06565b6128c59082614c08565b90505b868110156128d4578096505b505b506001600160a01b038216156129f5575f8260601b60601c6318e22d986040518163ffffffff1660e01b81526004016040805180830381865afa15801561291f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129439190614e81565b9150505f6129548261ffff1661356b565b90505f1981146129f2575f8460601b60601c6347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612998573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129bc9190614b06565b90505f8282116129d5576129d08284614c1b565b6129d7565b5f5b6129e19086614c08565b9050888110156129ef578098505b50505b50505b5050505f612a058a845f8c6132e1565b90506001600160701b038111612a535783811015612a4e57612a2f88670de0b6b3a7640000614c1b565b612a4182670de0b6b3a7640000614dc3565b612a4b9190614dda565b93505b612ade565b5f612a878b670de0b6b3a7640000612a6b8c82614c1b565b612a759089614dc3565b612a7f9190614dda565b60018d6132e1565b905083811015612adc57925082612aa689670de0b6b3a7640000614c1b565b612ab28c865f8e6132e1565b612ac490670de0b6b3a7640000614dc3565b612ace9190614dda565b915084821015612adc578194505b505b5091999098509650505050505050565b5f81612aff57826101400151612b06565b8261016001515b9050805f03612b1457505050565b611125835f015184604001516080015184612b3457604086015151612b3e565b8560400151602001515b85612b5157866040015160400151612b5b565b8660400151606001515b858860e00151613591565b5f81612b7757826101200151612b7e565b8261010001515b9050805f03612b8c57505050565b5f82612b9c578360a00151612ba2565b83608001515b90505f612bb3856060015185613880565b6001600160401b03169050670de0b6b3a76400008110612be657604051631f77084960e01b815260040160405180910390fd5b5f670de0b6b3a7640000612bfa8386614dc3565b612c049190614dda565b60208701516040516302a64b8360e21b81529192505f9182916001600160a01b031690630a992e0c90612c3b903090600401614424565b6040805180830381865afa158015612c55573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c799190614eb2565b90925090506001600160401b03811615612ceb575f670de0b6b3a7640000612caa6001600160401b03841686614dc3565b612cb49190614dda565b90508015612ce957612cd06001600160a01b0387168483613950565b612cda8188614c1b565b9650612ce68185614c1b565b93505b505b5050604086015160a001516001600160a01b031615801590612d0c57508015155b15612d3f57604086015160a00151612d2f906001600160a01b0385169083613950565b612d398185614c1b565b93505f90505b612d8c865f015187604001516080015187612d6257886040015160200151612d69565b6040890151515b88612d7c57896040015160600151612d86565b8960400151604001515b886139a2565b9350808411612d9b575f612da5565b612da58185614c1b565b93508415612dba5761018086018490526116a7565b6101a08601849052505050505050565b5f6001600160701b03831180612de657506001600160701b0382115b15612df257505f611069565b60408401516001600160701b0316831080612e19575060608401516001600160701b031682105b15612e2557505f611069565b83516001600160701b03168310612ea45760208401516001600160701b03168210612e5257506001611069565b60a084015160808501516020860151865160e0880151612e9a9487946001600160501b03918216949116926001600160701b03918216929116906001600160401b0316613ce6565b8310159050611069565b60208401516001600160701b0316821015612ec057505f611069565b608084015160a08501518551602087015160c0880151612f089488946001600160501b03918216949116926001600160701b03918216929116906001600160401b0316613ce6565b8210159050611069565b606084015161016001516004161561308e578254600160e01b6001600160e01b03821617808555606086015161018090810151908701516101a08801516101408901516101608a015160c08b015160e08c0151604051602481019690965260448601949094526064850192909252608484015260a4830188905260c483018790526001600160a01b0390811660e48401529081166101048301526001600160701b03948516610124830152600160701b9093049093166101448401525f928392909116906101640160408051601f198184030181529181526020820180516001600160e01b0316630714f6d160e01b1790525161300f9190614ba9565b5f604051808303815f865af19150503d805f8114613048576040519150601f19603f3d011682016040523d82523d5f602084013e61304d565b606091505b5090925090506004818361307657604051630351728360e61b81526004016114a6929190614bed565b505084546001600160e01b0316600160e11b17855550505b50505050565b5f6001607f1b82106130b0576130b06393dafdf160e01b613d68565b5090565b6130c96001600160a01b038316612000613d70565b815115159015151415806130f957506130ed6001600160a01b038316611000613d70565b15158160200151151514155b8061312057506131146001600160a01b038316610800613d70565b15158160400151151514155b80613147575061313b6001600160a01b038316610400613d70565b15158160600151151514155b8061316e57506131626001600160a01b038316610200613d70565b15158160800151151514155b8061319557506131896001600160a01b038316610100613d70565b15158160a00151151514155b806131bb57506131af6001600160a01b0383166080613d70565b15158160c00151151514155b806131e157506131d56001600160a01b0383166040613d70565b15158160e00151151514155b8061320857506131fb6001600160a01b0383166020613d70565b1515816101000151151514155b8061322f57506132226001600160a01b0383166010613d70565b1515816101200151151514155b8061325657506132496001600160a01b0383166008613d70565b1515816101400151151514155b8061327d57506132706001600160a01b0383166004613d70565b1515816101600151151514155b806132a457506132976001600160a01b0383166002613d70565b1515816101800151151514155b806132cb57506132be6001600160a01b0383166001613d70565b1515816101a00151151514155b1561097d5761097d630732d7b560e51b83613d7f565b5f5f6132eb61112a565b8054608088015160a0890151895160208b015160c08c015160e08d01519697506001600160701b0380871697600160701b9097048116966001600160501b039687169690951694938116939216916001600160401b0391821691165f808d15613431578c156133c6576133678f6001600160701b038c16614c08565b91508582116133855761337e828989898989613ce6565b9050613396565b61339382888a888a88613d94565b90505b6001600160701b03891681106133ac575f6133bf565b6133bf816001600160701b038b16614c1b565b9b50613558565b6133d98f6001600160701b038b16614c08565b90508481116133f7576133f081888a888a88613ce6565b9150613408565b613405818989898989613d94565b91505b6001600160701b038a16821061341e575f6133bf565b6133bf826001600160701b038c16614c1b565b8c156134c6576001600160701b0389168f1061345b575f199b505050505050505050505050610bfb565b61346e8f6001600160701b038b16614c1b565b905084811161348c5761348581888a888a88613ce6565b915061349d565b61349a818989898989613d94565b91505b6001600160701b038a1682116134b3575f6133bf565b6133bf6001600160701b038b1683614c1b565b6001600160701b038a168f106134ea575f199b505050505050505050505050610bfb565b6134fd8f6001600160701b038c16614c1b565b915085821161351b57613514828989898989613ce6565b905061352c565b61352982888a888a88613d94565b90505b6001600160701b0389168111613542575f613555565b6135556001600160701b038a1682614c1b565b9b505b5050505050505050505050949350505050565b5f815f0361357b57505f19919050565b6064603f8316600a0a600684901c020492915050565b6040516370a0823160e01b81525f9081906001600160a01b038716906370a08231906135c1908a90600401614424565b602060405180830381865afa1580156135dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136009190614b06565b90508015613674576040516303d1689d60e11b8152600481018290526001600160a01b038716906307a2d13a90602401602060405180830381865afa15801561364b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061366f9190614b06565b613676565b5f5b9150508015613764575f81841061368d578161368f565b835b604051602481018290526001600160a01b038581166044830152898116606483015291925090891690631f8b52159088908a905f9060840160408051601f198184030181529181526020820180516001600160e01b0316632d182be560e21b179052516001600160e01b031960e087901b1681526137139493929190600401614edc565b5f604051808303815f875af115801561372e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137559190810190614f0e565b506137608185614c1b565b9350505b8215613877576040516330da145b60e21b81526001600160a01b0388169063c368516c906137989089908890600401614572565b5f604051808303815f87803b1580156137af575f5ffd5b505af11580156137c1573d5f5f3e3d5ffd5b505050508660601b60601c631f8b521585885f87876040516024016137e7929190614fa0565b60408051601f198184030181529181526020820180516001600160e01b0316630967fa2960e31b179052516001600160e01b031960e087901b1681526138339493929190600401614edc565b5f604051808303815f875af115801561384e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138759190810190614f0e565b505b50505050505050565b6101608201516001600160401b0390600216156124cd575f6138a061112a565b61018085015181546040519293505f9283926001600160a01b0316916138e29188916001600160701b0380821692600160701b90920416908690602401614df9565b60408051601f198184030181529181526020820180516001600160e01b031663b7788faf60e01b179052516139179190614ba9565b5f604051808303815f865af19150503d805f8114612474576040519150601f19603f3d011682016040523d82523d5f602084013e612479565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611125908490613f09565b6040516311f3f6b160e21b81525f9081906001600160a01b038816906347cfdac4906139d49089908890600401614572565b602060405180830381865afa1580156139ef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a139190614b1d565b15613bd05760405163d283e75f60e01b81525f906001600160a01b0386169063d283e75f90613a46908a90600401614424565b602060405180830381865afa158015613a61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a859190614b06565b90505f6001600160a01b03861663acb70815838711613aa45786613aa6565b835b8a6040518363ffffffff1660e01b8152600401613ac4929190614fa0565b6020604051808303815f875af1158015613ae0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b049190614b06565b9050613b108186614c1b565b9450613b1c8183614c1b565b9150613b288184614c08565b9250815f03613bcd576040805160048082526024820183526020820180516001600160e01b031663869e50c760e01b1790529151631f8b521560e01b81526001600160a01b038c1692631f8b521592613b89928b928e925f92909101614edc565b5f604051808303815f875af1158015613ba4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613bcb9190810190614f0e565b505b50505b82156109d857604051636e553f6560e01b81526001600160a01b03861690636e553f6590613c049086908a90600401614fa0565b6020604051808303815f875af1925050508015613c3e575060408051601f3d908101601f19168201909252613c3b91810190614b06565b60015b613cda573d808015613c6b576040519150601f19603f3d011682016040523d82523d5f602084013e613c70565b606091505b5063ca0985cf60e01b613c8282614fb7565b6001600160e01b0319161480613cb05750639811e0c760e01b613ca482614fb7565b6001600160e01b031916145b8190613cd0576040516320d0a2b560e21b81526004016114a69190614ff5565b505f935050613cdc565b505b610f228382614c08565b5f5f82670de0b6b3a764000003613d17575f613d0c898703890288808206151591040190565b85019150613d4f9050565b8785038702670de0b6b3a76400008481038702858b020190888b02025f613d3f848484613f6c565b8881019081105f03179450505050505b6001600160701b03811115610f22575f199150506109d8565b805f5260045ffd5b166001600160a01b0316151590565b815f526001600160a01b03811660045260245ffd5b5f600182901b84028602670de0b6b3a764000084890387028887020102818110918391908383038183031884018a8106151585168b82048101613dd6565b0190565b9450505050505f5f613df6607f613dec85613fd0565b9080821191030290565b90505f613e0f606d613dec8b6503782dace9d902613fd0565b9050808210613e1e5781613e20565b805b92505050600181901b5f8415613e91575f613e4e670de0b6b3a7640000899003890260021b8b800285614056565b90505f613e5c868086614056565b90508181015f86613e6c83614089565b901b9050613e8688820160018d901b808206151591040190565b945050505050613ef5565b5f613eaf670de0b6b3a7640000899003890260021b8b8002856140a2565b90505f613ebd8680866140a2565b90508181015f86613ecd836140c7565b901b9050613eee670de0b6b3a76400008c900360011b8e80028a84016140df565b9450505050505b9788119097039a9950505050505050505050565b5f5f60205f8451602086015f885af180613f28576040513d5f823e3d81fd5b50505f513d91508115613f3f578060011415613f4c565b6001600160a01b0384163b155b1561308e5783604051635274afe760e01b81526004016114a69190614424565b5f5f5f5f613f7b878787614106565b919450925090505f19828611015f839003613fb457613fa9818786048887061515015b81019081105f031790565b945050505050611069565b610cb581613f9e845f10613fca88888c8961412e565b90614184565b80157ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c601f161a909118016101000390565b5f5f19838509838502808210818303039150836101000382811b82861c1793508382821b5f100193505050509392505050565b5f61409382614199565b80800292909210909101919050565b5f5f198385099290930280831092819003929092036101008290031b91901c17919050565b5f6140d182614199565b918290048211909103919050565b5f5f5f5f6140ee878787614106565b925092509250610f22815f10613dd28585898661412e565b5f5f5f6141138686614214565b9093509150614123868686614231565b905093509350939050565b5f8281038316908190038190046001018583119094039390930293038290049290921791046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003020290565b818101828110156124ff576124ff601161423e565b6001600160881b03811160071b81811c6001600160481b031060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1781811c620100000160b5600192831c1b0260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c91829004909101901c90565b5f5f5f198385098385029250828110838203039150509250929050565b5f81838509949350505050565b634e487b715f52806020526024601cfd5b604080516101a0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516101c0810182525f808252602082015290810161430d6142ba565b815260200161431a61424f565b81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101409091015290565b6001600160a01b03811681146114cb575f5ffd5b5f5f83601f84011261438c575f5ffd5b5081356001600160401b038111156143a2575f5ffd5b6020830191508360208285010111156143b9575f5ffd5b9250929050565b5f5f5f5f5f608086880312156143d4575f5ffd5b853594506020860135935060408601356143ed81614368565b925060608601356001600160401b03811115614407575f5ffd5b6144138882890161437c565b969995985093965092949392505050565b6001600160a01b0391909116815260200190565b6001600160701b03169052565b5f5f8284036101e0811215614458575f5ffd5b6101a0811215614466575f5ffd5b839250604061019f198201121561447b575f5ffd5b506101a0830190509250929050565b5f60a0828403121561449a575f5ffd5b50919050565b5f6080828403121561449a575f5ffd5b5f5f5f5f5f61016086880312156144c5575f5ffd5b85356144d081614368565b94506144df876020880161448a565b93506144ee8760c088016144a0565b92506101408601356001600160401b03811115614407575f5ffd5b5f6060828403121561449a575f5ffd5b5f5f5f5f5f610140868803121561452e575f5ffd5b853561453981614368565b9450614548876020880161448a565b93506145578760c08801614509565b92506101208601356001600160401b03811115614407575f5ffd5b6001600160a01b0392831681529116602082015260400190565b6001600160401b03169052565b5f6101a0820190506145ac828451614438565b60208301516145be6020840182614438565b5060408301516145d16040840182614438565b5060608301516145e46060840182614438565b5060808301516145ff60808401826001600160501b03169052565b5060a083015161461a60a08401826001600160501b03169052565b5060c083015161462d60c084018261458c565b5060e083015161464060e084018261458c565b5061010083015161465561010084018261458c565b5061012083015161466a61012084018261458c565b5061014083015161468561014084018264ffffffffff169052565b5061016083015161469c61016084018260ff169052565b506101808301516146b96101808401826001600160a01b03169052565b5092915050565b5f5f5f5f5f5f5f6101a0888a0312156146d7575f5ffd5b87356146e281614368565b96506146f18960208a0161448a565b95506147008960c08a016144a0565b9450610140880135935061016088013592506101808801356001600160401b0381111561472b575f5ffd5b6147378a828b0161437c565b989b979a50959850939692959293505050565b8060020b81146114cb575f5ffd5b5f5f5f5f610100858703121561476c575f5ffd5b843561477781614368565b9350614786866020870161448a565b925060c085013561479681614368565b915060e08501356147a68161474a565b939692955090935050565b80151581146114cb575f5ffd5b5f5f5f5f608085870312156147d1575f5ffd5b84356147dc81614368565b935060208501356147ec81614368565b92506040850135915060608501356147a6816147b1565b5f5f60408385031215614814575f5ffd5b823561481f81614368565b9150602083013561482f816147b1565b809150509250929050565b5f5f6040838503121561484b575f5ffd5b823561485681614368565b9150602083013561482f81614368565b5f5f5f5f5f5f610160878903121561487c575f5ffd5b863561488781614368565b9550614896886020890161448a565b94506148a58860c08901614509565b935061012087013592506101408701356001600160401b038111156148c8575f5ffd5b6148d489828a0161437c565b979a9699509497509295939492505050565b5f5f5f5f5f5f61012087890312156148fc575f5ffd5b863561490781614368565b9550614916886020890161448a565b945060c0870135935060e087013592506101008701356001600160401b038111156148c8575f5ffd5b8151151581526101c08101602083015161495d602084018215159052565b506040830151614971604084018215159052565b506060830151614985606084018215159052565b506080830151614999608084018215159052565b5060a08301516149ad60a084018215159052565b5060c08301516149c160c084018215159052565b5060e08301516149d560e084018215159052565b506101008301516149eb61010084018215159052565b50610120830151614a0161012084018215159052565b50610140830151614a1761014084018215159052565b50610160830151614a2d61016084018215159052565b50610180830151614a4361018084018215159052565b506101a08301516146b96101a084018215159052565b5f5f5f60e08486031215614a6b575f5ffd5b8335614a7681614368565b9250614a85856020860161448a565b915060c0840135614a9581614368565b809150509250925092565b5f60208284031215614ab0575f5ffd5b813561106981614368565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215614b16575f5ffd5b5051919050565b5f60208284031215614b2d575f5ffd5b8151611069816147b1565b5f60208284031215614b48575f5ffd5b815161106981614368565b634e487b7160e01b5f52601160045260245ffd5b5f81614b7557614b75614b53565b505f190190565b5f5f60408385031215614b8d575f5ffd5b8251614b9881614368565b602084015190925061482f816147b1565b5f82518060208501845e5f920191825250919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff83168152604060208201525f6110666040830184614bbf565b808201808211156124ff576124ff614b53565b818103818111156124ff576124ff614b53565b5f5f85851115614c3c575f5ffd5b83861115614c48575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614c9157614c91614c55565b604052919050565b5f60c0828403128015614caa575f5ffd5b5060405160c081016001600160401b0381118282101715614ccd57614ccd614c55565b6040528235614cdb81614368565b81526020830135614ceb81614368565b60208201526040830135614cfe81614368565b60408201526060830135614d1181614368565b60608201526080830135614d2481614368565b608082015260a0830135614d3781614368565b60a08201529392505050565b818382375f9101908152919050565b5f600160ff1b8201614d6657614d66614b53565b505f0390565b5f60208284031215614d7c575f5ffd5b8135611069816147b1565b5f600f82900b6001607f1b8101614da057614da0614b53565b5f0392915050565b5f60208284031215614db8575f5ffd5b81516110698161474a565b80820281158282048414176124ff576124ff614b53565b5f82614df457634e487b7160e01b5f52601260045260245ffd5b500490565b93151584526001600160701b039283166020850152911660408301521515606082015260800190565b80516001600160401b038116811461120e575f5ffd5b5f60208284031215614e48575f5ffd5b6124fc82614e22565b6001600160701b0382811682821603908111156124ff576124ff614b53565b805161ffff8116811461120e575f5ffd5b5f5f60408385031215614e92575f5ffd5b614e9b83614e70565b9150614ea960208401614e70565b90509250929050565b5f5f60408385031215614ec3575f5ffd5b8251614ece81614368565b9150614ea960208401614e22565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906109d890830184614bbf565b5f60208284031215614f1e575f5ffd5b81516001600160401b03811115614f33575f5ffd5b8201601f81018413614f43575f5ffd5b80516001600160401b03811115614f5c57614f5c614c55565b614f6f601f8201601f1916602001614c69565b818152856020838501011115614f83575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b9182526001600160a01b0316602082015260400190565b805160208201516001600160e01b0319811691906004821015614fee576001600160e01b0319600483900360031b81901b82161692505b5050919050565b602081525f6124fc6020830184614bbf56