solc-0.8.35 0xdd3f50f8a6cafbe9b31a427582963f465e745af8 optimized

10538 bytes

6080604052600436106100ef575f3560e01c8063606b649711610087578063b7013dc111610057578063b7013dc11461021b578063c095415d1461022f578063d0e30db014610237578063db82047b1461023f575f5ffd5b8063606b6497146101c157806363a5db9e146101e057806372f5158d146101ff578063888b042f14610207575f5ffd5b806322b1751d116100c257806322b1751d1461014c57806327c8f1931461015f5780633b36f5921461017357806354fd4d5014610197575f5ffd5b806312065fe0146100f35780631b7dd4c01461011a5780631e35fed8146101245780631eddb62614610138575b5f5ffd5b3480156100fe575f5ffd5b50610107610247565b6040519081526020015b60405180910390f35b6101226102f6565b005b34801561012f575f5ffd5b50610107610449565b348015610143575f5ffd5b5061010761046f565b61012261015a3660046125d7565b6106a3565b34801561016a575f5ffd5b506101226107f5565b34801561017e575f5ffd5b506101876108d4565b6040519015158152602001610111565b3480156101a2575f5ffd5b505f546101af9060ff1681565b60405160ff9091168152602001610111565b3480156101cc575f5ffd5b506101226101db3660046125d7565b610958565b3480156101eb575f5ffd5b506101226101fa3660046125d7565b610b12565b610122610d54565b348015610212575f5ffd5b50610107610eaf565b348015610226575f5ffd5b50610107610f65565b610122610f8a565b610122611039565b610122611603565b6040516335ee5f8760e01b81526020600482015260116024820152701c9bd8dad95d11195c1bdcda5d141bdbdb607a1b60448201525f907f0000000000000000000000003bdc69c4e5e13e52a65f5583c23efb9636b469d66001600160a01b0316906335ee5f8790606401602060405180830381865afa1580156102cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f191906125ee565b905090565b61030c5f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b0316146103455760405162461bcd60e51b815260040161033c90612605565b60405180910390fd5b604051806040016040528060148152602001733937b1b5b2ba20bab1ba34b7b726b0b730b3b2b960611b815250336103a282604051602001610387919061263c565b60405160208183030381529060405280519060200120611686565b6001600160a01b0316816001600160a01b0316146103d25760405162461bcd60e51b815260040161033c90612605565b5f6103fe6040518060400160405280602081526020015f5160206128e95f395f51905f528152506116fb565b6040805134815242602082015291925033917f3a6614e80d02b57255cbb1f8305fbeca53d7e05a4b779d406279196608512925910160405180910390a26104448161175e565b505050565b5f6102f1786465706f7369742e706f6f6c2e6e6f64652e62616c616e636560381b6117d7565b5f5f61049c6040518060400160405280602081526020015f5160206128e95f395f51905f528152506116fb565b9050806001600160a01b0316636ada78476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fe919061266e565b610509575f91505090565b5f610512610247565b90505f826001600160a01b031663fd6ce89e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610551573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061057591906125ee565b9050826001600160a01b03166347fa434a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d7919061266e565b15610681575f61061160405180604001604052806013815260200172726f636b65744d696e69706f6f6c517565756560681b8152506116fb565b905061067d816001600160a01b031663e60b40bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610652573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067691906125ee565b8390611846565b9150505b808210610691575f935050505090565b61069b81836118ab565b935050505090565b6106b95f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b0316146106e95760405162461bcd60e51b815260040161033c90612605565b604051806040016040528060118152602001701c9bd8dad95d139bd91951195c1bdcda5d607a1b8152503361072882604051602001610387919061263c565b6001600160a01b0316816001600160a01b0316146107585760405162461bcd60e51b815260040161033c90612605565b34156107cf577f0000000000000000000000003bdc69c4e5e13e52a65f5583c23efb9636b469d66001600160a01b03166398ea5fca346040518263ffffffff1660e01b81526004015f604051808303818588803b1580156107b7575f5ffd5b505af11580156107c9573d5f5f3e3d5ffd5b50505050505b610444786465706f7369742e706f6f6c2e6e6f64652e62616c616e636560381b84611906565b61080b5f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b03161461083b5760405162461bcd60e51b815260040161033c90612605565b5f6108676040518060400160405280602081526020015f5160206128e95f395f51905f528152506116fb565b90506108728161196e565b6108d15760405162461bcd60e51b815260206004820152602a60248201527f4465706f7369742061737369676e6d656e7473206172652063757272656e746c6044820152691e48191a5cd8589b195960b21b606482015260840161033c565b50565b5f6108eb5f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b03161461091b5760405162461bcd60e51b815260040161033c90612605565b5f6109476040518060400160405280602081526020015f5160206128e95f395f51905f528152506116fb565b90506109528161196e565b91505090565b61096e5f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b03161461099e5760405162461bcd60e51b815260040161033c90612605565b604051806040016040528060118152602001701c9bd8dad95d139bd91951195c1bdcda5d607a1b815250336109dd82604051602001610387919061263c565b6001600160a01b0316816001600160a01b031614610a0d5760405162461bcd60e51b815260040161033c90612605565b604051631df699e760e11b8152600481018490527f0000000000000000000000003bdc69c4e5e13e52a65f5583c23efb9636b469d66001600160a01b031690633bed33ce906024015f604051808303815f87803b158015610a6c575f5ffd5b505af1158015610a7e573d5f5f3e3d5ffd5b50506040515f925033915085908381818185875af1925050503d805f8114610ac1576040519150601f19603f3d011682016040523d82523d5f602084013e610ac6565b606091505b5050905080610b0c5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b604482015260640161033c565b50505050565b610b285f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b031614610b585760405162461bcd60e51b815260040161033c90612605565b6040518060400160405280600f81526020016e0e4dec6d6cae8a8ded6cadca48aa89608b1b81525033610b9582604051602001610387919061263c565b6001600160a01b0316816001600160a01b031614610bc55760405162461bcd60e51b815260040161033c90612605565b610bcd610eaf565b831115610c2f5760405162461bcd60e51b815260206004820152602a60248201527f496e73756666696369656e74206578636573732062616c616e636520666f72206044820152691dda5d1a191c985dd85b60b21b606482015260840161033c565b604051631df699e760e11b8152600481018490527f0000000000000000000000003bdc69c4e5e13e52a65f5583c23efb9636b469d66001600160a01b031690633bed33ce906024015f604051808303815f87803b158015610c8e575f5ffd5b505af1158015610ca0573d5f5f3e3d5ffd5b505050507f000000000000000000000000ae78736cd615f374d3085123a210448e74fc63936001600160a01b0316636c985a88846040518263ffffffff1660e01b81526004015f604051808303818588803b158015610cfd575f5ffd5b505af1158015610d0f573d5f5f3e3d5ffd5b5050604080518781524260208201523394507f992f462cfb62e164bd03bf07baf2cffce83fbd9370cae10635842b2020012120935001905060405180910390a2505050565b610d6a5f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b031614610d9a5760405162461bcd60e51b815260040161033c90612605565b33610dfa81604051602001610ddf91906e6d696e69706f6f6c2e65786973747360881b815260609190911b6bffffffffffffffffffffffff1916600f82015260230190565b60405160208183030381529060405280519060200120611a8a565b610e395760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081b5a5b9a5c1bdbdb60821b604482015260640161033c565b5f610e656040518060400160405280602081526020015f5160206128e95f395f51905f528152506116fb565b6040805134815242602082015291925033917f3a6614e80d02b57255cbb1f8305fbeca53d7e05a4b779d406279196608512925910160405180910390a2610eab8161175e565b5050565b5f5f610ee560405180604001604052806013815260200172726f636b65744d696e69706f6f6c517565756560681b8152506116fb565b90505f816001600160a01b031663e60b40bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4891906125ee565b90505f610f53610247565b9050808210610691575f935050505090565b5f6102f1610f79610f74610449565b611af9565b610f84610f74610247565b90611b62565b610fa05f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b031614610fd05760405162461bcd60e51b815260040161033c90612605565b6040518060400160405280600b81526020016a1c9bd8dad95d15985d5b1d60aa1b8152503361100982604051602001610387919061263c565b6001600160a01b0316816001600160a01b031614610eab5760405162461bcd60e51b815260040161033c90612605565b61104f5f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b03161461107f5760405162461bcd60e51b815260040161033c90612605565b5f6110ab6040518060400160405280602081526020015f5160206128e95f395f51905f528152506116fb565b9050806001600160a01b0316636ada78476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110d919061266e565b6111725760405162461bcd60e51b815260206004820152603060248201527f4465706f7369747320696e746f20526f636b657420506f6f6c2061726520637560448201526f1c9c995b9d1b1e48191a5cd8589b195960821b606482015260840161033c565b806001600160a01b031663035cf1426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d291906125ee565b3410156112475760405162461bcd60e51b815260206004820152603a60248201527f546865206465706f736974656420616d6f756e74206973206c6573732074686160448201527f6e20746865206d696e696d756d206465706f7369742073697a65000000000000606482015260840161033c565b5f61125a34611254610247565b90611846565b90505f826001600160a01b031663fd6ce89e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611299573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd91906125ee565b9050808211156114b157826001600160a01b03166347fa434a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611303573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611327919061266e565b15611443575f61136160405180604001604052806013815260200172726f636b65744d696e69706f6f6c517565756560681b8152506116fb565b90506113a2816001600160a01b031663e60b40bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610652573d5f5f3e3d5ffd5b83111561143d5760405162461bcd60e51b815260206004820152605d60248201527f546865206465706f73697420706f6f6c2073697a65206166746572206465706f60448201527f736974696e672028616e64206d61746368696e672077697468206d696e69706f60648201527f6f6c7329206578636565647320746865206d6178696d756d2073697a65000000608482015260a40161033c565b506114b1565b60405162461bcd60e51b815260206004820152603f60248201527f546865206465706f73697420706f6f6c2073697a65206166746572206465706f60448201527f736974696e67206578636565647320746865206d6178696d756d2073697a6500606482015260840161033c565b5f61152e670de0b6b3a7640000611528866001600160a01b0316630de705b56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114fd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152191906125ee565b3490611bec565b90611c6a565b90505f61153b34836118ab565b6040516394bf804d60e01b8152600481018290523360248201529091507f000000000000000000000000ae78736cd615f374d3085123a210448e74fc63936001600160a01b0316906394bf804d906044015f604051808303815f87803b1580156115a3575f5ffd5b505af11580156115b5573d5f5f3e3d5ffd5b5050604080513481524260208201523393507f7aa1a8eb998c779420645fc14513bf058edb347d95c2fc2e6845bdc22f88863192500160405180910390a26115fc8561175e565b5050505050565b6116195f5160206128c95f395f51905f52611686565b6001600160a01b0316306001600160a01b0316146116495760405162461bcd60e51b815260040161033c90612605565b6040518060400160405280600f81526020016e0e4dec6d6cae8a8ded6cadca48aa89608b1b815250336103a282604051602001610387919061263c565b5f80546040516321f8a72160e01b8152600481018490526101009091046001600160a01b0316906321f8a72190602401602060405180830381865afa1580156116d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f591906126a8565b92915050565b5f5f61171183604051602001610387919061263c565b90506001600160a01b0381166116f55760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081b9bdd08199bdd5b9960721b604482015260640161033c565b7f0000000000000000000000003bdc69c4e5e13e52a65f5583c23efb9636b469d66001600160a01b03166398ea5fca346040518263ffffffff1660e01b81526004015f604051808303818588803b1580156117b7575f5ffd5b505af11580156117c9573d5f5f3e3d5ffd5b5050505050610eab8161196e565b5f805460405163bd02d0f560e01b8152600481018490526101009091046001600160a01b03169063bd02d0f590602401602060405180830381865afa158015611822573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f591906125ee565b5f8061185283856126d5565b9050838110156118a45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161033c565b9392505050565b5f828211156118fc5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161033c565b6118a482846126e8565b5f54604051632b6cd4f760e21b815260048101849052602481018390526101009091046001600160a01b03169063adb353dc906044015b5f604051808303815f87803b158015611954575f5ffd5b505af1158015611966573d5f5f3e3d5ffd5b505050505050565b5f816001600160a01b03166347fa434a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119cf919061266e565b6119da57505f919050565b5f611a0f60405180604001604052806013815260200172726f636b65744d696e69706f6f6c517565756560681b8152506116fb565b9050806001600160a01b0316638ed804536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a71919061266e565b15611a80576118a48184611cc4565b6118a4818461218d565b5f8054604051633d70e7e560e11b8152600481018490526101009091046001600160a01b031690637ae1cfca90602401602060405180830381865afa158015611ad5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f5919061266e565b5f600160ff1b8210611b5e5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161033c565b5090565b5f80611b6e83856126fb565b90505f8312158015611b805750838113155b80611b9457505f83128015611b9457508381135b6118a45760405162461bcd60e51b8152602060048201526024808201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604482015263666c6f7760e01b606482015260840161033c565b5f825f03611bfb57505f6116f5565b5f611c068385612721565b905082611c138583612738565b146118a45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161033c565b5f5f8211611cba5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161033c565b6118a48284612738565b5f5f611ce7604051806060016040528060218152602001612909602191396116fb565b90505f611cf2610247565b90505f5f90505f856001600160a01b0316633b474a656040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d5991906125ee565b90505f8167ffffffffffffffff811115611d7557611d75612757565b604051908082528060200260200182016040528015611db957816020015b604080518082019091525f8082526020820152815260200190600190039081611d935790505b5090505f8080805b85811015611fb357825f03611eba578b6001600160a01b03166304b5466b6040518163ffffffff1660e01b81526004016040805180830381865afa158015611e0b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2f919061276b565b90945092505f846004811115611e4757611e4761279a565b14611fb3576040516304a0030d60e21b81526001600160a01b038a16906312800c3490611e789087906004016127ae565b602060405180830381865afa158015611e93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb791906125ee565b91505b82611ec4816127d4565b935050811580611edc575081611eda89896118ab565b105b611fb357604051631d33eeb960e31b81525f906001600160a01b038e169063e99f75c890611f0e9088906004016127ae565b6020604051808303815f875af1158015611f2a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4e91906126a8565b9050611f5a8884611846565b975082868381518110611f6f57611f6f6127e9565b6020026020010151602001818152505080868381518110611f9257611f926127e9565b60209081029190910101516001600160a01b03909116905250600101611dc1565b50851561217c57604051631df699e760e11b8152600481018790527f0000000000000000000000003bdc69c4e5e13e52a65f5583c23efb9636b469d66001600160a01b031690633bed33ce906024015f604051808303815f87803b158015612019575f5ffd5b505af115801561202b573d5f5f3e3d5ffd5b505f925050505b8581101561217a5784818151811061204c5761204c6127e9565b6020026020010151602001515f031561217a575f858281518110612072576120726127e9565b60200260200101515f01519050806001600160a01b031663481461138784815181106120a0576120a06127e9565b6020026020010151602001516040518263ffffffff1660e01b81526004015f604051808303818588803b1580156120d5575f5ffd5b505af11580156120e7573d5f5f3e3d5ffd5b50505050508582815181106120fe576120fe6127e9565b60200260200101515f01516001600160a01b03167fa1811054b7d96716259cff0d366c2f6405951e0efe00c8db3e237cbf77fe7be9878481518110612145576121456127e9565b60200260200101516020015142604051612169929190918252602082015260400190565b60405180910390a250600101612032565b505b5060019a9950505050505050505050565b5f5f6121b0604051806060016040528060218152602001612909602191396116fb565b90505f836001600160a01b0316633b474a656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ef573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221391906125ee565b90505f826001600160a01b0316633469f7b46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612252573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227691906125ee565b90505f6122833483611c6a565b90505f61229283611528610247565b90505f6122f983896001600160a01b031663f19b41066040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125491906125ee565b9050818111156123065750805b848111156123115750835b604051637e0e497b60e01b8152600481018290525f906001600160a01b038b1690637e0e497b906024015f604051808303815f875af1158015612356573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261237d91908101906127fd565b80519091501561258c5780515f906123959087611bec565b604051631df699e760e11b8152600481018290529091507f0000000000000000000000003bdc69c4e5e13e52a65f5583c23efb9636b469d66001600160a01b031690633bed33ce906024015f604051808303815f87803b1580156123f7575f5ffd5b505af1158015612409573d5f5f3e3d5ffd5b505f9250829150505b8351811015612562575f84828151811061242e5761242e6127e9565b60200260200101519050806001600160a01b031663d0e30db08a6040518263ffffffff1660e01b81526004015f604051808303818588803b158015612471575f5ffd5b505af1158015612483573d5f5f3e3d5ffd5b50505050506124f2816001600160a01b031663d2ceebd16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124eb91906125ee565b8490611846565b9250848281518110612506576125066127e9565b60200260200101516001600160a01b03167fa1811054b7d96716259cff0d366c2f6405951e0efe00c8db3e237cbf77fe7be98a42604051612551929190918252602082015260400190565b60405180910390a250600101612412565b50612589786465706f7369742e706f6f6c2e6e6f64652e62616c616e636560381b8261259c565b50505b5060019998505050505050505050565b5f5460405163ebb9d8c960e01b815260048101849052602481018390526101009091046001600160a01b03169063ebb9d8c99060440161193d565b5f602082840312156125e7575f5ffd5b5035919050565b5f602082840312156125fe575f5ffd5b5051919050565b6020808252601c908201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604082015260600190565b6f636f6e74726163742e6164647265737360801b81525f82518060208501601085015e5f920160100191825250919050565b5f6020828403121561267e575f5ffd5b815180151581146118a4575f5ffd5b80516001600160a01b03811681146126a3575f5ffd5b919050565b5f602082840312156126b8575f5ffd5b6118a48261268d565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116f5576116f56126c1565b818103818111156116f5576116f56126c1565b8181035f83128015838313168383128216171561271a5761271a6126c1565b5092915050565b80820281158282048414176116f5576116f56126c1565b5f8261275257634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561277c575f5ffd5b82516005811061278a575f5ffd5b6020939093015192949293505050565b634e487b7160e01b5f52602160045260245ffd5b60208101600583106127ce57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f816127e2576127e26126c1565b505f190190565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561280d575f5ffd5b815167ffffffffffffffff811115612823575f5ffd5b8201601f81018413612833575f5ffd5b805167ffffffffffffffff81111561284d5761284d612757565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561287a5761287a612757565b604052918252602081840181019290810187841115612897575f5ffd5b6020850194505b838510156128bd576128af8561268d565b81526020948501940161289e565b50969550505050505056fe65dd923ddfc8d8ae6088f80077201d2403cbd565f0ba25e09841e2799ec90bb2726f636b657444414f50726f746f636f6c53657474696e67734465706f736974726f636b657444414f50726f746f636f6c53657474696e67734d696e69706f6f6c