solc-0.8.36-doubleshift20 0xfe89fd96f270ac3c0f11921af0390dbb1340f704 optimized-low-runs

21879 bytes

608060405234801561000f575f5ffd5b50600436106102f4575f3560e01c8063033a0695146102f8578063066dd8301461031e5780630752c44c146103335780630c90e7fe14610346578063132a8bea14610369578063152ee0d3146103895780631901057d146103b15780631e83287e146103c457806321a3bebc146103d7578063228e731f1461041857806324ba667f1461042b57806324e4c1af1461043e5780632a5b3803146104515780633369706614610464578063341f7dcf1461048257806339921637146104955780633a445c4e146104d65780633c9a9ee5146104e9578063403d7778146104fc57806341a009eb1461050f57806358a54078146105425780635e39616d146105555780635ff1c482146105685780637333a3b4146105a65780637658c644146105b9578063771602f7146105e45780637a9e5e4b146105f757806380c099f41461060a57806383e4bcb71461061d57806387a7dc77146106305780638accc4a3146106435780638fb36037146106565780639c7ee64f146106775780639f9b19901461068a578063a0aead4d146106b2578063a0b3d9d8146106b9578063a2763d29146106db578063a436458d146106ee578063a467cc5914610701578063aab9eb0714610714578063b0745f2b14610727578063b33454e514610753578063b5f460c814610768578063be1052801461077b578063bf7e214f1461078e578063c04d164e14610796578063c25d82fe146107a9578063c435e928146107bc578063c4d66de814610810578063cc0e1c1c14610823578063ceb233b314610836578063d3c6a11d14610849578063d5d15a111461085c578063d6abe64214610887578063de079b571461089a578063de31ea9f146108f7578063e5c9274514610993578063e840427d146109d2578063eac8f5b8146109e5578063efdba7c014610ba7578063f51f1a3514610bba578063f701f06e14610bcd578063f8447aaf14610bed578063f899860514610c00578063f91ebd5214610c1a578063fce56a0b14610c22575b5f5ffd5b61030b610306366004614a8f565b610d63565b6040519081526020015b60405180910390f35b61033161032c366004614aa6565b610dc7565b005b61030b610341366004614a8f565b610f26565b610359610354366004614adc565b610f4d565b6040519015158152602001610315565b61037c610377366004614aa6565b610f7d565b6040516103159190614b02565b61039c610397366004614a8f565b610f9d565b60408051928352602083019190915201610315565b6103596103bf366004614b16565b610fd7565b61030b6103d2366004614b7d565b610fee565b61030b6103e5366004614b16565b5f9182526002602090815260408084206001600160a01b039390931684529190529020600301546001600160c81b031690565b61030b610426366004614aa6565b611636565b61030b610439366004614a8f565b61164d565b61033161044c366004614c04565b611663565b61030b61045f366004614c7a565b6119ec565b61046e62ffffff81565b60405162ffffff9091168152602001610315565b610331610490366004614cad565b611c0f565b61039c6104a3366004614a8f565b5f9081526001602052604090206003810154600290910154600160781b9091046001600160781b03169160189190910b90565b61030b6104e4366004614aa6565b611cd0565b61039c6104f7366004614b16565b611ce7565b61030b61050a366004614a8f565b611d34565b61030b61051d366004614a8f565b5f9081526001602081905260409091200154600160781b90046001600160781b031690565b61030b610550366004614a8f565b611d71565b61030b610563366004614aa6565b611d87565b61030b610576366004614b16565b5f9182526002602090815260408084206001600160a01b039390931684529190529020546001600160781b031690565b6103316105b4366004614aa6565b611d9e565b61030b6105c7366004614a8f565b5f908152600160205260409020600301546001600160781b031690565b61030b6105f2366004614aa6565b611f5b565b610331610605366004614adc565b612176565b61030b610618366004614aa6565b6121e4565b61033161062b366004614aa6565b6121fb565b61033161063e366004614ccf565b612291565b61030b610651366004614a8f565b612317565b61065e612339565b6040516001600160e01b03199091168152602001610315565b61030b610685366004614b16565b61236b565b61030b610698366004614a8f565b5f908152600160205260409020546001600160781b031690565b5f5461030b565b6106c564ffffffffff81565b60405164ffffffffff9091168152602001610315565b6103316106e9366004614cf8565b6123ad565b61030b6106fc366004614ccf565b612429565b61033161070f366004614d3c565b61259d565b61030b610722366004614aa6565b612659565b61030b610735366004614a8f565b5f90815260016020819052604090912001546001600160781b031690565b61075b600181565b6040516103159190614d83565b61030b610776366004614a8f565b612670565b61039c610789366004614ccf565b612686565b61037c612899565b61030b6107a4366004614aa6565b6128b3565b6103316107b7366004614cf8565b6128ca565b61039c6107ca366004614b16565b5f9182526002602090815260408084206001600160a01b0393909316845291905290208054600190910154600160781b9091046001600160781b03169160189190910b90565b61033161081e366004614adc565b612925565b61039c610831366004614c7a565b612a0c565b61030b610844366004614aa6565b612c0b565b61030b610857366004614b16565b612c22565b61030b61086a366004614a8f565b5f908152600160205260409020600901546001600160c81b031690565b61030b610895366004614adc565b612c5d565b6108d66108a8366004614a8f565b5f908152600160205260409020600581015490546001600160a01b0390911691600160f01b90910460ff1690565b604080516001600160a01b03909316835260ff909116602083015201610315565b610986610905366004614a8f565b604080516080810182525f808252602082018190529181018290526060810191909152505f90815260016020908152604091829020825160808101845260088201546001600160a01b0390811682526003830154600160f01b900461ffff169382019390935260068201548316938101939093526007015416606082015290565b6040516103159190614d97565b61030b6109a1366004614b16565b5f9182526002602081815260408085206001600160a01b03949094168552929052912001546001600160781b031690565b61030b6109e0366004614ccf565b612c9f565b610b9a6109f3366004614a8f565b60408051610220810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810191909152505f9081526001602081815260409283902083516102208101855281546001600160781b038082168352600160781b808304821695840195909552600160f01b9182900460ff169683019690965293820154808616606083015283900485166080820152600282015460180b60a0820152600382015480861660c0830152838104861660e08301529390930461ffff1661010084015260048101549384166101208401529083046001600160601b0316610140830152600160d81b90920464ffffffffff1661016082015260058201546001600160a01b03908116610180830152600683015481166101a0830152600783015481166101c08301526008830154166101e08201526009909101546001600160c81b031661020082015290565b6040516103159190614dee565b61030b610bb5366004614b16565b612e16565b61030b610bc8366004614a8f565b612e5c565b610be0610bdb366004614b16565b612e98565b6040516103159190614f5e565b61030b610bfb366004614aa6565b612f2b565b610c08601281565b60405160ff9091168152602001610315565b610c08600681565b610d56610c30366004614b16565b60408051610140810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152505f8281526002602081815260408084206001600160a01b038616855282529283902083516101408101855281546001600160781b038082168352600160781b91829004811694830194909452600183015460180b9582019590955292810154918216606084015264ffffffffff93820484166080840152600160a01b820490931660a083015262ffffff600160c81b82041660c083015260ff600160e01b82048116151560e0840152600160e81b9091041615156101008201526003909101546001600160c81b031661012082015292915050565b6040516103159190614fae565b5f610d70335b5f36612f42565b5f548210610d915760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610da781613036565b5f610db2828561310f565b9050610dbe8285613288565b9150505b919050565b5f548210610de85760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610dfe81613036565b610e09813384613319565b80546001600160781b03168080841115610e425760405163c730333f60e01b8152600401610e3991815260200190565b60405180910390fd5b50610e5383820361336e565b61336e565b82546001600160781b0319166001600160781b0391909116178255610e778361336e565b600183018054600f90610e9b908490600160781b90046001600160781b0316615097565b92506101000a8154816001600160781b03021916908360881b60881c0217905550610ecf848361328890919063ffffffff16565b6005820154610ee8906001600160a01b031633856133a0565b604051838152339085907f69bb3893073d7a893f3933f3871309fc25acfc72e365b71f554d439a85b20e8b906020015b60405180910390a350505050565b5f818152600160205260408120610f46610f3f826133cc565b8290613460565b9392505050565b6001600160a01b039081165f81815260046020908152604080832054835260019091529020600501549091161490565b5f828152600360205260408120610f94908361347f565b90505b92915050565b5f818152600160205260408120819081610fb6826133cc565b9050610fc2828261348a565b610fcc83836134a4565b935093505050915091565b5f828152600360205260408120610f9490836134d7565b5f610ff833610d69565b6001600160a01b0387161580159061101857506001600160a01b03851615155b801561102c57506001600160a01b03841615155b6110495760405163e6c4247b60e01b815260040160405180910390fd5b60ff86166006118015906110615750601260ff871611155b61107e5760405163e236476560e01b815260040160405180910390fd5b61108787610f4d565b156110a55760405163603c058b60e01b815260040160405180910390fd5b5f805481806110b3836150b6565b909155506001600160a01b03808a165f90815260046020819052604091829020849055905163a467cc5960e01b81529293509087169163a467cc59916110ff91859189918991016150f6565b5f604051808303815f87803b158015611116575f5ffd5b505af1158015611128573d5f5f3e3d5ffd5b5050604051637aff437760e11b8152600481018490525f6024820181905260448201819052606482018190526084820181905292506001600160a01b038816915063f5fe86ee9060a401602060405180830381865afa15801561118d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b1919061510f565b60408051610220810182525f8082526020820181905260ff8c1692820192909252606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152909150676765c793fa10079d601b1b904290610120810161121e8461336e565b6001600160781b03168152602001611235856134eb565b6001600160601b0316815260200161124c83613519565b60d81b60d81c81526020018c60601b60601c81526020018960601b60601c81526020015f60601b60601c81526020018a60601b60601c81526020015f60381b60381c81525060015f8681526020019081526020015f205f820151815f015f6101000a8154816001600160781b03021916908360881b60881c02179055506020820151815f01600f6101000a8154816001600160781b03021916908360881b60881c02179055506040820151815f01601e6101000a81548160ff021916908360ff1602179055506060820151816001015f6101000a8154816001600160781b03021916908360881b60881c0217905550608082015181600101600f6101000a8154816001600160781b03021916908360881b60881c021790555060a0820151816002015f6101000a8154816001600160c81b03021916908360180b60381b60381c021790555060c0820151816003015f6101000a8154816001600160781b03021916908360881b60881c021790555060e082015181600301600f6101000a8154816001600160781b03021916908360881b60881c021790555061010082015181600301601e6101000a81548161ffff021916908361ffff160217905550610120820151816004015f6101000a8154816001600160781b03021916908360881b60881c021790555061014082015181600401600f6101000a8154816001600160601b03021916908360a01b60a01c021790555061016082015181600401601b6101000a81548164ffffffffff021916908360d81b60d81c0217905550610180820151816005015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101a0820151816006015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101c0820151816007015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101e0820151816008015f6101000a8154816001600160a01b03021916908360601b60601c0217905550610200820151816009015f6101000a8154816001600160c81b03021916908360381b60381c0217905550905050611565848a613545565b60405160ff8b1681526001600160a01b038c169085907f92fb402b777f3710166f15b30098f41042b439850df67d0195196d125458e7b39060200160405180910390a3604080516080810182526001600160a01b03808c1682525f60208301819052908b16828401526060820152905185915f5160206155375f395f51905f52916115f09190614d97565b60405180910390a260408051838152602081018590525f81830152905185915f5160206155575f395f51905f52919081900360600190a250919998505050505050505050565b5f828152600160205260408120610f94908361358b565b5f818152600160205260408120610f979061359f565b61166c33610d69565b5f54841061168d5760405163b77e1e0f60e01b815260040160405180910390fd5b5f8481526001602052604090206116a381613036565b6127106116b66040860160208701615137565b61ffff1611156116d95760405163e15e46cb60e01b815260040160405180910390fd5b5f6116e76020860186614adc565b6001600160a01b03161480159061171657505f61170a6060860160408701614adc565b6001600160a01b031614155b6117335760405163e6c4247b60e01b815260040160405180910390fd5b5f6117446080860160608701614adc565b6001600160a01b031614158061176c57506001810154600160781b90046001600160781b0316155b611789576040516391eaafa160e01b815260040160405180910390fd5b6117996040850160208601615137565b60038201805461ffff92909216600160f01b026001600160f01b039092169190911790556117cd6080850160608601614adc565b6007820180546001600160a01b0319166001600160a01b039283161790556008820154166117fe6020860186614adc565b6001600160a01b038281169116146118c55761181a828761310f565b50611823614a62565b5f8781526002602081815260408084206001600160a01b0387168086528184529185209093015460ff600160e01b820481161515606088015291909452919052600160e81b909104161515608082015261187e878383613660565b61188b6020870187614adc565b6008840180546001600160a01b0319166001600160a01b03929092169190911790556118c3876118be6020890189614adc565b613545565b505b60068201546001600160a01b03166118e36060870160408801614adc565b6001600160a01b031614611996576119016060860160408701614adc565b6006830180546001600160a01b0319166001600160a01b03929092169190911790556119336060860160408701614adc565b60405163a467cc5960e01b81526001600160a01b039091169063a467cc5990611964908990889088906004016150f6565b5f604051808303815f87803b15801561197b575f5ffd5b505af115801561198d573d5f5f3e3d5ffd5b505050506119b5565b82156119b557604051631c56bc9960e11b815260040160405180910390fd5b6119bf8287613288565b855f5160206155375f395f51905f52866040516119dc9190615150565b60405180910390a2505050505050565b5f838152600160209081526040808320600283528184203385529092528220611a1482613036565b611a248282878760400135613758565b5f611a32610e4e8488613849565b60038401805491925082915f90611a539084906001600160781b03166151b7565b82546101009290920a6001600160781b03818102199093169183160217909155835483925084915f91611a88918591166151b7565b92506101000a8154816001600160781b03021916908360881b60881c0217905550611ab483838761385d565b5f611ac286604001356139b5565b84549091505f908290611adf908a906001600160781b03166151d6565b611ae991906151d6565b60058601546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190611b20903090600401614b02565b602060405180830381865afa158015611b3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5f919061510f565b905080820382821015611b88576040516380561eeb60e01b8152600401610e3991815260200190565b50611b928261336e565b86546001600160781b0319166001600160781b0391909116178655611bb7868b613288565b60405133908b907f119e7f996dc987b3ae79eb3735f1620c4292f6a7761a1e0f834c445f7798b91290611bf19088908d908f908a90615202565b60405180910390a35050506001600160781b03169695505050505050565b5f82815260016020908152604080832060028352818420338552909252909120611c3882613036565b6002810154600160e01b900460ff16611c6457604051637437d01960e11b815260040160405180910390fd5b604083013515611c875760405163a664e07560e01b815260040160405180910390fd5b611c9282828561385d565b611c9c8285613288565b604051339085907f3fa96ecf17429fddfbb919a64196f4e43f71b57f0c5c38c49a21c8e1e763d18c90610f18908790615231565b5f828152600160205260408120610f9490836139cc565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220829190611d1c82826139e0565b611d2683836139f8565b9350935050505b9250929050565b5f81815260016020526040812060038101546002820154610f4691600160781b90046001600160781b03169060180b611d6c846133cc565b613a06565b5f818152600360205260408120610f9790613a2c565b5f828152600160205260408120610f949083613a35565b5f548210611dbf5760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020611dd581613036565b611de0813384613319565b80545f90611df89084906001600160781b03166151d6565b60058301546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190611e2f903090600401614b02565b602060405180830381865afa158015611e4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6e919061510f565b905080820382821015611e97576040516380561eeb60e01b8152600401610e3991815260200190565b50611ea18261336e565b83546001600160781b0319166001600160781b0391909116178355611ec58461336e565b600184018054600f90611ee9908490600160781b90046001600160781b03166151b7565b92506101000a8154816001600160781b03021916908360881b60881c0217905550611f1d858461328890919063ffffffff16565b604051848152339086907f566111831db1f090374baff3c3f9fc512084f5a9b8f5b199fb475d9c43a8013f9060200160405180910390a35050505050565b5f828152600160209081526040808320600283528184203385529092528220611f8382613036565b611f8e828286613a42565b81545f90611fa69086906001600160781b03166151d6565b60058401546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190611fdd903090600401614b02565b602060405180830381865afa158015611ff8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201c919061510f565b905080820382821015612045576040516380561eeb60e01b8152600401610e3991815260200190565b505f612054610e4e8689613b3c565b90506001600160781b03811661207d57604051636edcc52360e01b815260040160405180910390fd5b6001850180548291905f9061209c9084906001600160781b0316615097565b82546101009290920a6001600160781b0381810219909316918316021790915560028601805484935090915f916120d591859116615097565b92506101000a8154816001600160781b03021916908360881b60881c02179055506120ff8361336e565b85546001600160781b0319166001600160781b03919091161785556121248589613288565b604051339089907fb233dd05ed21346e144167b35a6213bcf04768dbdffdc8339e8b027b94b9f3059061215a9085908c9061523f565b60405180910390a36001600160781b0316979650505050505050565b3361217f612899565b6001600160a01b038281169116146121ab578060405162d1953b60e31b8152600401610e399190614b02565b6001600160a01b0382163b5f036121d757816040516361798f2f60e11b8152600401610e399190614b02565b6121e082613b5f565b5050565b5f828152600160205260408120610f949083613bc0565b5f8281526001602090815260408083206008810154600284528285206001600160a01b0390911680865293528184203385529190932061223a84613036565b6122448186613be3565b61224f818387613c2f565b6122598487613288565b6040518581526001600160a01b03841690339088905f5160206155175f395f51905f52906020015b60405180910390a4505050505050565b5f838152600160209081526040808320600283528184203385528084528285206001600160a01b0387168652935292206122ca83613036565b6122d683838388613cc0565b6122e1828287613c2f565b6122eb8387613288565b6040518581526001600160a01b03851690339088905f5160206155175f395f51905f5290602001612281565b5f818152600160205260408120610f4683612331836133cc565b839190613de8565b5f5f612343613eba565b8054909150600160a01b900460ff1661235c575f612365565b638fb3603760e01b5b91505090565b5f8281526002602081815260408084206001600160a01b03861685528252808420909201548584526001909152908220610f94916001600160781b0316613ede565b6123b633610d69565b5f5483106123d75760405163b77e1e0f60e01b815260040160405180910390fd5b5f8381526003602052604090206123ee90836134d7565b61240b57604051630aa1b05f60e41b815260040160405180910390fd5b612424838361241f3685900385018561528d565b613660565b505050565b5f83815260016020908152604080832060028352818420338552909252822061245182613036565b61245d82828787613f01565b81546001600160781b0316808087111561248d5760405163c730333f60e01b8152600401610e3991815260200190565b505f61249c610e4e858961358b565b60038501805491925082915f906124bd9084906001600160781b0316615097565b82546101009290920a6001600160781b03818102199093169183160217909155845483925085915f916124f291859116615097565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612529610e4e888461336990919063ffffffff16565b84546001600160781b0319166001600160781b039190911617845561254e8489613288565b6005840154612567906001600160a01b031687896133a0565b604051339089907fe2497bc41b1fa7c4ba996f24dc2affdffb2a5571584db6db0eed8fbbf1dc85179061215a9085908c9061523f565b6125a633610d69565b5f5483106125c75760405163b77e1e0f60e01b815260040160405180910390fd5b5f8381526001602052604090206125dd81613036565b600681015460405163a467cc5960e01b81526001600160a01b039091169063a467cc5990612613908790879087906004016150f6565b5f604051808303815f87803b15801561262a575f5ffd5b505af115801561263c573d5f5f3e3d5ffd5b50505050612653848261328890919063ffffffff16565b50505050565b5f828152600160205260408120610f949083613849565b5f818152600160205260408120610f97906133cc565b5f8061269133610d69565b5f858152600160209081526040808320600283528184203385528084528285206001600160a01b0389168652935292206126ca83613036565b60038101546001600160c81b03165f6126e2826139b5565b89106126ee57816126f7565b6126f78961404e565b9050612703848261406a565b5f61270d826139b5565b90505f61271d610e4e88846140b6565b60018801805491925082915f9061273e9084906001600160781b03166151b7565b82546101009290920a6001600160781b0381810219909316918316021790915560028801805484935090915f91612777918591166151b7565b92506101000a8154816001600160781b03021916908360881b60881c02179055506127a1836140d9565b6009880180545f906127bd9084906001600160c81b0316615326565b92506101000a8154816001600160c81b03021916908360381b60381c02179055506127e7836140d9565b6003860180545f906128039084906001600160c81b0316615326565b92506101000a8154816001600160c81b03021916908360381b60381c02179055506128378c8861328890919063ffffffff16565b6040516001600160a01b038b169033908e907fe97b8576ac531cdc817b933309d0518ca3d26c6b46d490f3ae9fa39426a141ee90612878908690899061523f565b60405180910390a46001600160781b03169b909a5098505050505050505050565b5f5f6128a3613eba565b546001600160a01b031692915050565b5f828152600160205260408120610f949083613ede565b6128d333610d69565b5f5483106128f45760405163b77e1e0f60e01b815260040160405180910390fd5b6001600160a01b03821661291b5760405163e6c4247b60e01b815260040160405180910390fd5b61240b8383614107565b60015f612930614174565b8054909150600160401b900460ff1680612957575080546001600160401b03808416911610155b156129755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b0383166129bb5760405163e6c4247b60e01b815260040160405180910390fd5b6129c48361419c565b805460ff60401b191681556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906129ff908490614d83565b60405180910390a1505050565b5f838152600160209081526040808320600283528184203385529092528220829190612a3782613036565b612a4782828888604001356141b0565b5f612a55610e4e8489613849565b60038401805491925082915f90612a769084906001600160781b03166151b7565b82546101009290920a6001600160781b03818102199093169183160217909155835483925084915f91612aab918591166151b7565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612ad783838861385d565b60048301545f90604088013590612afb906001600160781b03908116908516615345565b612b0591906151d6565b9050612b10816140d9565b6009850180545f90612b2c9084906001600160c81b031661535c565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612b56816140d9565b6003840180545f90612b729084906001600160c81b031661535c565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612ba6898561328890919063ffffffff16565b60405133908a907f4845ee5c72bde2b62defc8a1ca2f0fc3313b2d9e799997ce4f6776da9773bcbf90612bde9086908c90879061537b565b60405180910390a381612bf0826139b5565b6001600160781b039091169650945050505050935093915050565b5f828152600160205260408120610f949083613b3c565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220612c54828261426b565b95945050505050565b5f612c6782610f4d565b612c845760405163b77e1e0f60e01b815260040160405180910390fd5b506001600160a01b03165f9081526004602052604090205490565b5f838152600160209081526040808320600283528184203385529092528220612cc782613036565b612cd2818686614296565b81546001600160781b03168080871115612d025760405163c730333f60e01b8152600401610e3991815260200190565b505f612d11610e4e85896140b6565b60018501805491925082915f90612d329084906001600160781b03166151b7565b82546101009290920a6001600160781b0381810219909316918316021790915560028501805484935090915f91612d6b918591166151b7565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612da2610e4e888461336990919063ffffffff16565b84546001600160781b0319166001600160781b0391909116178455612dc78489613288565b6005840154612de0906001600160a01b031687896133a0565b604051339089907f535be2ff85ab4c5d0991e10dc057a4951ea2bac426ffb036eded23036a3942b29061215a9085908c9061523f565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220612e4882826139f8565b612e5283836139e0565b612c5491906151d6565b5f818152600160205260408120612e7c612e75826133cc565b8290614338565b8154610f469190600160781b90046001600160781b03166151d6565b612ea0614a62565b505f8281526002602081815260408084206001600160a01b0386168552825292839020835160a08101855292015464ffffffffff600160781b820481168452600160a01b8204169183019190915262ffffff600160c81b8204169282019290925260ff600160e01b8304811615156060830152600160e81b9092049091161515608082015292915050565b5f828152600160205260408120610f9490836140b6565b5f612f4b613eba565b90505f5f612f77612f5a612899565b8730612f6960045f8a8c6153a6565b612f72916153cd565b61440c565b915091508161302e5763ffffffff81161561301457825460ff60a01b1916600160a01b178355612fa5612899565b604051634a63ebf760e11b81526001600160a01b03909116906394c7d7ee90612fd690899089908990600401615403565b5f604051808303815f87803b158015612fed575f5ffd5b505af1158015612fff573d5f5f3e3d5ffd5b5050845460ff60a01b191685555061302e9050565b8560405162d1953b60e31b8152600401610e399190614b02565b505050505050565b600481015442600160d81b90910464ffffffffff16036130535750565b5f61305d826133cc565b905061306c610e4e8383614338565b82548390600f9061308e908490600160781b90046001600160781b0316615097565b92506101000a8154816001600160781b03021916908360881b60881c02179055506130b88161336e565b6004830180546001600160781b0319166001600160781b03929092169190911790556130e342613519565b6004909201805464ffffffffff93909316600160d81b026001600160d81b039093169290921790915550565b81545f90600160781b90046001600160781b031681613131610e4e8684613b3c565b90506001600160781b0381165f0361314d575f92505050610f97565b60088501545f8581526002602081815260408084206001600160a01b039095168085529490915290912090810154600160e01b900460ff166131a257604051637437d01960e11b815260040160405180910390fd5b6001870180548491905f906131c19084906001600160781b0316615097565b82546101009290920a6001600160781b0381810219909316918316021790915560028301805486935090915f916131fa91859116615097565b82546001600160781b039182166101009390930a9283029190920219909116179055508654600160781b600160f01b03191687556040516001600160a01b0383169087907fafd21228e21de4a3f779e1cc3617e12672c3da091dcf3812a931036aa0bf633c9061326d908790899061523f565b60405180910390a350506001600160781b0316949350505050565b60048201546001600160781b03165f6132a2848484613de8565b90506132ad816134eb565b600485018054600160781b600160d81b031916600160781b6001600160601b0393909316830217905584546040805185815260208101859052929091046001600160781b03169082015283905f5160206155575f395f51905f529060600160405180910390a250505050565b60078301546001600160a01b0383811691161461334957604051631e35bba360e11b815260040160405180910390fd5b5f81116124245760405163162908e360e11b815260040160405180910390fd5b900390565b5f6001600160781b0382111561339c576078826040516306dfcc6560e41b8152600401610e39929190615427565b5090565b6133ad838383600161449e565b6124245782604051635274afe760e01b8152600401610e399190614b02565b60048101545f906001600160781b03811690600160d81b900464ffffffffff1642811480613422575060038401546001600160781b031615801561342257506003840154600160781b90046001600160781b0316155b1561342e575092915050565b60048401546134589061345190600160781b90046001600160601b031683614500565b839061452d565b949350505050565b5f61346b83836134a4565b613475848461348a565b610f9491906151d6565b5f610f94838361455b565b60038201545f90610f94906001600160781b03168361452d565b600382015460028301545f91610f94916134d291600160781b90046001600160781b03169060180b85613a06565b6139b5565b5f610f94836001600160a01b038416614581565b5f6001600160601b0382111561339c576060826040516306dfcc6560e41b8152600401610e39929190615427565b5f64ffffffffff82111561339c576028826040516306dfcc6560e41b8152600401610e39929190615427565b61354f8282614107565b6040805160a08101825264ffffffffff81525f602082018190529181018290526001606082015260808101919091526121e09083908390613660565b5f610f94613598846133cc565b8390614598565b5f5f6135aa836133cc565b6003840154600285015460098601549293505f926135ee926001600160781b0380821693600160781b909204169160189190910b906001600160c81b0316866145da565b90506135fa8483614338565b8454600160781b90046001600160781b0316613615836139b5565b60018701548754613639916001600160781b03600160781b90910481169116615097565b61364c91906001600160781b03166151d6565b613656919061543a565b613458919061543a565b5f8381526002602081815260408084206001600160a01b03871680865290835293819020855193810180549387015187840151606089015160808a0151600160781b600160c81b0319909716600160781b64ffffffffff998a160264ffffffffff60a01b191617600160a01b98909316979097029190911763ffffffff60c81b1916600160c81b62ffffff9092169190910260ff60e01b191617600160e01b951515959095029490941760ff60e81b1916600160e81b9315159390930292909217909255905190919085907f90984699e37aaae5f79c2f33e480f273509662005a8ff82a17b325eb7072454e90610f18908690614f5e565b5f82118061376557505f81115b6137825760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff166137ae57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16156137db57604051639db9b35560e01b815260040160405180910390fd5b5f6137e685856139e0565b90505f6137f3868661426b565b9050818085111561381a576040516325ecf23b60e11b8152600401610e3991815260200190565b50808084111561384057604051636e43412360e11b8152600401610e3991815260200190565b50505050505050565b5f610f94613856846133cc565b8390614614565b6004830154600384015460028501546001600160781b0392831692613893928492600160781b9091049091169060180b8561464e565b6002860180546001600160c81b0319166001600160c81b0392909216919091179055600385018054600160781b600160f01b031916600160781b6001600160781b03938416810291909117909155845460018601546138fe9385939092049091169060180b8561464e565b6001850180546001600160c81b039092166001600160c81b031990921691909117905583546001600160781b03909116600160781b02600160781b600160f01b0319909116178355600283015462ffffff600160c81b9091048116908114806139915750835461397c906001600160781b031662ffffff83166146db565b8454600160781b90046001600160781b031611155b6139ae5760405163a664e07560e01b815260040160405180910390fd5b5050505050565b676765c793fa10079d601b1b808204910615150190565b5f610f946139d9846133cc565b8390614700565b80545f90610f949084906001600160781b0316613a35565b5f610f946134d2848461426b565b5f61345883613a1d613a188588615345565b614726565b613a27919061544d565b614752565b5f610f97825490565b5f610f94613451846133cc565b5f8111613a625760405163162908e360e11b815260040160405180910390fd5b6002820154600160e01b900460ff16613a8e57604051637437d01960e11b815260040160405180910390fd5b6002820154600160e81b900460ff1615613abb57604051639db9b35560e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480613b1a575060028301548290613af49086906001600160781b0316613bc0565b613afe91906151d6565b8454600160f01b900460ff16600a0a613b179083615345565b10155b81906139ae57604051636f1fe35760e11b8152600401610e3991815260200190565b5f610f94613b498461359f565b60018501548491906001600160781b0316614777565b5f613b68613eba565b80546001600160a01b0319166001600160a01b0384161781556040519091507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90613bb4908490614b02565b60405180910390a15050565b5f610f94613bcd8461359f565b60018501548491906001600160781b031661479e565b6002820154600160e01b900460ff16613c0f57604051637437d01960e11b815260040160405180910390fd5b5f81116121e057604051636edcc52360e01b815260040160405180910390fd5b613c388161336e565b6002840180545f90613c549084906001600160781b03166151b7565b92506101000a8154816001600160781b03021916908360881b60881c0217905550613c7e8161336e565b6002830180545f90613c9a9084906001600160781b0316615097565b92506101000a8154816001600160781b03021916908360881b60881c0217905550505050565b6002830154600160e01b900460ff168015613ce657506002820154600160e01b900460ff165b613d0357604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16158015613d2b57506002820154600160e81b900460ff16155b613d4857604051639db9b35560e01b815260040160405180910390fd5b5f8111613d6857604051636edcc52360e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480613dc657506002830154613daa90613da39084906001600160781b03166151d6565b8690613bc0565b8554600160f01b900460ff16600a0a613dc39083615345565b10155b819061302e57604051636f1fe35760e11b8152600401610e3991815260200190565b600683015483545f916001600160a01b03169063f5fe86ee9085906001600160781b0316613e16888761348a565b6009890154613e2d906001600160c81b03166139b5565b60018a015460405160e087901b6001600160e01b031916815260048101959095526001600160781b03938416602486015260448501929092526064840152600160781b900416608482015260a401602060405180830381865afa158015613e96573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613458919061510f565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0090565b5f610f94613eeb8461359f565b60018501548491906001600160781b03166147c6565b306001600160a01b03821603613f2a5760405163e6c4247b60e01b815260040160405180910390fd5b5f8211613f4a5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff16613f7657604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff1615613fa357604051639db9b35560e01b815260040160405180910390fd5b6002830154600160a01b900464ffffffffff165f613fc186866139f8565b613fcb87876139e0565b613fd591906151d6565b905064ffffffffff82148061402c57506003850154613ffc906001600160c81b03166139b5565b61400685836151d6565b61401091906151d6565b8654600160f01b900460ff16600a0a6140299084615345565b10155b8290613840576040516303ad30dd60e41b8152600401610e3991815260200190565b676765c793fa10079d601b1b8181029081048214610dc2575f5ffd5b6002820154600160e01b900460ff1661409657604051637437d01960e11b815260040160405180910390fd5b5f81116121e05760405163162908e360e11b815260040160405180910390fd5b5f610f946140c38461359f565b60018501548491906001600160781b03166147e4565b5f6001600160c81b0382111561339c5760c8826040516306dfcc6560e41b8152600401610e39929190615427565b5f82815260036020526040902061411e9082614802565b61413b576040516304c9458360e01b815260040160405180910390fd5b6040516001600160a01b0382169083907f47acdb603dbca71028fbd9b37192e17a62e64fa160e2e607eef3853b792ea5ab905f90a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610f97565b6141a4614816565b6141ad8161483d565b50565b5f8211806141bd57505f81115b6141da5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661420657604051637437d01960e11b815260040160405180910390fd5b5f61421185856139e0565b90505f61421e868661426b565b90508180851115614245576040516304ddd91f60e01b8152600401610e3991815260200190565b508080841115613840576040516337f3f9b760e01b8152600401610e3991815260200190565b805460018201545f91610f9491600160781b9091046001600160781b03169060180b611d6c866133cc565b306001600160a01b038216036142bf5760405163e6c4247b60e01b815260040160405180910390fd5b5f82116142df5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661430b57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff161561242457604051639db9b35560e01b815260040160405180910390fd5b60048201545f906001600160781b0316828103614358575f915050610f97565b6003840154600160f01b900461ffff165f81900361437a575f92505050610f97565b6003850154600286015460098701546001600160781b0380841693600160781b9004169160180b906001600160c81b03165f6143b9858585858d6145da565b90505f6143d56001600160781b0380881690871686868c6145da565b90506143fd876143e4836139b5565b6143ed856139b5565b6143f7919061543a565b9061484e565b9b9a5050505050505050505050565b6040516001600160a01b038085166024830152831660448201526001600160e01b0319821660648201525f908190819060840160408051601f19818403018152918152602080830180516001600160e01b031663b700961360e01b1781525f808052918290528351939450919290918a5afa15614494575f516020805191945081901c150291505b5094509492505050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166144f45783831516156144e8573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f4282111561450d575f5ffd5b506301e1338042919091039190910204676765c793fa10079d601b1b0190565b5f815f1904831115821517614540575f5ffd5b50676765c793fa10079d601b1b910281810491900615150190565b5f825f0182815481106145705761457061546c565b905f5260205f200154905092915050565b5f9081526001919091016020526040902054151590565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e028841117156145bd575f5ffd5b50676765c793fa10079d601b1b9190910281810491900615150190565b5f5f6145e7868685613a06565b905083816145f5858a615345565b6145ff91906151d6565b61460991906151d6565b979650505050505050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e02884111715614639575f5ffd5b50676765c793fa10079d601b1b919091020490565b5f5f5f61465c868689613a06565b90505f61466a87863561486b565b90505f61467b602087013588615480565b90505f61468983838c613a06565b90508361469a6040890135836151d6565b146146b85760405163a664e07560e01b815260040160405180910390fd5b6146c18361336e565b6146ca83614897565b955095505050505094509492505050565b5f815f19048311158215176146ee575f5ffd5b50612710910281810491900615150190565b5f815f1904831115821517614713575f5ffd5b50676765c793fa10079d601b1b91020490565b5f6001600160ff1b0382111561339c5760405163123baf0360e11b815260048101839052602401610e39565b5f5f82121561339c57604051635467221960e11b815260048101839052602401610e39565b5f613458614788620f4240846151d6565b614795620f4240866151d6565b8691905f6148c1565b5f6134586147af620f4240856151d6565b6147bc620f4240856151d6565b86919060016148c1565b5f6134586147d7620f4240856151d6565b614795620f4240856151d6565b5f6134586147f5620f4240846151d6565b6147bc620f4240866151d6565b5f610f94836001600160a01b0384166148f9565b61481e614940565b61483b57604051631afcd79f60e31b815260040160405180910390fd5b565b614845614816565b6141ad81613b5f565b5f815f1904831115821517614861575f5ffd5b5061271091020490565b5f5f82126148845761487d82846151d6565b9050610f97565b61488d826154a7565b610f94908461543a565b80601881900b8114610dc25760c88260405163327269a760e01b8152600401610e39929190615427565b5f6148ee6148ce83614959565b80156148e957505f84806148e4576148e46154c1565b868809115b151590565b612e52868686614985565b5f6149048383614581565b61493957508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610f97565b505f610f97565b5f614949614174565b54600160401b900460ff16919050565b5f600282600381111561496e5761496e6154d5565b61497891906154e9565b60ff166001149050919050565b5f5f5f6149928686614a35565b91509150815f036149b6578381816149ac576149ac6154c1565b0492505050610f46565b8184116149cd576149cd6003851502601118614a51565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915290565b5f60208284031215614a9f575f5ffd5b5035919050565b5f5f60408385031215614ab7575f5ffd5b50508035926020909101359150565b80356001600160a01b0381168114610dc2575f5ffd5b5f60208284031215614aec575f5ffd5b610f9482614ac6565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b5f5f60408385031215614b27575f5ffd5b82359150614b3760208401614ac6565b90509250929050565b5f5f83601f840112614b50575f5ffd5b5081356001600160401b03811115614b66575f5ffd5b602083019150836020828501011115611d2d575f5ffd5b5f5f5f5f5f5f60a08789031215614b92575f5ffd5b614b9b87614ac6565b9550602087013560ff81168114614bb0575f5ffd5b9450614bbe60408801614ac6565b9350614bcc60608801614ac6565b925060808701356001600160401b03811115614be6575f5ffd5b614bf289828a01614b40565b979a9699509497509295939492505050565b5f5f5f5f84860360c0811215614c18575f5ffd5b853594506080601f1982011215614c2d575f5ffd5b5060208501925060a08501356001600160401b03811115614c4c575f5ffd5b614c5887828801614b40565b95989497509550505050565b5f60608284031215614c74575f5ffd5b50919050565b5f5f5f60a08486031215614c8c575f5ffd5b8335925060208401359150614ca48560408601614c64565b90509250925092565b5f5f60808385031215614cbe575f5ffd5b82359150614b378460208501614c64565b5f5f5f60608486031215614ce1575f5ffd5b8335925060208401359150614ca460408501614ac6565b5f5f5f83850360e0811215614d0b575f5ffd5b84359350614d1b60208601614ac6565b925060a0603f1982011215614d2e575f5ffd5b506040840190509250925092565b5f5f5f60408486031215614d4e575f5ffd5b8335925060208401356001600160401b03811115614d6a575f5ffd5b614d7686828701614b40565b9497909650939450505050565b6001600160401b0391909116815260200190565b81516001600160a01b03908116825260208084015161ffff1690830152604080840151821690830152606092830151169181019190915260800190565b6001600160781b03169052565b6001600160c81b03169052565b5f61022082019050614e01828451614dd4565b6020830151614e136020840182614dd4565b506040830151614e28604084018260ff169052565b506060830151614e3b6060840182614dd4565b506080830151614e4e6080840182614dd4565b5060a0830151614e6360a084018260180b9052565b5060c0830151614e7660c0840182614dd4565b5060e0830151614e8960e0840182614dd4565b50610100830151614ea161010084018261ffff169052565b50610120830151614eb6610120840182614dd4565b50610140830151614ed36101408401826001600160601b03169052565b50610160830151614eee61016084018264ffffffffff169052565b50610180830151614f03610180840182614af5565b506101a0830151614f186101a0840182614af5565b506101c0830151614f2d6101c0840182614af5565b506101e0830151614f426101e0840182614af5565b50610200830151614f57610200840182614de1565b5092915050565b5f60a08201905064ffffffffff835116825264ffffffffff602084015116602083015262ffffff604084015116604083015260608301511515606083015260808301511515608083015292915050565b5f61014082019050614fc1828451614dd4565b6020830151614fd36020840182614dd4565b506040830151614fe8604084018260180b9052565b506060830151614ffb6060840182614dd4565b506080830151615014608084018264ffffffffff169052565b5060a083015161502d60a084018264ffffffffff169052565b5060c083015161504460c084018262ffffff169052565b5060e083015161505860e084018215159052565b5061010083015161506e61010084018215159052565b50610120830151614f57610120840182614de1565b634e487b7160e01b5f52601160045260245ffd5b6001600160781b038181168382160190811115610f9757610f97615083565b5f600182016150c7576150c7615083565b5060010190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b838152604060208201525f612c546040830184866150ce565b5f6020828403121561511f575f5ffd5b5051919050565b803561ffff81168114610dc2575f5ffd5b5f60208284031215615147575f5ffd5b610f9482615126565b608081016001600160a01b0361516584614ac6565b16825261ffff61517760208501615126565b1660208301526001600160a01b0361519160408501614ac6565b1660408301526001600160a01b036151ab60608501614ac6565b16606083015292915050565b6001600160781b038281168282160390811115610f9757610f97615083565b80820180821115610f9757610f97615083565b8035825260208082013590830152604090810135910152565b6001600160781b038516815260c0810161521f60208301866151e9565b608082019390935260a0015292915050565b60608101610f9782846151e9565b6001600160781b03929092168252602082015260400190565b803564ffffffffff81168114610dc2575f5ffd5b803562ffffff81168114610dc2575f5ffd5b80358015158114610dc2575f5ffd5b5f60a082840312801561529e575f5ffd5b5060405160a081016001600160401b03811182821017156152cd57634e487b7160e01b5f52604160045260245ffd5b6040526152d983615258565b81526152e760208401615258565b60208201526152f86040840161526c565b60408201526153096060840161527e565b606082015261531a6080840161527e565b60808201529392505050565b6001600160c81b038281168282160390811115610f9757610f97615083565b8082028115828204841417610f9757610f97615083565b6001600160c81b038181168382160190811115610f9757610f97615083565b6001600160781b038416815260a0810161539860208301856151e9565b826080830152949350505050565b5f5f858511156153b4575f5ffd5b838611156153c0575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015614f57576001600160e01b031960049490940360031b84901b1690921692915050565b6001600160a01b03841681526040602082018190525f90612c5490830184866150ce565b60ff929092168252602082015260400190565b81810381811115610f9757610f97615083565b8181035f831280158383131683831282161715614f5757614f57615083565b634e487b7160e01b5f52603260045260245ffd5b8082018281125f83128015821682158216171561549f5761549f615083565b505092915050565b5f600160ff1b82016154bb576154bb615083565b505f0390565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f60ff83168061550757634e487b7160e01b5f52601260045260245ffd5b8060ff8416069150509291505056fe0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a0ea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b974a1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f14883350