UNPKG

@uniswap/v4-periphery

Version:

🦄 Peripheral smart contracts for interacting with Uniswap v4

1 lines • 603 kB
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_settle_native_succeeds","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_token_succeeds","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x600c8054600160ff199182168117909255601f80548216831790556077196080819052607860a0819052670de0b6b3a764000060c08190525f60e08190526020805465ffffffffffff199081166378ffff8890811790925560219390935560228290556101009490945261012092909252670de0b6b3a763ffff196101408190526101608390526023805490921690931790556024919091556025556101e06040526101808290526063196101a08190526bb504f333f9de6484597d89b36101c081905260268054909316909317909155602755602880546001600160a01b0319908116909217905560428054600e90831617905560438054909116614000600160a01b03179055348015610112575f80fd5b506201e27380620001225f395ff3fe60806040526004361061015a575f3560e01c806385226c81116100bb578063b5508aa911610071578063c7b8e15d11610057578063c7b8e15d14610400578063e20c9f7114610414578063fa7626d414610428575f80fd5b8063b5508aa9146103c8578063ba414fa6146103dc575f80fd5b806393ad73ed116100a157806393ad73ed1461031d578063b0464fdc1461034a578063b1a73b8a1461035e575f80fd5b806385226c81146102db578063916a17c6146102fc575f80fd5b80633e5e3c2311610110578063542524dd116100f6578063542524dd1461026257806366d9a9a01461029b5780637a177fd0146102bc575f80fd5b80633e5e3c231461023a5780633f7286f41461024e575f80fd5b80631ed7831c116101405780631ed7831c1461019a5780632ade3880146101c457806339cd2013146101e5575f80fd5b80630a9254e4146101655780630ca524361461017b575f80fd5b3661016157005b5f80fd5b348015610170575f80fd5b50610179610441565b005b348015610186575f80fd5b50610179610195366004612dc2565b6104f0565b3480156101a5575f80fd5b506101ae610637565b6040516101bb9190612dd9565b60405180910390f35b3480156101cf575f80fd5b506101d86106a4565b6040516101bb9190612e7d565b3480156101f0575f80fd5b5060235460245460255461021292600281810b936301000000909204900b9184565b60408051600295860b81529390940b60208401529282015260608101919091526080016101bb565b348015610245575f80fd5b506101ae6107ed565b348015610259575f80fd5b506101ae610858565b34801561026d575f80fd5b506102766108c3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bb565b3480156102a6575f80fd5b506102af6108e5565b6040516101bb9190612feb565b3480156102c7575f80fd5b506101796102d6366004612dc2565b610a5e565b3480156102e6575f80fd5b506102ef610c74565b6040516101bb9190613087565b348015610307575f80fd5b50610310610d3f565b6040516101bb91906130fc565b348015610328575f80fd5b5060205460215460225461021292600281810b936301000000909204900b9184565b348015610355575f80fd5b50610310610e42565b348015610369575f80fd5b506026546027546028546103959260ff16919073ffffffffffffffffffffffffffffffffffffffff1683565b604080519315158452602084019290925273ffffffffffffffffffffffffffffffffffffffff16908201526060016101bb565b3480156103d3575f80fd5b506102ef610f45565b3480156103e7575f80fd5b506103f0611010565b60405190151581526020016101bb565b34801561040b575f80fd5b506102766110e0565b34801561041f575f80fd5b506101ae6110f0565b348015610433575f80fd5b50601f546103f09060ff1681565b61044a5f61115b565b602b5460405173ffffffffffffffffffffffffffffffffffffffff9091169061047290612d1a565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156104a8573d5f803e3d5ffd5b50604480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b602b5461051890829060019073ffffffffffffffffffffffffffffffffffffffff16316118ba565b604480546040517f3902802f0000000000000000000000000000000000000000000000000000000081525f60048201526024810184905292935073ffffffffffffffffffffffffffffffffffffffff1691633902802f91015f604051808303815f87803b158015610587575f80fd5b505af1158015610599573d5f803e3d5ffd5b5050505061063460445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3b974ce6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062e919061319e565b5f61190e565b50565b6060601680548060200260200160405190810160405280929190818152602001828054801561069a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161066f575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b828210156107e4575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b828210156107cd578382905f5260205f20018054610742906131b5565b80601f016020809104026020016040519081016040528092919081815260200182805461076e906131b5565b80156107b95780601f10610790576101008083540402835291602001916107b9565b820191905f5260205f20905b81548152906001019060200180831161079c57829003601f168201915b505050505081526020019060010190610725565b5050505081525050815260200190600101906106c7565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561069a57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161066f575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561069a57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161066f575050505050905090565b6108e2600173fffd8963efd1fc6a506488495d951d5263988d26613233565b81565b6060601b805480602002602001604051908101604052809291908181526020015f905b828210156107e4578382905f5260205f2090600202016040518060400160405290815f82018054610938906131b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610964906131b5565b80156109af5780601f10610986576101008083540402835291602001916109af565b820191905f5260205f20905b81548152906001019060200180831161099257829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610a4657602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116109f35790505b50505050508152505081526020019060010190610908565b602b54602954610a95918391600191610a909173ffffffffffffffffffffffffffffffffffffffff9081169116611991565b6118ba565b602954604480546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529394509091169163095ea7b391016020604051808303815f875af1158015610b2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b53919061325f565b50604480546029546040517f3902802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052911691633902802f91015f604051808303815f87803b158015610bc6575f80fd5b505af1158015610bd8573d5f803e3d5ffd5b5050505061063460445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3b974ce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6d919061319e565b600161190e565b6060601a805480602002602001604051908101604052809291908181526020015f905b828210156107e4578382905f5260205f20018054610cb4906131b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce0906131b5565b8015610d2b5780601f10610d0257610100808354040283529160200191610d2b565b820191905f5260205f20905b815481529060010190602001808311610d0e57829003601f168201915b505050505081526020019060010190610c97565b6060601d805480602002602001604051908101604052809291908181526020015f905b828210156107e4575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015610e2a57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610dd75790505b50505050508152505081526020019060010190610d62565b6060601c805480602002602001604051908101604052809291908181526020015f905b828210156107e4575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015610f2d57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610eda5790505b50505050508152505081526020019060010190610e65565b60606019805480602002602001604051908101604052809291908181526020015f905b828210156107e4578382905f5260205f20018054610f85906131b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb1906131b5565b8015610ffc5780601f10610fd357610100808354040283529160200191610ffc565b820191905f5260205f20905b815481529060010190602001808311610fdf57829003601f168201915b505050505081526020019060010190610f68565b6008545f9060ff1615611027575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa1580156110b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d9919061319e565b1415905090565b6108e26401000276a3600161327e565b6060601580548060200260200160405190810160405280929190818152602001828054801561069a57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161066f575050505050905090565b611163611a62565b61116b61204b565b5050602954602a546111a89173ffffffffffffffffffffffffffffffffffffffff908116911683610bb86c010000000000000000000000006120cc565b508051603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416179091556020808401516037805460408088015160608901519488167fffffffffffffffffff0000000000000000000000000000000000000000000000909316929092177401000000000000000000000000000000000000000062ffffff93841602177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000009290941691909102929092179055608090940151603880549093169084161790915560345483517fc34c08e5000000000000000000000000000000000000000000000000000000008152935192169263c34c08e592600480830193928290030181865afa1580156112fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132091906132cb565b6040517f1b9ec89e00000000000000000000000000000000000000000000000000000000815260365473ffffffffffffffffffffffffffffffffffffffff9081166004830152603754808216602484015262ffffff60a082901c16604484015260b81c60020b6064830152603854811660848301529190911690631b9ec89e9060a4015f604051808303815f87803b1580156113ba575f80fd5b505af11580156113cc573d5f803e3d5ffd5b5050602a5461140f92505f915073ffffffffffffffffffffffffffffffffffffffff1683610bb86c01000000000000000000000000670de0b6b3a76400006121c0565b5060395f829190505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548162ffffff021916908362ffffff16021790555060608201518160010160176101000a81548162ffffff021916908360020b62ffffff1602179055506080820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506036603c5f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160149054906101000a900462ffffff168160010160146101000a81548162ffffff021916908362ffffff1602179055506001820160179054906101000a900460020b8160010160176101000a81548162ffffff021916908360020b62ffffff160217905550600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050506039603f5f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160149054906101000a900462ffffff168160010160146101000a81548162ffffff021916908362ffffff1602179055506001820160179054906101000a900460020b8160010160176101000a81548162ffffff021916908360020b62ffffff160217905550600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050506064603c60010160146101000a81548162ffffff021916908362ffffff1602179055506064603f60010160146101000a81548162ffffff021916908362ffffff16021790555050565b5f6118c68484846122b5565b90506119076040518060400160405280600c81526020017f426f756e6420726573756c740000000000000000000000000000000000000000815250826124e9565b9392505050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015f6040518083038186803b158015611977575f80fd5b505afa158015611989573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff83166119cb575073ffffffffffffffffffffffffffffffffffffffff811631611a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906370a0823190602401602060405180830381865afa158015611a35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a59919061319e565b90505b92915050565b611a6a61257e565b602b5460405173ffffffffffffffffffffffffffffffffffffffff90911690611a9290612d28565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611ac8573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611b1c90612d36565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611b52573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611ba690612d44565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611bdc573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611c3090612d52565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611c66573d5f803e3d5ffd5b50602d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611cba90612d60565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611cf0573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611d4490612d6e565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611d7a573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611dce90612d7c565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611e04573d5f803e3d5ffd5b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611e5890612d8a565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611e8e573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560408051808201909152600d81527f666565436f6e74726f6c6c6572000000000000000000000000000000000000006020820152611f1190612609565b603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611f6490612d98565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611f9a573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b546035546040517f2d7713890000000000000000000000000000000000000000000000000000000081529083166004820152911690632d771389906024015f604051808303815f87803b158015612033575f80fd5b505af1158015612045573d5f803e3d5ffd5b50505050565b5f805f61205661261a565b90505f61206161261a565b905061206d828261286f565b602a805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255602980549490931693168317909155909590945092505050565b6040805160a0810182525f8082526020820181905291810182905260608101829052608081018290529061210387878787876128bc565b602c54919350915073ffffffffffffffffffffffffffffffffffffffff16635a6bcfda348460205f6040519080825280601f01601f191660200182016040528015612155576020820181803683370190505b506040518563ffffffff1660e01b815260040161217493929190613313565b60206040518083038185885af1158015612190573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906121b5919061319e565b509550959350505050565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101829052906121f788888888886128bc565b602c54919350915073ffffffffffffffffffffffffffffffffffffffff16635a6bcfda848460205f6040519080825280601f01601f191660200182016040528015612249576020820181803683370190505b506040518563ffffffff1660e01b815260040161226893929190613313565b60206040518083038185885af1158015612284573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906122a9919061319e565b50965096945050505050565b5f8183111561234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e0000606482015260840160405180910390fd5b82841015801561235a5750818411155b15612366575082611907565b5f61237184846133e0565b61237c9060016133f3565b90506003851115801561238e57508481115b156123a55761239d85856133f3565b915050611907565b6123d060037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133e0565b85101580156124075750612404857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133e0565b81115b1561244057612436857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133e0565b61239d90846133e0565b82851115612493575f61245384876133e0565b90505f6124608383613433565b9050805f0361247457849350505050611907565b600161248082886133f3565b61248a91906133e0565b935050506124e1565b838510156124e1575f6124a686866133e0565b90505f6124b38383613433565b9050805f036124c757859350505050611907565b6124d181866133e0565b6124dc9060016133f3565b935050505b509392505050565b61257a82826040516024016124ff929190613446565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc00000000000000000000000000000000000000000000000000000000179052612a0d565b5050565b3060405161258b90612da6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156125c1573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f61261382612a16565b5092915050565b5f8061264760017f8000000000000000000000000000000000000000000000000000000000000000612b71565b5f8151811061265857612658613467565b6020908102919091018101516040805161012081018252602f5473ffffffffffffffffffffffffffffffffffffffff9081168252602e54811682860152602c54811682840152602d548116606083015260305481166080830152603154811660a0830152603354811660c083015260345483517fc34c08e500000000000000000000000000000000000000000000000000000000815293519496505f95929460e0860194919092169263c34c08e5926004808401938290030181865afa158015612724573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274891906132cb565b73ffffffffffffffffffffffffffffffffffffffff90811682526032541660209091015290505f5b6009811015612867578273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38383600981106127a7576127a7613467565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201526044016020604051808303815f875af115801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e919061325f565b50600101612770565b509092915050565b5f808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610156128af5750829050816128b5565b50819050825b9250929050565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091526040805160a08101825273ffffffffffffffffffffffffffffffffffffffff80891682528716602082015262ffffff85169181018290525f916060820190628000001461294857612938606487613494565b6129439060026134b9565b61294b565b603c5b60020b815273ffffffffffffffffffffffffffffffffffffffff871660209091015260a08120909250602b546040517f6276cbbe00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690636276cbbe906129cd90859087906004016134d7565b6020604051808303815f875af11580156129e9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b5919061357d565b61063481612cfa565b5f8082604051602001612a29919061359d565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fffa18649000000000000000000000000000000000000000000000000000000008252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015612ac6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aea91906132cb565b6040517fc657c718000000000000000000000000000000000000000000000000000000008152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890612b3f90859087906004016135b3565b5f604051808303815f87803b158015612b56575f80fd5b505af1158015612b68573d5f803e3d5ffd5b50505050915091565b60608260ff1667ffffffffffffffff811115612b8f57612b8f6132e6565b604051908082528060200260200182016040528015612bb8578160200160208202803683370190505b5090505f5b8360ff168160ff161015612613576012604051612bd990612db4565b612be391906135e9565b604051809103905ff080158015612bfc573d5f803e3d5ffd5b50828260ff1681518110612c1257612c12613467565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160ff1681518110612c6157612c61613467565b60209081029190910101516040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015f604051808303815f87803b158015612cd8575f80fd5b505af1158015612cea573d5f803e3d5ffd5b505060019092019150612bbd9050565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b611a9d806200367483390190565b611fad806200511183390190565b6110af80620070be83390190565b611c3d806200816d83390190565b6115088062009daa83390190565b611793806200b2b283390190565b61128f806200ca4583390190565b610da4806200dcd483390190565b615387806200ea7883390190565b6128fb8062013dff83390190565b616a0580620166fa83390190565b611168806201d0ff83390190565b5f60208284031215612dd2575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b81811015612e2657835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612df2565b509095945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612f83577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b81811015612f69577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352612f53848651612e31565b6020958601959094509290920191600101612f19565b509197505050602094850194929092019150600101612ea3565b50929695505050505050565b5f8151808452602084019350602083015f5b82811015612fe15781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101612fa1565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612f83577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526130556040880182612e31565b90506020820151915086810360208801526130708183612f8f565b965050506020938401939190910190600101613011565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612f83577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526130e7858351612e31565b945060209384019391909101906001016130ad565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612f83577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff815116865260208101519050604060208701526131886040870182612f8f565b9550506020938401939190910190600101613122565b5f602082840312156131ae575f80fd5b5051919050565b600181811c908216806131c957607f821691505b602082108103613200577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8281168282160390811115611a5c57611a5c613206565b5f6020828403121561326f575f80fd5b81518015158114611907575f80fd5b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115611a5c57611a5c613206565b73ffffffffffffffffffffffffffffffffffffffff81168114610634575f80fd5b5f602082840312156132db575f80fd5b8151611907816132aa565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613392818573ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b5f83548060020b60a08401528060181c60020b60c084015250600184015460e083015260028401546101008301526101406101208301526133d7610140830184612e31565b95945050505050565b81810381811115611a5c57611a5c613206565b80820180821115611a5c57611a5c613206565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261344157613441613406565b500690565b604081525f6134586040830185612e31565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f62ffffff8316806134a8576134a8613406565b8062ffffff84160491505092915050565b62ffffff818116838216029081169081811461261357612613613206565b60c0810161355a828573ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b73ffffffffffffffffffffffffffffffffffffffff831660a08301529392505050565b5f6020828403121561358d575f80fd5b81518060020b8114611907575f80fd5b5f82518060208501845e5f920191825250919050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6135e16040830184612e31565b949350505050565b606081525f61362560608301600481527f5445535400000000000000000000000000000000000000000000000000000000602082015260400190565b828103602084015261366181600481527f5445535400000000000000000000000000000000000000000000000000000000602082015260400190565b91505060ff831660408301529291505056fe60a0604052600c8054600160ff199182168117909255601f80549091169091179055348015602b575f80fd5b50604051611a9d380380611a9d8339810160408190526048916058565b6001600160a01b03166080526083565b5f602082840312156067575f80fd5b81516001600160a01b0381168114607c575f80fd5b9392505050565b6080516119d86100c55f395f81816102a00152818161053001528181610f1c0152818161104c015281816110c001528181611161015261123201526119d85ff3fe6080604052600436106100f2575f3560e01c806391dd734611610087578063c3b974ce11610057578063c3b974ce1461026c578063dc4c90d31461028f578063e20c9f71146102e7578063fa7626d4146102fb575f80fd5b806391dd7346146101f4578063b0464fdc14610220578063b5508aa914610234578063ba414fa614610248575f80fd5b80633f7286f4116100c25780633f7286f41461017d57806366d9a9a01461019157806385226c81146101b2578063916a17c6146101d3575f80fd5b80631ed7831c146100fd5780632ade3880146101275780633902802f146101485780633e5e3c2314610169575f80fd5b366100f957005b5f80fd5b348015610108575f80fd5b50610111610314565b60405161011e91906112c5565b60405180910390f35b348015610132575f80fd5b5061013b610381565b60405161011e9190611369565b348015610153575f80fd5b5061016761016236600461149f565b6104ca565b005b348015610174575f80fd5b506101116105c9565b348015610188575f80fd5b50610111610634565b34801561019c575f80fd5b506101a561069f565b60405161011e9190611525565b3480156101bd575f80fd5b506101c6610818565b60405161011e91906115c1565b3480156101de575f80fd5b506101e76108e3565b60405161011e9190611636565b3480156101ff575f80fd5b5061021361020e3660046116d8565b6109e6565b60405161011e9190611746565b34801561022b575f80fd5b506101e7610ae4565b34801561023f575f80fd5b506101c6610be7565b348015610253575f80fd5b5061025c610cb2565b604051901515815260200161011e565b348015610277575f80fd5b5061028160205481565b60405190815260200161011e565b34801561029a575f80fd5b506102c27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011e565b3480156102f2575f80fd5b50610111610d82565b348015610306575f80fd5b50601f5461025c9060ff1681565b6060601680548060200260200160405190810160405280929190818152602001828054801561037757602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161034c575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b828210156104c1575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b828210156104aa578382905f5260205f2001805461041f9061175f565b80601f016020809104026020016040519081016040528092919081815260200182805461044b9061175f565b80156104965780601f1061046d57610100808354040283529160200191610496565b820191905f5260205f20905b81548152906001019060200180831161047957829003601f168201915b505050505081526020019060010190610402565b5050505081525050815260200190600101906103a4565b50505050905090565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166020830152338284015260608083018590528351808403909101815260808301938490527f48c89491000000000000000000000000000000000000000000000000000000009093527f000000000000000000000000000000000000000000000000000000000000000016916348c89491916105649190608401611746565b5f604051808303815f875af115801561057f573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105c491908101906117dd565b505050565b6060601880548060200260200160405190810160405280929190818152602001828054801561037757602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161034c575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561037757602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161034c575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020015f905b828210156104c1578382905f5260205f2090600202016040518060400160405290815f820180546106f29061175f565b80601f016020809104026020016040519081016040528092919081815260200182805461071e9061175f565b80156107695780601f1061074057610100808354040283529160200191610769565b820191905f5260205f20905b81548152906001019060200180831161074c57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561080057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116107ad5790505b505050505081525050815260200190600101906106c2565b6060601a805480602002602001604051908101604052809291908181526020015f905b828210156104c1578382905f5260205f200180546108589061175f565b80601f01602080910402602001604051908101604052809291908181526020018280546108849061175f565b80156108cf5780601f106108a6576101008083540402835291602001916108cf565b820191905f5260205f20905b8154815290600101906020018083116108b257829003601f168201915b50505050508152602001906001019061083b565b6060601d805480602002602001604051908101604052809291908181526020015f905b828210156104c1575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001810180548351818702810187019094528084529394919385830193928301828280156109ce57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161097b5790505b50505050508152505081526020019060010190610906565b60605f80806109f7858701876118cd565b919450925090505f73ffffffffffffffffffffffffffffffffffffffff841615610a215782610a23565b305b90505f610a4673ffffffffffffffffffffffffffffffffffffffff861683610ded565b9050610a53858385610ebc565b5f610a7473ffffffffffffffffffffffffffffffffffffffff871684610ded565b9050610a89610a838584611938565b82610f78565b809150610a97868486610ffb565b610ab773ffffffffffffffffffffffffffffffffffffffff871684610ded565b9050610ac6610a83858461194b565b60405180602001604052805f81525096505050505050505b92915050565b6060601c805480602002602001604051908101604052809291908181526020015f905b828210156104c1575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015610bcf57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610b7c5790505b50505050508152505081526020019060010190610b07565b60606019805480602002602001604051908101604052809291908181526020015f905b828210156104c1578382905f5260205f20018054610c279061175f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c539061175f565b8015610c9e5780601f10610c7557610100808354040283529160200191610c9e565b820191905f5260205f20905b815481529060010190602001808311610c8157829003601f168201915b505050505081526020019060010190610c0a565b6008545f9060ff1615610cc9575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015610d57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7b919061195e565b1415905090565b6060601580548060200260200160405190810160405280929190818152602001828054801561037757602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161034c575050505050905090565b5f73ffffffffffffffffffffffffffffffffffffffff8316610e27575073ffffffffffffffffffffffffffffffffffffffff811631610ade565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906370a0823190602401602060405180830381865afa158015610e91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb5919061195e565b9050610ade565b805f03610ec857505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b158015610f5d575f80fd5b505af1158015610f6f573d5f803e3d5ffd5b50505050505050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015f6040518083038186803b158015610fe1575f80fd5b505afa158015610ff3573d5f803e3d5ffd5b505050505050565b805f0361100757505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b15801561108d575f80fd5b505af115801561109f573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff8316611154577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af1158015611129573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061114e919061195e565b50505050565b61115f8383836111ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af11580156111c9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114e919061195e565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018390528416906323b872dd906064016020604051808303815f875af1158015611287573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ab9190611975565b5060208054905f6112bb83611994565b9190505550505050565b602080825282518282018190525f918401906040840190835b8181101561131257835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016112de565b509095945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561146f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b81811015611455577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261143f84865161131d565b6020958601959094509290920191600101611405565b50919750505060209485019492909201915060010161138f565b50929695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461149c575f80fd5b50565b5f80604083850312156114b0575f80fd5b82356114bb8161147b565b946020939093013593505050565b5f8151808452602084019350602083015f5b8281101561151b5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016114db565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561146f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261158f604088018261131d565b90506020820151915086810360208801526115aa81836114c9565b96505050602093840193919091019060010161154b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561146f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261162185835161131d565b945060209384019391909101906001016115e7565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561146f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff815116865260208101519050604060208701526116c260408701826114c9565b955050602093840193919091019060010161165c565b5f80602083850312156116e9575f80fd5b823567ffffffffffffffff8111156116ff575f80fd5b8301601f8101851361170f575f80fd5b803567ffffffffffffffff811115611725575f80fd5b856020828401011115611736575f80fd5b6020919091019590945092505050565b602081525f611758602083018461131d565b9392505050565b600181811c9082168061177357607f821691505b6020821081036117aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f602082840312156117ed575f80fd5b815167ffffffffffffffff811115611803575f80fd5b8201601f81018413611813575f80fd5b805167ffffffffffffffff81111561182d5761182d6117b0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611899576118996117b0565b6040528181528282016020018610156118b0575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f805f60608486031215