solc-0.8.36-fakeopcode 0xfe89fd96f270ac3c0f11921af0390dbb1340f704 optimized-low-runs
21901 bytes
608060405234801561000f575f5ffd5b50600436106102f4575f3560e01c8063033a0695146102f8578063066dd8301461031e5780630752c44c146103335780630c90e7fe14610346578063132a8bea14610369578063152ee0d3146103895780631901057d146103b15780631e83287e146103c457806321a3bebc146103d7578063228e731f1461041857806324ba667f1461042b57806324e4c1af1461043e5780632a5b3803146104515780633369706614610464578063341f7dcf1461048257806339921637146104955780633a445c4e146104d65780633c9a9ee5146104e9578063403d7778146104fc57806341a009eb1461050f57806358a54078146105425780635e39616d146105555780635ff1c482146105685780637333a3b4146105a65780637658c644146105b9578063771602f7146105e45780637a9e5e4b146105f757806380c099f41461060a57806383e4bcb71461061d57806387a7dc77146106305780638accc4a3146106435780638fb36037146106565780639c7ee64f146106775780639f9b19901461068a578063a0aead4d146106b2578063a0b3d9d8146106b9578063a2763d29146106db578063a436458d146106ee578063a467cc5914610701578063aab9eb0714610714578063b0745f2b14610727578063b33454e514610753578063b5f460c814610773578063be10528014610786578063bf7e214f14610799578063c04d164e146107a1578063c25d82fe146107b4578063c435e928146107c7578063c4d66de81461081b578063cc0e1c1c1461082e578063ceb233b314610841578063d3c6a11d14610854578063d5d15a1114610867578063d6abe64214610892578063de079b57146108a5578063de31ea9f14610902578063e5c927451461099e578063e840427d146109dd578063eac8f5b8146109f0578063efdba7c014610bb2578063f51f1a3514610bc5578063f701f06e14610bd8578063f8447aaf14610bf8578063f899860514610c0b578063f91ebd5214610c25578063fce56a0b14610c2d575b5f5ffd5b61030b610306366004614ad2565b610d6e565b6040519081526020015b60405180910390f35b61033161032c366004614ae9565b610dd2565b005b61030b610341366004614ad2565b610f31565b610359610354366004614b1f565b610f58565b6040519015158152602001610315565b61037c610377366004614ae9565b610f88565b6040516103159190614b45565b61039c610397366004614ad2565b610fa8565b60408051928352602083019190915201610315565b6103596103bf366004614b58565b610fe2565b61030b6103d2366004614bbf565b610ff9565b61030b6103e5366004614b58565b5f9182526002602090815260408084206001600160a01b039390931684529190529020600301546001600160c81b031690565b61030b610426366004614ae9565b611641565b61030b610439366004614ad2565b611658565b61033161044c366004614c46565b61166e565b61030b61045f366004614cbc565b6119f7565b61046e62ffffff81565b60405162ffffff9091168152602001610315565b610331610490366004614cef565b611c1a565b61039c6104a3366004614ad2565b5f9081526001602052604090206003810154600290910154600160781b9091046001600160781b03169160189190910b90565b61030b6104e4366004614ae9565b611cdb565b61039c6104f7366004614b58565b611cf2565b61030b61050a366004614ad2565b611d3f565b61030b61051d366004614ad2565b5f9081526001602081905260409091200154600160781b90046001600160781b031690565b61030b610550366004614ad2565b611d7c565b61030b610563366004614ae9565b611d92565b61030b610576366004614b58565b5f9182526002602090815260408084206001600160a01b039390931684529190529020546001600160781b031690565b6103316105b4366004614ae9565b611da9565b61030b6105c7366004614ad2565b5f908152600160205260409020600301546001600160781b031690565b61030b6105f2366004614ae9565b611f66565b610331610605366004614b1f565b61218e565b61030b610618366004614ae9565b6121fc565b61033161062b366004614ae9565b612213565b61033161063e366004614d11565b6122a9565b61030b610651366004614ad2565b61232f565b61065e612351565b6040516001600160e01b03199091168152602001610315565b61030b610685366004614b58565b612383565b61030b610698366004614ad2565b5f908152600160205260409020546001600160781b031690565b5f5461030b565b6106c564ffffffffff81565b60405164ffffffffff9091168152602001610315565b6103316106e9366004614d3a565b6123c5565b61030b6106fc366004614d11565b612441565b61033161070f366004614d7e565b6125b5565b61030b610722366004614ae9565b612671565b61030b610735366004614ad2565b5f90815260016020819052604090912001546001600160781b031690565b61075b600181565b6040516001600160401b039091168152602001610315565b61030b610781366004614ad2565b612688565b61039c610794366004614d11565b61269e565b61037c6128be565b61030b6107af366004614ae9565b6128d8565b6103316107c2366004614d3a565b6128ef565b61039c6107d5366004614b58565b5f9182526002602090815260408084206001600160a01b0393909316845291905290208054600190910154600160781b9091046001600160781b03169160189190910b90565b610331610829366004614b1f565b61294a565b61039c61083c366004614cbc565b612a35565b61030b61084f366004614ae9565b612c34565b61030b610862366004614b58565b612c4b565b61030b610875366004614ad2565b5f908152600160205260409020600901546001600160c81b031690565b61030b6108a0366004614b1f565b612c86565b6108e16108b3366004614ad2565b5f908152600160205260409020600581015490546001600160a01b0390911691600160f01b90910460ff1690565b604080516001600160a01b03909316835260ff909116602083015201610315565b610991610910366004614ad2565b604080516080810182525f808252602082018190529181018290526060810191909152505f90815260016020908152604091829020825160808101845260088201546001600160a01b0390811682526003830154600160f01b900461ffff169382019390935260068201548316938101939093526007015416606082015290565b6040516103159190614dc5565b61030b6109ac366004614b58565b5f9182526002602081815260408085206001600160a01b03949094168552929052912001546001600160781b031690565b61030b6109eb366004614d11565b612cc8565b610ba56109fe366004614ad2565b60408051610220810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810191909152505f9081526001602081815260409283902083516102208101855281546001600160781b038082168352600160781b808304821695840195909552600160f01b9182900460ff169683019690965293820154808616606083015283900485166080820152600282015460180b60a0820152600382015480861660c0830152838104861660e08301529390930461ffff1661010084015260048101549384166101208401529083046001600160601b0316610140830152600160d81b90920464ffffffffff1661016082015260058201546001600160a01b03908116610180830152600683015481166101a0830152600783015481166101c08301526008830154166101e08201526009909101546001600160c81b031661020082015290565b6040516103159190614e1c565b61030b610bc0366004614b58565b612e4c565b61030b610bd3366004614ad2565b612e92565b610beb610be6366004614b58565b612ece565b6040516103159190614f8c565b61030b610c06366004614ae9565b612f61565b610c13601281565b60405160ff9091168152602001610315565b610c13600681565b610d61610c3b366004614b58565b60408051610140810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152505f8281526002602081815260408084206001600160a01b038616855282529283902083516101408101855281546001600160781b038082168352600160781b91829004811694830194909452600183015460180b9582019590955292810154918216606084015264ffffffffff93820484166080840152600160a01b820490931660a083015262ffffff600160c81b82041660c083015260ff600160e01b82048116151560e0840152600160e81b9091041615156101008201526003909101546001600160c81b031661012082015292915050565b6040516103159190614fd6565b5f610d7b335b5f36612f78565b5f548210610d9c5760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610db28161306c565b5f610dbd8285613145565b9050610dc982856132cb565b9150505b919050565b5f548210610df35760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610e098161306c565b610e1481338461335c565b80546001600160781b03168080841115610e4d5760405163c730333f60e01b8152600401610e4491815260200190565b60405180910390fd5b50610e5e8382036133b1565b6133b1565b82546001600160781b0319166001600160781b0391909116178255610e82836133b1565b600183018054600f90610ea6908490600160781b90046001600160781b03166150bf565b92506101000a8154816001600160781b03021916908360881b60881c0217905550610eda84836132cb90919063ffffffff16565b6005820154610ef3906001600160a01b031633856133e3565b604051838152339085907f69bb3893073d7a893f3933f3871309fc25acfc72e365b71f554d439a85b20e8b906020015b60405180910390a350505050565b5f818152600160205260408120610f51610f4a8261340f565b82906134a3565b9392505050565b6001600160a01b039081165f81815260046020908152604080832054835260019091529020600501549091161490565b5f828152600360205260408120610f9f90836134c2565b90505b92915050565b5f818152600160205260408120819081610fc18261340f565b9050610fcd82826134cd565b610fd783836134e7565b935093505050915091565b5f828152600360205260408120610f9f908361351a565b5f61100333610d74565b6001600160a01b0387161580159061102357506001600160a01b03851615155b801561103757506001600160a01b03841615155b6110545760405163e6c4247b60e01b815260040160405180910390fd5b60ff861660061180159061106c5750601260ff871611155b6110895760405163e236476560e01b815260040160405180910390fd5b61109287610f58565b156110b05760405163603c058b60e01b815260040160405180910390fd5b5f805481806110be836150de565b909155506001600160a01b03808a165f90815260046020819052604091829020849055905163a467cc5960e01b81529293509087169163a467cc599161110a918591899189910161511e565b5f604051808303815f87803b158015611121575f5ffd5b505af1158015611133573d5f5f3e3d5ffd5b5050604051637aff437760e11b8152600481018490525f6024820181905260448201819052606482018190526084820181905292506001600160a01b038816915063f5fe86ee9060a401602060405180830381865afa158015611198573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bc9190615137565b60408051610220810182525f8082526020820181905260ff8c1692820192909252606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152909150676765c793fa10079d601b1b9042906101208101611229846133b1565b6001600160781b031681526020016112408561352e565b6001600160601b031681526020016112578361355c565b60d81b60d81c81526020018c60601b60601c81526020018960601b60601c81526020015f60601b60601c81526020018a60601b60601c81526020015f60381b60381c81525060015f8681526020019081526020015f205f820151815f015f6101000a8154816001600160781b03021916908360881b60881c02179055506020820151815f01600f6101000a8154816001600160781b03021916908360881b60881c02179055506040820151815f01601e6101000a81548160ff021916908360ff1602179055506060820151816001015f6101000a8154816001600160781b03021916908360881b60881c0217905550608082015181600101600f6101000a8154816001600160781b03021916908360881b60881c021790555060a0820151816002015f6101000a8154816001600160c81b03021916908360180b60381b60381c021790555060c0820151816003015f6101000a8154816001600160781b03021916908360881b60881c021790555060e082015181600301600f6101000a8154816001600160781b03021916908360881b60881c021790555061010082015181600301601e6101000a81548161ffff021916908361ffff160217905550610120820151816004015f6101000a8154816001600160781b03021916908360881b60881c021790555061014082015181600401600f6101000a8154816001600160601b03021916908360a01b60a01c021790555061016082015181600401601b6101000a81548164ffffffffff021916908360d81b60d81c0217905550610180820151816005015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101a0820151816006015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101c0820151816007015f6101000a8154816001600160a01b03021916908360601b60601c02179055506101e0820151816008015f6101000a8154816001600160a01b03021916908360601b60601c0217905550610200820151816009015f6101000a8154816001600160c81b03021916908360381b60381c0217905550905050611570848a613588565b60405160ff8b1681526001600160a01b038c169085907f92fb402b777f3710166f15b30098f41042b439850df67d0195196d125458e7b39060200160405180910390a3604080516080810182526001600160a01b03808c1682525f60208301819052908b16828401526060820152905185915f51602061554d5f395f51905f52916115fb9190614dc5565b60405180910390a260408051838152602081018590525f81830152905185915f51602061556d5f395f51905f52919081900360600190a250919998505050505050505050565b5f828152600160205260408120610f9f90836135ce565b5f818152600160205260408120610fa2906135e2565b61167733610d74565b5f5484106116985760405163b77e1e0f60e01b815260040160405180910390fd5b5f8481526001602052604090206116ae8161306c565b6127106116c1604086016020870161515f565b61ffff1611156116e45760405163e15e46cb60e01b815260040160405180910390fd5b5f6116f26020860186614b1f565b6001600160a01b03161480159061172157505f6117156060860160408701614b1f565b6001600160a01b031614155b61173e5760405163e6c4247b60e01b815260040160405180910390fd5b5f61174f6080860160608701614b1f565b6001600160a01b031614158061177757506001810154600160781b90046001600160781b0316155b611794576040516391eaafa160e01b815260040160405180910390fd5b6117a4604085016020860161515f565b60038201805461ffff92909216600160f01b026001600160f01b039092169190911790556117d86080850160608601614b1f565b6007820180546001600160a01b0319166001600160a01b039283161790556008820154166118096020860186614b1f565b6001600160a01b038281169116146118d0576118258287613145565b5061182e614aa5565b5f8781526002602081815260408084206001600160a01b0387168086528184529185209093015460ff600160e01b820481161515606088015291909452919052600160e81b90910416151560808201526118898783836136a3565b6118966020870187614b1f565b6008840180546001600160a01b0319166001600160a01b03929092169190911790556118ce876118c96020890189614b1f565b613588565b505b60068201546001600160a01b03166118ee6060870160408801614b1f565b6001600160a01b0316146119a15761190c6060860160408701614b1f565b6006830180546001600160a01b0319166001600160a01b039290921691909117905561193e6060860160408701614b1f565b60405163a467cc5960e01b81526001600160a01b039091169063a467cc599061196f9089908890889060040161511e565b5f604051808303815f87803b158015611986575f5ffd5b505af1158015611998573d5f5f3e3d5ffd5b505050506119c0565b82156119c057604051631c56bc9960e11b815260040160405180910390fd5b6119ca82876132cb565b855f51602061554d5f395f51905f52866040516119e79190615178565b60405180910390a2505050505050565b5f838152600160209081526040808320600283528184203385529092528220611a1f8261306c565b611a2f828287876040013561379b565b5f611a3d610e59848861388c565b60038401805491925082915f90611a5e9084906001600160781b03166151dc565b82546101009290920a6001600160781b03818102199093169183160217909155835483925084915f91611a93918591166151dc565b92506101000a8154816001600160781b03021916908360881b60881c0217905550611abf8383876138a0565b5f611acd86604001356139f8565b84549091505f908290611aea908a906001600160781b03166151fb565b611af491906151fb565b60058601546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190611b2b903090600401614b45565b602060405180830381865afa158015611b46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6a9190615137565b905080820382821015611b93576040516380561eeb60e01b8152600401610e4491815260200190565b50611b9d826133b1565b86546001600160781b0319166001600160781b0391909116178655611bc2868b6132cb565b60405133908b907f119e7f996dc987b3ae79eb3735f1620c4292f6a7761a1e0f834c445f7798b91290611bfc9088908d908f908a90615227565b60405180910390a35050506001600160781b03169695505050505050565b5f82815260016020908152604080832060028352818420338552909252909120611c438261306c565b6002810154600160e01b900460ff16611c6f57604051637437d01960e11b815260040160405180910390fd5b604083013515611c925760405163a664e07560e01b815260040160405180910390fd5b611c9d8282856138a0565b611ca782856132cb565b604051339085907f3fa96ecf17429fddfbb919a64196f4e43f71b57f0c5c38c49a21c8e1e763d18c90610f23908790615256565b5f828152600160205260408120610f9f9083613a0f565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220829190611d278282613a23565b611d318383613a3b565b9350935050505b9250929050565b5f81815260016020526040812060038101546002820154610f5191600160781b90046001600160781b03169060180b611d778461340f565b613a49565b5f818152600360205260408120610fa290613a6f565b5f828152600160205260408120610f9f9083613a78565b5f548210611dca5760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020611de08161306c565b611deb81338461335c565b80545f90611e039084906001600160781b03166151fb565b60058301546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190611e3a903090600401614b45565b602060405180830381865afa158015611e55573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e799190615137565b905080820382821015611ea2576040516380561eeb60e01b8152600401610e4491815260200190565b50611eac826133b1565b83546001600160781b0319166001600160781b0391909116178355611ed0846133b1565b600184018054600f90611ef4908490600160781b90046001600160781b03166151dc565b92506101000a8154816001600160781b03021916908360881b60881c0217905550611f2885846132cb90919063ffffffff16565b604051848152339086907f566111831db1f090374baff3c3f9fc512084f5a9b8f5b199fb475d9c43a8013f9060200160405180910390a35050505050565b5f828152600160209081526040808320600283528184203385529092528220611f8e8261306c565b611f99828286613a85565b81545f90611fb19086906001600160781b03166151fb565b60058401546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190611fe8903090600401614b45565b602060405180830381865afa158015612003573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120279190615137565b905080820382821015612050576040516380561eeb60e01b8152600401610e4491815260200190565b505f61205f610e598689613b7f565b90506001600160781b03811661208857604051636edcc52360e01b815260040160405180910390fd5b6001850180548291905f906120a79084906001600160781b03166150bf565b92506101000a8154816001600160781b03021916908360881b60881c021790555080846002015f8282829054906101000a90046001600160781b03166120ed91906150bf565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612117836133b1565b85546001600160781b0319166001600160781b039190911617855561213c85896132cb565b604051339089907fb233dd05ed21346e144167b35a6213bcf04768dbdffdc8339e8b027b94b9f305906121729085908c90615264565b60405180910390a36001600160781b0316979650505050505050565b336121976128be565b6001600160a01b038281169116146121c3578060405162d1953b60e31b8152600401610e449190614b45565b6001600160a01b0382163b5f036121ef57816040516361798f2f60e11b8152600401610e449190614b45565b6121f882613ba2565b5050565b5f828152600160205260408120610f9f9083613c03565b5f8281526001602090815260408083206008810154600284528285206001600160a01b039091168086529352818420338552919093206122528461306c565b61225c8186613c26565b612267818387613c72565b61227184876132cb565b6040518581526001600160a01b03841690339088905f51602061552d5f395f51905f52906020015b60405180910390a4505050505050565b5f838152600160209081526040808320600283528184203385528084528285206001600160a01b0387168652935292206122e28361306c565b6122ee83838388613d03565b6122f9828287613c72565b61230383876132cb565b6040518581526001600160a01b03851690339088905f51602061552d5f395f51905f5290602001612299565b5f818152600160205260408120610f51836123498361340f565b839190613e2b565b5f5f61235b613efd565b8054909150600160a01b900460ff16612374575f61237d565b638fb3603760e01b5b91505090565b5f8281526002602081815260408084206001600160a01b03861685528252808420909201548584526001909152908220610f9f916001600160781b0316613f21565b6123ce33610d74565b5f5483106123ef5760405163b77e1e0f60e01b815260040160405180910390fd5b5f838152600360205260409020612406908361351a565b61242357604051630aa1b05f60e41b815260040160405180910390fd5b61243c8383612437368590038501856152b1565b6136a3565b505050565b5f8381526001602090815260408083206002835281842033855290925282206124698261306c565b61247582828787613f44565b81546001600160781b031680808711156124a55760405163c730333f60e01b8152600401610e4491815260200190565b505f6124b4610e5985896135ce565b60038501805491925082915f906124d59084906001600160781b03166150bf565b82546101009290920a6001600160781b03818102199093169183160217909155845483925085915f9161250a918591166150bf565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612541610e5988846133ac90919063ffffffff16565b84546001600160781b0319166001600160781b039190911617845561256684896132cb565b600584015461257f906001600160a01b031687896133e3565b604051339089907fe2497bc41b1fa7c4ba996f24dc2affdffb2a5571584db6db0eed8fbbf1dc8517906121729085908c90615264565b6125be33610d74565b5f5483106125df5760405163b77e1e0f60e01b815260040160405180910390fd5b5f8381526001602052604090206125f58161306c565b600681015460405163a467cc5960e01b81526001600160a01b039091169063a467cc599061262b9087908790879060040161511e565b5f604051808303815f87803b158015612642575f5ffd5b505af1158015612654573d5f5f3e3d5ffd5b5050505061266b84826132cb90919063ffffffff16565b50505050565b5f828152600160205260408120610f9f908361388c565b5f818152600160205260408120610fa29061340f565b5f806126a933610d74565b5f858152600160209081526040808320600283528184203385528084528285206001600160a01b0389168652935292206126e28361306c565b60038101546001600160c81b03165f6126fa826139f8565b8910612706578161270f565b61270f89614091565b905061271b84826140ad565b5f612725826139f8565b90505f612735610e5988846140f9565b60018801805491925082915f906127569084906001600160781b03166151dc565b92506101000a8154816001600160781b03021916908360881b60881c021790555080866002015f8282829054906101000a90046001600160781b031661279c91906151dc565b92506101000a8154816001600160781b03021916908360881b60881c02179055506127c68361411c565b6009880180545f906127e29084906001600160c81b031661534a565b92506101000a8154816001600160c81b03021916908360381b60381c021790555061280c8361411c565b6003860180545f906128289084906001600160c81b031661534a565b92506101000a8154816001600160c81b03021916908360381b60381c021790555061285c8c886132cb90919063ffffffff16565b6040516001600160a01b038b169033908e907fe97b8576ac531cdc817b933309d0518ca3d26c6b46d490f3ae9fa39426a141ee9061289d9086908990615264565b60405180910390a46001600160781b03169b909a5098505050505050505050565b5f5f6128c8613efd565b546001600160a01b031692915050565b5f828152600160205260408120610f9f9083613f21565b6128f833610d74565b5f5483106129195760405163b77e1e0f60e01b815260040160405180910390fd5b6001600160a01b0382166129405760405163e6c4247b60e01b815260040160405180910390fd5b612423838361414a565b60015f6129556141b7565b8054909150600160401b900460ff168061297c575080546001600160401b03808416911610155b1561299a5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b0383166129e05760405163e6c4247b60e01b815260040160405180910390fd5b6129e9836141df565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f838152600160209081526040808320600283528184203385529092528220829190612a608261306c565b612a7082828888604001356141f3565b5f612a7e610e59848961388c565b60038401805491925082915f90612a9f9084906001600160781b03166151dc565b82546101009290920a6001600160781b03818102199093169183160217909155835483925084915f91612ad4918591166151dc565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612b008383886138a0565b60048301545f90604088013590612b24906001600160781b03908116908516615369565b612b2e91906151fb565b9050612b398161411c565b6009850180545f90612b559084906001600160c81b0316615380565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612b7f8161411c565b6003840180545f90612b9b9084906001600160c81b0316615380565b92506101000a8154816001600160c81b03021916908360381b60381c0217905550612bcf89856132cb90919063ffffffff16565b60405133908a907f4845ee5c72bde2b62defc8a1ca2f0fc3313b2d9e799997ce4f6776da9773bcbf90612c079086908c90879061539f565b60405180910390a381612c19826139f8565b6001600160781b039091169650945050505050935093915050565b5f828152600160205260408120610f9f9083613b7f565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220612c7d82826142ae565b95945050505050565b5f612c9082610f58565b612cad5760405163b77e1e0f60e01b815260040160405180910390fd5b506001600160a01b03165f9081526004602052604090205490565b5f838152600160209081526040808320600283528184203385529092528220612cf08261306c565b612cfb8186866142d9565b81546001600160781b03168080871115612d2b5760405163c730333f60e01b8152600401610e4491815260200190565b505f612d3a610e5985896140f9565b60018501805491925082915f90612d5b9084906001600160781b03166151dc565b92506101000a8154816001600160781b03021916908360881b60881c021790555080836002015f8282829054906101000a90046001600160781b0316612da191906151dc565b92506101000a8154816001600160781b03021916908360881b60881c0217905550612dd8610e5988846133ac90919063ffffffff16565b84546001600160781b0319166001600160781b0391909116178455612dfd84896132cb565b6005840154612e16906001600160a01b031687896133e3565b604051339089907f535be2ff85ab4c5d0991e10dc057a4951ea2bac426ffb036eded23036a3942b2906121729085908c90615264565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220612e7e8282613a3b565b612e888383613a23565b612c7d91906151fb565b5f818152600160205260408120612eb2612eab8261340f565b829061437b565b8154610f519190600160781b90046001600160781b03166151fb565b612ed6614aa5565b505f8281526002602081815260408084206001600160a01b0386168552825292839020835160a08101855292015464ffffffffff600160781b820481168452600160a01b8204169183019190915262ffffff600160c81b8204169282019290925260ff600160e01b8304811615156060830152600160e81b9092049091161515608082015292915050565b5f828152600160205260408120610f9f90836140f9565b5f612f81613efd565b90505f5f612fad612f906128be565b8730612f9f60045f8a8c6153ca565b612fa8916153f1565b61444f565b91509150816130645763ffffffff81161561304a57825460ff60a01b1916600160a01b178355612fdb6128be565b604051634a63ebf760e11b81526001600160a01b03909116906394c7d7ee9061300c9089908990899060040161541f565b5f604051808303815f87803b158015613023575f5ffd5b505af1158015613035573d5f5f3e3d5ffd5b5050845460ff60a01b19168555506130649050565b8560405162d1953b60e31b8152600401610e449190614b45565b505050505050565b600481015442600160d81b90910464ffffffffff16036130895750565b5f6130938261340f565b90506130a2610e59838361437b565b82548390600f906130c4908490600160781b90046001600160781b03166150bf565b92506101000a8154816001600160781b03021916908360881b60881c02179055506130ee816133b1565b6004830180546001600160781b0319166001600160781b03929092169190911790556131194261355c565b6004909201805464ffffffffff93909316600160d81b026001600160d81b039093169290921790915550565b81545f90600160781b90046001600160781b031681613167610e598684613b7f565b90506001600160781b0381165f03613183575f92505050610fa2565b60088501545f8581526002602081815260408084206001600160a01b039095168085529490915290912090810154600160e01b900460ff166131d857604051637437d01960e11b815260040160405180910390fd5b6001870180548491905f906131f79084906001600160781b03166150bf565b92506101000a8154816001600160781b03021916908360881b60881c021790555082816002015f8282829054906101000a90046001600160781b031661323d91906150bf565b82546001600160781b039182166101009390930a9283029190920219909116179055508654600160781b600160f01b03191687556040516001600160a01b0383169087907fafd21228e21de4a3f779e1cc3617e12672c3da091dcf3812a931036aa0bf633c906132b09087908990615264565b60405180910390a350506001600160781b0316949350505050565b60048201546001600160781b03165f6132e5848484613e2b565b90506132f08161352e565b600485018054600160781b600160d81b031916600160781b6001600160601b0393909316830217905584546040805185815260208101859052929091046001600160781b03169082015283905f51602061556d5f395f51905f529060600160405180910390a250505050565b60078301546001600160a01b0383811691161461338c57604051631e35bba360e11b815260040160405180910390fd5b5f811161243c5760405163162908e360e11b815260040160405180910390fd5b900390565b5f6001600160781b038211156133df576078826040516306dfcc6560e41b8152600401610e4492919061543e565b5090565b6133f083838360016144e1565b61243c5782604051635274afe760e01b8152600401610e449190614b45565b60048101545f906001600160781b03811690600160d81b900464ffffffffff1642811480613465575060038401546001600160781b031615801561346557506003840154600160781b90046001600160781b0316155b15613471575092915050565b600484015461349b9061349490600160781b90046001600160601b031683614543565b8390614570565b949350505050565b5f6134ae83836134e7565b6134b884846134cd565b610f9f91906151fb565b5f610f9f838361459e565b60038201545f90610f9f906001600160781b031683614570565b600382015460028301545f91610f9f9161351591600160781b90046001600160781b03169060180b85613a49565b6139f8565b5f610f9f836001600160a01b0384166145c4565b5f6001600160601b038211156133df576060826040516306dfcc6560e41b8152600401610e4492919061543e565b5f64ffffffffff8211156133df576028826040516306dfcc6560e41b8152600401610e4492919061543e565b613592828261414a565b6040805160a08101825264ffffffffff81525f602082018190529181018290526001606082015260808101919091526121f890839083906136a3565b5f610f9f6135db8461340f565b83906145db565b5f5f6135ed8361340f565b6003840154600285015460098601549293505f92613631926001600160781b0380821693600160781b909204169160189190910b906001600160c81b03168661461d565b905061363d848361437b565b8454600160781b90046001600160781b0316613658836139f8565b6001870154875461367c916001600160781b03600160781b909104811691166150bf565b61368f91906001600160781b03166151fb565b6136999190615450565b61349b9190615450565b5f8381526002602081815260408084206001600160a01b03871680865290835293819020855193810180549387015187840151606089015160808a0151600160781b600160c81b0319909716600160781b64ffffffffff998a160264ffffffffff60a01b191617600160a01b98909316979097029190911763ffffffff60c81b1916600160c81b62ffffff9092169190910260ff60e01b191617600160e01b951515959095029490941760ff60e81b1916600160e81b9315159390930292909217909255905190919085907f90984699e37aaae5f79c2f33e480f273509662005a8ff82a17b325eb7072454e90610f23908690614f8c565b5f8211806137a857505f81115b6137c55760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff166137f157604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff161561381e57604051639db9b35560e01b815260040160405180910390fd5b5f6138298585613a23565b90505f61383686866142ae565b9050818085111561385d576040516325ecf23b60e11b8152600401610e4491815260200190565b50808084111561388357604051636e43412360e11b8152600401610e4491815260200190565b50505050505050565b5f610f9f6138998461340f565b8390614657565b6004830154600384015460028501546001600160781b03928316926138d6928492600160781b9091049091169060180b85614691565b6002860180546001600160c81b0319166001600160c81b0392909216919091179055600385018054600160781b600160f01b031916600160781b6001600160781b03938416810291909117909155845460018601546139419385939092049091169060180b85614691565b6001850180546001600160c81b039092166001600160c81b031990921691909117905583546001600160781b03909116600160781b02600160781b600160f01b0319909116178355600283015462ffffff600160c81b9091048116908114806139d4575083546139bf906001600160781b031662ffffff831661471e565b8454600160781b90046001600160781b031611155b6139f15760405163a664e07560e01b815260040160405180910390fd5b5050505050565b676765c793fa10079d601b1b808204910615150190565b5f610f9f613a1c8461340f565b8390614743565b80545f90610f9f9084906001600160781b0316613a78565b5f610f9f61351584846142ae565b5f61349b83613a60613a5b8588615369565b614769565b613a6a9190615463565b614795565b5f610fa2825490565b5f610f9f6134948461340f565b5f8111613aa55760405163162908e360e11b815260040160405180910390fd5b6002820154600160e01b900460ff16613ad157604051637437d01960e11b815260040160405180910390fd5b6002820154600160e81b900460ff1615613afe57604051639db9b35560e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480613b5d575060028301548290613b379086906001600160781b0316613c03565b613b4191906151fb565b8454600160f01b900460ff16600a0a613b5a9083615369565b10155b81906139f157604051636f1fe35760e11b8152600401610e4491815260200190565b5f610f9f613b8c846135e2565b60018501548491906001600160781b03166147ba565b5f613bab613efd565b80546001600160a01b0319166001600160a01b0384161781556040519091507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90613bf7908490614b45565b60405180910390a15050565b5f610f9f613c10846135e2565b60018501548491906001600160781b03166147e1565b6002820154600160e01b900460ff16613c5257604051637437d01960e11b815260040160405180910390fd5b5f81116121f857604051636edcc52360e01b815260040160405180910390fd5b613c7b816133b1565b6002840180545f90613c979084906001600160781b03166151dc565b92506101000a8154816001600160781b03021916908360881b60881c0217905550613cc1816133b1565b6002830180545f90613cdd9084906001600160781b03166150bf565b92506101000a8154816001600160781b03021916908360881b60881c0217905550505050565b6002830154600160e01b900460ff168015613d2957506002820154600160e01b900460ff165b613d4657604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16158015613d6e57506002820154600160e81b900460ff16155b613d8b57604051639db9b35560e01b815260040160405180910390fd5b5f8111613dab57604051636edcc52360e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480613e0957506002830154613ded90613de69084906001600160781b03166151fb565b8690613c03565b8554600160f01b900460ff16600a0a613e069083615369565b10155b819061306457604051636f1fe35760e11b8152600401610e4491815260200190565b600683015483545f916001600160a01b03169063f5fe86ee9085906001600160781b0316613e5988876134cd565b6009890154613e70906001600160c81b03166139f8565b60018a015460405160e087901b6001600160e01b031916815260048101959095526001600160781b03938416602486015260448501929092526064840152600160781b900416608482015260a401602060405180830381865afa158015613ed9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061349b9190615137565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0090565b5f610f9f613f2e846135e2565b60018501548491906001600160781b0316614809565b306001600160a01b03821603613f6d5760405163e6c4247b60e01b815260040160405180910390fd5b5f8211613f8d5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff16613fb957604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff1615613fe657604051639db9b35560e01b815260040160405180910390fd5b6002830154600160a01b900464ffffffffff165f6140048686613a3b565b61400e8787613a23565b61401891906151fb565b905064ffffffffff82148061406f5750600385015461403f906001600160c81b03166139f8565b61404985836151fb565b61405391906151fb565b8654600160f01b900460ff16600a0a61406c9084615369565b10155b8290613883576040516303ad30dd60e41b8152600401610e4491815260200190565b676765c793fa10079d601b1b8181029081048214610dcd575f5ffd5b6002820154600160e01b900460ff166140d957604051637437d01960e11b815260040160405180910390fd5b5f81116121f85760405163162908e360e11b815260040160405180910390fd5b5f610f9f614106846135e2565b60018501548491906001600160781b0316614827565b5f6001600160c81b038211156133df5760c8826040516306dfcc6560e41b8152600401610e4492919061543e565b5f8281526003602052604090206141619082614845565b61417e576040516304c9458360e01b815260040160405180910390fd5b6040516001600160a01b0382169083907f47acdb603dbca71028fbd9b37192e17a62e64fa160e2e607eef3853b792ea5ab905f90a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610fa2565b6141e7614859565b6141f081614880565b50565b5f82118061420057505f81115b61421d5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661424957604051637437d01960e11b815260040160405180910390fd5b5f6142548585613a23565b90505f61426186866142ae565b90508180851115614288576040516304ddd91f60e01b8152600401610e4491815260200190565b508080841115613883576040516337f3f9b760e01b8152600401610e4491815260200190565b805460018201545f91610f9f91600160781b9091046001600160781b03169060180b611d778661340f565b306001600160a01b038216036143025760405163e6c4247b60e01b815260040160405180910390fd5b5f82116143225760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661434e57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff161561243c57604051639db9b35560e01b815260040160405180910390fd5b60048201545f906001600160781b031682810361439b575f915050610fa2565b6003840154600160f01b900461ffff165f8190036143bd575f92505050610fa2565b6003850154600286015460098701546001600160781b0380841693600160781b9004169160180b906001600160c81b03165f6143fc858585858d61461d565b90505f6144186001600160781b0380881690871686868c61461d565b905061444087614427836139f8565b614430856139f8565b61443a9190615450565b90614891565b9b9a5050505050505050505050565b6040516001600160a01b038085166024830152831660448201526001600160e01b0319821660648201525f908190819060840160408051601f19818403018152918152602080830180516001600160e01b031663b700961360e01b1781525f808052918290528351939450919290918a5afa156144d7575f516020805191945081901c150291505b5094509492505050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661453757838315161561452b573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f42821115614550575f5ffd5b506301e1338042919091039190910204676765c793fa10079d601b1b0190565b5f815f1904831115821517614583575f5ffd5b50676765c793fa10079d601b1b910281810491900615150190565b5f825f0182815481106145b3576145b3615482565b905f5260205f200154905092915050565b5f9081526001919091016020526040902054151590565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e02884111715614600575f5ffd5b50676765c793fa10079d601b1b9190910281810491900615150190565b5f5f61462a868685613a49565b90508381614638858a615369565b61464291906151fb565b61464c91906151fb565b979650505050505050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e0288411171561467c575f5ffd5b50676765c793fa10079d601b1b919091020490565b5f5f5f61469f868689613a49565b90505f6146ad8786356148ae565b90505f6146be602087013588615496565b90505f6146cc83838c613a49565b9050836146dd6040890135836151fb565b146146fb5760405163a664e07560e01b815260040160405180910390fd5b614704836133b1565b61470d836148da565b955095505050505094509492505050565b5f815f1904831115821517614731575f5ffd5b50612710910281810491900615150190565b5f815f1904831115821517614756575f5ffd5b50676765c793fa10079d601b1b91020490565b5f6001600160ff1b038211156133df5760405163123baf0360e11b815260048101839052602401610e44565b5f5f8212156133df57604051635467221960e11b815260048101839052602401610e44565b5f61349b6147cb620f4240846151fb565b6147d8620f4240866151fb565b8691905f614904565b5f61349b6147f2620f4240856151fb565b6147ff620f4240856151fb565b8691906001614904565b5f61349b61481a620f4240856151fb565b6147d8620f4240856151fb565b5f61349b614838620f4240846151fb565b6147ff620f4240866151fb565b5f610f9f836001600160a01b03841661493c565b614861614983565b61487e57604051631afcd79f60e31b815260040160405180910390fd5b565b614888614859565b6141f081613ba2565b5f815f19048311158215176148a4575f5ffd5b5061271091020490565b5f5f82126148c7576148c082846151fb565b9050610fa2565b6148d0826154bd565b610f9f9084615450565b80601881900b8114610dcd5760c88260405163327269a760e01b8152600401610e4492919061543e565b5f6149316149118361499c565b801561492c57505f8480614927576149276154d7565b868809115b151590565b612e888686866149c8565b5f61494783836145c4565b61497c57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610fa2565b505f610fa2565b5f61498c6141b7565b54600160401b900460ff16919050565b5f60028260038111156149b1576149b16154eb565b6149bb91906154ff565b60ff166001149050919050565b5f5f5f6149d58686614a78565b91509150815f036149f9578381816149ef576149ef6154d7565b0492505050610f51565b818411614a1057614a106003851502601118614a94565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915290565b5f60208284031215614ae2575f5ffd5b5035919050565b5f5f60408385031215614afa575f5ffd5b50508035926020909101359150565b80356001600160a01b0381168114610dcd575f5ffd5b5f60208284031215614b2f575f5ffd5b610f9f82614b09565b6001600160a01b03169052565b6001600160a01b03909116815260200190565b5f5f60408385031215614b69575f5ffd5b82359150614b7960208401614b09565b90509250929050565b5f5f83601f840112614b92575f5ffd5b5081356001600160401b03811115614ba8575f5ffd5b602083019150836020828501011115611d38575f5ffd5b5f5f5f5f5f5f60a08789031215614bd4575f5ffd5b614bdd87614b09565b955060208701358060ff168114614bf2575f5ffd5b9450614c0060408801614b09565b9350614c0e60608801614b09565b925060808701356001600160401b03811115614c28575f5ffd5b614c3489828a01614b82565b979a9699509497509295939492505050565b5f5f5f5f84860360c0811215614c5a575f5ffd5b853594506080601f1982011215614c6f575f5ffd5b5060208501925060a08501356001600160401b03811115614c8e575f5ffd5b614c9a87828801614b82565b95989497509550505050565b5f60608284031215614cb6575f5ffd5b50919050565b5f5f5f60a08486031215614cce575f5ffd5b8335925060208401359150614ce68560408601614ca6565b90509250925092565b5f5f60808385031215614d00575f5ffd5b82359150614b798460208501614ca6565b5f5f5f60608486031215614d23575f5ffd5b8335925060208401359150614ce660408501614b09565b5f5f5f83850360e0811215614d4d575f5ffd5b84359350614d5d60208601614b09565b925060a0603f1982011215614d70575f5ffd5b506040840190509250925092565b5f5f5f60408486031215614d90575f5ffd5b8335925060208401356001600160401b03811115614dac575f5ffd5b614db886828701614b82565b9497909650939450505050565b81516001600160a01b03908116825260208084015161ffff1690830152604080840151821690830152606092830151169181019190915260800190565b6001600160781b03169052565b6001600160c81b03169052565b5f61022082019050614e2f828451614e02565b6020830151614e416020840182614e02565b506040830151614e56604084018260ff169052565b506060830151614e696060840182614e02565b506080830151614e7c6080840182614e02565b5060a0830151614e9160a084018260180b9052565b5060c0830151614ea460c0840182614e02565b5060e0830151614eb760e0840182614e02565b50610100830151614ecf61010084018261ffff169052565b50610120830151614ee4610120840182614e02565b50610140830151614f016101408401826001600160601b03169052565b50610160830151614f1c61016084018264ffffffffff169052565b50610180830151614f31610180840182614b38565b506101a0830151614f466101a0840182614b38565b506101c0830151614f5b6101c0840182614b38565b506101e0830151614f706101e0840182614b38565b50610200830151614f85610200840182614e0f565b5092915050565b815164ffffffffff90811682526020808401519091169082015260408083015162ffffff169082015260608083015115159082015260809182015115159181019190915260a00190565b5f61014082019050614fe9828451614e02565b6020830151614ffb6020840182614e02565b506040830151615010604084018260180b9052565b5060608301516150236060840182614e02565b50608083015161503c608084018264ffffffffff169052565b5060a083015161505560a084018264ffffffffff169052565b5060c083015161506c60c084018262ffffff169052565b5060e083015161508060e084018215159052565b5061010083015161509661010084018215159052565b50610120830151614f85610120840182614e0f565b634e487b7160e01b5f52601160045260245ffd5b6001600160781b038181168184160190811115610fa257610fa26150ab565b5f600182016150ef576150ef6150ab565b5060010190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b838152604060208201525f612c7d6040830184866150f6565b5f60208284031215615147575f5ffd5b5051919050565b803561ffff81168114610dcd575f5ffd5b5f6020828403121561516f575f5ffd5b610f9f8261514e565b6080810161518583614b09565b6001600160a01b0316825261519c6020840161514e565b61ffff1660208301526151b160408401614b09565b6001600160a01b031660408301526151cb60608401614b09565b60601b60601c606083015292915050565b6001600160781b038083168282160390811115610fa257610fa26150ab565b80820180821115610fa257610fa26150ab565b8035825260208082013590830152604090810135910152565b6001600160781b038516815260c08101615244602083018661520e565b608082019390935260a0015292915050565b60608101610fa2828461520e565b6001600160781b039092168252602082015260400190565b803564ffffffffff81168114610dcd575f5ffd5b803562ffffff81168114610dcd575f5ffd5b80358015158114610dcd575f5ffd5b5f60a08284031280156152c2575f5ffd5b5060405160a081016001600160401b03811182821017156152f157634e487b7160e01b5f52604160045260245ffd5b6040526152fd8361527c565b815261530b6020840161527c565b602082015261531c60408401615290565b604082015261532d606084016152a2565b606082015261533e608084016152a2565b60808201529392505050565b6001600160c81b038083168282160390811115610fa257610fa26150ab565b8082028115828204841417610fa257610fa26150ab565b6001600160c81b038181168184160190811115610fa257610fa26150ab565b6001600160781b038416815260a081016153bc602083018561520e565b826080830152949350505050565b5f5f858511156153d8575f5ffd5b838611156153e4575f5ffd5b5050820193919092039150565b6001600160e01b03198135166004831015610fa2576001600160e01b0319600484900360031b1b1692915050565b8360601b60601c8152604060208201525f612c7d6040830184866150f6565b60ff9092168252602082015260400190565b81810381811115610fa257610fa26150ab565b8181035f831280158383131683831282161715614f8557614f856150ab565b634e487b7160e01b5f52603260045260245ffd5b8082018281125f8312801582168215821617156154b5576154b56150ab565b505092915050565b5f600160ff1b82016154d1576154d16150ab565b505f0390565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f8260ff168061551d57634e487b7160e01b5f52601260045260245ffd5b808360ff16069150509291505056fe0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a0ea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b974a1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f14883350