0 txs
1 call
constructor
constructor(address _kailuaTreasury, uint256 _genesisTimeStamp, uint256 _l2BlockTime, uint64 _maxClockDuration)
functions
blobsHash
viewfunction blobsHash() view returns (bytes32 blobsHash_)
childCount
viewfunction childCount() view returns (uint256 count_)
children
viewfunction children(uint256) view returns (address)
contenderDuplicates
viewfunction contenderDuplicates(uint256) view returns (uint64)
contenderIndex
viewfunction contenderIndex() view returns (uint64)
createdAt
viewfunction createdAt() view returns (uint64)
DISPUTE_GAME_FACTORY
viewfunction DISPUTE_GAME_FACTORY() view returns (address)
duplicationCounter
purefunction duplicationCounter() pure returns (uint64 duplicationCounter_)
extraData
purefunction extraData() pure returns (bytes extraData_)
FPVM_IMAGE_ID
viewfunction FPVM_IMAGE_ID() view returns (bytes32)
GAME_TYPE
viewfunction GAME_TYPE() view returns (uint32)
gameCreator
purefunction gameCreator() pure returns (address creator_)
gameData
viewfunction gameData() view returns (uint32 gameType_, bytes32 rootClaim_, bytes extraData_)
gameIndex
viewfunction gameIndex() view returns (uint256)
gameType
viewfunction gameType() view returns (uint32 gameType_)
GENESIS_TIME_STAMP
viewfunction GENESIS_TIME_STAMP() view returns (uint256)
getChallengerDuration
viewfunction getChallengerDuration(uint256 asOfTimestamp) view returns (uint64 duration_)
isViableSignature
viewfunction isViableSignature(bytes32 childSignature) view returns (bool isViableSignature_)
KAILUA_TREASURY
viewfunction KAILUA_TREASURY() view returns (address)
l1Head
purefunction l1Head() pure returns (bytes32 l1Head_)
L2_BLOCK_TIME
viewfunction L2_BLOCK_TIME() view returns (uint256)
l2BlockNumber
purefunction l2BlockNumber() pure returns (uint256 l2BlockNumber_)
MAX_CLOCK_DURATION
viewfunction MAX_CLOCK_DURATION() view returns (uint64)
minCreationTime
viewfunction minCreationTime() view returns (uint64 minCreationTime_)
opponentIndex
viewfunction opponentIndex() view returns (uint64)
OPTIMISM_PORTAL
viewfunction OPTIMISM_PORTAL() view returns (address)
OUTPUT_BLOCK_SPAN
viewfunction OUTPUT_BLOCK_SPAN() view returns (uint64)
parentGame
viewfunction parentGame() view returns (address parentGame_)
parentGameIndex
purefunction parentGameIndex() pure returns (uint64 parentGameIndex_)
proofStatus
viewfunction proofStatus(bytes32) view returns (uint8)
PROPOSAL_BLOBS
viewfunction PROPOSAL_BLOBS() view returns (uint64)
PROPOSAL_OUTPUT_COUNT
viewfunction PROPOSAL_OUTPUT_COUNT() view returns (uint64)
proposalBlobHashes
viewfunction proposalBlobHashes(uint256) view returns (bytes32)
proposer
viewfunction proposer() view returns (address proposer_)
provenAt
viewfunction provenAt(bytes32) view returns (uint64)
prover
viewfunction prover(bytes32) view returns (address)
resolvedAt
viewfunction resolvedAt() view returns (uint64)
RISC_ZERO_VERIFIER
viewfunction RISC_ZERO_VERIFIER() view returns (address)
ROLLUP_CONFIG_HASH
viewfunction ROLLUP_CONFIG_HASH() view returns (bytes32)
rootClaim
purefunction rootClaim() pure returns (bytes32 rootClaim_)
signature
viewfunction signature() view returns (bytes32 signature_)
status
viewfunction status() view returns (uint8)
validChildSignature
viewfunction validChildSignature() view returns (bytes32)
version
viewfunction version() view returns (string)
wasRespectedGameTypeWhenCreated
viewfunction wasRespectedGameTypeWhenCreated() view returns (bool)
appendChild
nonpayablefunction appendChild()
initialize
payablefunction initialize() payable
proveOutputFault
nonpayablefunction proveOutputFault(address[2] prHs, uint64[2] co, bytes encodedSeal, bytes32[2] ac, uint256 proposedOutputFe, bytes[][2] kzgCommitmentsProofs)
proveTrailFault
nonpayablefunction proveTrailFault(address payoutRecipient, uint64[2] co, uint256 proposedOutputFe, bytes blobCommitment, bytes kzgProof)
proveValidity
nonpayablefunction proveValidity(address payoutRecipient, address l1HeadSource, uint64 childIndex, bytes encodedSeal)
pruneChildren
nonpayablefunction pruneChildren(uint256 stepLimit) returns (address)
resolve
nonpayablefunction resolve() returns (uint8 status_)
verifyIntermediateOutput
nonpayablefunction verifyIntermediateOutput(uint64 outputNumber, uint256 outputFe, bytes blobCommitment, bytes kzgProof) returns (bool success)
events
Proven
event Proven(bytes32 indexed signature, uint8 indexed status)
Resolved
event Resolved(uint8 indexed status)
errors
AlreadyInitialized
error AlreadyInitialized()
AlreadyProven
error AlreadyProven()
BadExtraData
error BadExtraData()
Blacklisted
error Blacklisted(address source, address expected)
BlobHashMissing
error BlobHashMissing(uint256 index, uint256 count)
BlockNumberMismatch
error BlockNumberMismatch(uint256 anchored, uint256 initialized)
ClaimAlreadyResolved
error ClaimAlreadyResolved()
ClockNotExpired
error ClockNotExpired()
GameNotInProgress
error GameNotInProgress()
GameNotResolved
error GameNotResolved()
InvalidDataRemainder
error InvalidDataRemainder()
InvalidDisputedClaimIndex
error InvalidDisputedClaimIndex()
InvalidDuplicationCounter
error InvalidDuplicationCounter()
InvalidParent
error InvalidParent()
NoConflict
error NoConflict()
NotProposed
error NotProposed()
NotProven
error NotProven()
OutOfOrderResolution
error OutOfOrderResolution()
ProposalGapRemaining
error ProposalGapRemaining(uint256 currentTime, uint256 minCreationTime)
ProvenFaulty
error ProvenFaulty()
UnknownGame
error UnknownGame()
creation bytecode
0x61022060405234801562000011575f80fd5b50604051620059eb380380620059eb83398101604081905262000034916200045d565b83846001600160a01b031663f3c0ce226040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000989190620004ab565b856001600160a01b031663971805d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000fb9190620004d0565b866001600160a01b0316632a6375da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000138573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200015e9190620004d0565b876001600160a01b031663cfa451286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001c19190620004e8565b886001600160a01b0316638e8abdb16040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002249190620004e8565b896001600160a01b031663dbbf2c476040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000261573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000287919062000506565b8a6001600160a01b03166385734ee16040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ea9190620004ab565b6001600160a01b03808916608052871660a05260c086905260e08590526001600160401b03808516610100528316610120528362000328816200053f565b94506200033a90506110008562000577565b6001600160401b0316156200035157600162000353565b5f5b60ff1662000364611000866200059f565b620003709190620005c7565b6001600160401b03166101405263ffffffff8216610160526001600160a01b0381166101808190526040805163f2b4e61760e01b8152905163f2b4e617916004808201926020929091908290030181865afa158015620003d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003f89190620004ab565b6001600160a01b03166101a0525050506101e097909752505050610200929092526001600160401b03166101c05250620005f1915050565b6001600160a01b038116811462000445575f80fd5b50565b6001600160401b038116811462000445575f80fd5b5f805f806080858703121562000471575f80fd5b84516200047e8162000430565b8094505060208501519250604085015191506060850151620004a08162000448565b939692955090935050565b5f60208284031215620004bc575f80fd5b8151620004c98162000430565b9392505050565b5f60208284031215620004e1575f80fd5b5051919050565b5f60208284031215620004f9575f80fd5b8151620004c98162000448565b5f6020828403121562000517575f80fd5b815163ffffffff81168114620004c9575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f6001600160401b038216806200055a576200055a6200052b565b5f190192915050565b634e487b7160e01b5f52601260045260245ffd5b5f6001600160401b038381168062000593576200059362000563565b92169190910692915050565b5f6001600160401b0383811680620005bb57620005bb62000563565b92169190910492915050565b6001600160401b03818116838216019080821115620005ea57620005ea6200052b565b5092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161524d6200079e5f395f818161034e015261141c01525f8181610766015261145901525f8181610a9c015261391401525f81816107a101528181610ba201528181612a51015261446201525f81816107d4015261450c01525f818161099001528181610a6901528181612a7e0152818161395d01526144dc01525f8181610acf0152818161174d01528181612cd00152612d4201525f818161083f01528181611c8001528181612b4d0152613ee001525f8181610a360152818161167301528181611c2201528181611c5f01528181611e2c01528181612b6e0152818161322d01526134af01525f81816104ef0152613fa201525f818161087201528181613fc8015261403301525f8181610b02015261400201525f818161092b0152818161112c0152818161119e015281816121ae015281816122e7015281816124200152818161285e01528181612de30152818161381901528181613dec0152818161413f015281816141e50152818161435c01526143d6015261524d5ff3fe608060405260043610610339575f3560e01c8063716e5b4a116101b2578063a8e4fb90116100f2578063cfa4512811610092578063dce87e681161006d578063dce87e6814610abe578063f3c0ce2214610af1578063fa24f74314610b24578063fcddca9814610b47575f80fd5b8063cfa4512814610a25578063dbbf2c4714610a58578063dce6d9aa14610a8b575f80fd5b8063bbdc02db116100cd578063bbdc02db14610982578063bcef3b55146109c5578063bd8da956146109e6578063cf09e0d014610a05575f80fd5b8063a8e4fb9014610906578063afdaec501461091a578063b84c27861461094d575f80fd5b80638b85902b1161015d578063971805d811610138578063971805d814610861578063a09159a614610894578063a401bc8c146108b3578063a8754594146108d2575f80fd5b80638b85902b146107f65780638bc3bbc01461081a5780638e8abdb11461082e575f80fd5b80638129fc1c1161018d5780638129fc1c1461078857806382ff53a11461079057806385734ee1146107c3575f80fd5b8063716e5b4a14610720578063768c720414610735578063810c76dc14610755575f80fd5b80634614d4701161027d5780635b5b399c1161022857806369d5324d1161020357806369d5324d146106955780636e023443146106b45780637002ce42146106e257806370a87a9814610701575f80fd5b80635b5b399c1461063c578063609d3334146106605780636361506d14610674575f80fd5b806351ff48471161025857806351ff4847146105be57806354fd4d50146105d25780635654a34114610627575f80fd5b80634614d470146105675780634c6f84141461058b5780634dafd7891461059f575f80fd5b8063200d2ed2116102e85780632a6375da116102c35780632a6375da146104de5780632a6648741461051157806337b1b22914610527578063429e88d014610548575f80fd5b8063200d2ed214610462578063250e69bd1461049c5780632810e1d6146104ca575f80fd5b80631bbd66f3116103185780631bbd66f3146103e75780631d9e47f4146104075780631e24fdd514610433575f80fd5b80622134cc1461033d578063077fb4691461038357806319effeb4146103bb575b5f80fd5b348015610348575f80fd5b506103707f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561038e575f80fd5b506103a261039d36600461470a565b610b5b565b60405167ffffffffffffffff909116815260200161037a565b3480156103c6575f80fd5b50600a546103a29068010000000000000000900467ffffffffffffffff1681565b3480156103f2575f80fd5b506008546103a29067ffffffffffffffff1681565b348015610412575f80fd5b5061041b610b96565b6040516001600160a01b03909116815260200161037a565b34801561043e575f80fd5b5061045261044d36600461477e565b610c61565b604051901515815260200161037a565b34801561046d575f80fd5b50600a5461048f90700100000000000000000000000000000000900460ff1681565b60405161037a9190614866565b3480156104a7575f80fd5b50600a546104529071010000000000000000000000000000000000900460ff1681565b3480156104d5575f80fd5b5061048f610ce9565b3480156104e9575f80fd5b506103707f000000000000000000000000000000000000000000000000000000000000000081565b34801561051c575f80fd5b5061052561119c565b005b348015610532575f80fd5b503660011981013560f01c90033560601c61041b565b348015610553575f80fd5b5061037061056236600461470a565b6113f8565b348015610572575f80fd5b503660011981013560f01c9003605c013560c01c6103a2565b348015610596575f80fd5b506103a2611416565b3480156105aa575f80fd5b506105256105b936600461489d565b61147d565b3480156105c9575f80fd5b50610370611935565b3480156105dd575f80fd5b5061061a6040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161037a9190614981565b348015610632575f80fd5b5061037060015481565b348015610647575f80fd5b503660011981013560f01c90036064013560c01c6103a2565b34801561066b575f80fd5b5061061a6119bb565b34801561067f575f80fd5b503660011981013560f01c900360340135610370565b3480156106a0575f80fd5b506105256106af36600461499a565b6119c9565b3480156106bf575f80fd5b5061048f6106ce36600461470a565b60046020525f908152604090205460ff1681565b3480156106ed575f80fd5b5061041b6106fc36600461470a565b611e60565b34801561070c575f80fd5b5061041b61071b36600461470a565b611e88565b34801561072b575f80fd5b5061037060095481565b348015610740575f80fd5b506006546103a29067ffffffffffffffff1681565b348015610760575f80fd5b506103707f000000000000000000000000000000000000000000000000000000000000000081565b610525612988565b34801561079b575f80fd5b5061041b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ce575f80fd5b5061041b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610801575f80fd5b503660011981013560f01c90036054013560c01c610370565b348015610825575f80fd5b50600554610370565b348015610839575f80fd5b506103a27f000000000000000000000000000000000000000000000000000000000000000081565b34801561086c575f80fd5b506103707f000000000000000000000000000000000000000000000000000000000000000081565b34801561089f575f80fd5b506104526108ae36600461470a565b612ff7565b3480156108be575f80fd5b506105256108cd366004614a67565b613037565b3480156108dd575f80fd5b5061041b6108ec36600461470a565b60026020525f90815260409020546001600160a01b031681565b348015610911575f80fd5b5061041b6137e9565b348015610925575f80fd5b5061041b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610958575f80fd5b506103a261096736600461470a565b60036020525f908152604090205467ffffffffffffffff1681565b34801561098d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405163ffffffff909116815260200161037a565b3480156109d0575f80fd5b503660011981013560f01c900360140135610370565b3480156109f1575f80fd5b506103a2610a0036600461470a565b61388a565b348015610a10575f80fd5b50600a546103a29067ffffffffffffffff1681565b348015610a30575f80fd5b506103a27f000000000000000000000000000000000000000000000000000000000000000081565b348015610a63575f80fd5b506109b07f000000000000000000000000000000000000000000000000000000000000000081565b348015610a96575f80fd5b506103a27f000000000000000000000000000000000000000000000000000000000000000081565b348015610ac9575f80fd5b506103a27f000000000000000000000000000000000000000000000000000000000000000081565b348015610afc575f80fd5b5061041b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b2f575f80fd5b50610b38613957565b60405161037a93929190614b45565b348015610b52575f80fd5b50610370613a49565b60078181548110610b6a575f80fd5b905f5260205f209060049182820401919006600802915054906101000a900467ffffffffffffffff1681565b5f806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663bb8aa1fc3660011981013560f01c9003605c013560c01c6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401606060405180830381865afa158015610c35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c599190614b7c565b949350505050565b5f80610c768867ffffffffffffffff16613a5d565b90505f610c8c8967ffffffffffffffff16613a70565b90505f610c998888613a7d565b9050610cbc5f8481548110610cb057610cb0614bc3565b905f5260205f20015490565b8114610cca575f9350610cdc565b610cd981838b8b8b8b8b613b0c565b93505b5050509695505050505050565b5f80600a54700100000000000000000000000000000000900460ff166002811115610d1657610d16614804565b14610d4d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610d56610b96565b90506002816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dba9190614bf0565b6002811115610dcb57610dcb614804565b14610e02576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663716e5b4a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e629190614c0e565b15610f0b57806001600160a01b031663716e5b4a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec79190614c0e565b610ecf611935565b14610f06576040517f5e22e58200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f67565b5f610f25610f184261388a565b67ffffffffffffffff1690565b67ffffffffffffffff161115610f67576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b306001600160a01b0316816001600160a01b03166370a87a98836001600160a01b0316638bc3bbc06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe09190614c0e565b610feb906002614c52565b6040518263ffffffff1660e01b815260040161100991815260200190565b6020604051808303815f875af1158015611025573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110499190614c69565b6001600160a01b031614611089576040517fa506d33400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff161770020000000000000000000000000000000017905560029150816040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60905f90a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663817804af6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611182575f80fd5b505af1158015611194573d5f803e3d5ffd5b505050505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eb45ec0d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061121c9190614c84565b611252576040517f9d3e7d2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30330361128b576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460065467ffffffffffffffff1610801561136157506006546005805460029267ffffffffffffffff169081106112c6576112c6614bc3565b5f9182526020918290200154604080517f200d2ed200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263200d2ed2926004808401938290030181865afa15801561132a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134e9190614bf0565b600281111561135f5761135f614804565b145b15611398576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580546001810182555f919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b905090565b5f8181548110611406575f80fd5b5f91825260209091200154905081565b5f6114537f00000000000000000000000000000000000000000000000000000000000000003660011981013560f01c90036054013560c01c614c52565b6113f3907f0000000000000000000000000000000000000000000000000000000000000000614ca3565b5f600561148d6020890189614cb6565b67ffffffffffffffff16815481106114a7576114a7614bc3565b5f9182526020822001546001600160a01b03169150816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151c9190614bf0565b600281111561152d5761152d614804565b14611564576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460065467ffffffffffffffff1610801561163a57506006546005805460029267ffffffffffffffff1690811061159f5761159f614bc3565b5f9182526020918290200154604080517f200d2ed200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263200d2ed2926004808401938290030181865afa158015611603573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116279190614bf0565b600281111561163857611638614804565b145b15611671576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166116ac6040890160208a01614cb6565b67ffffffffffffffff1610156116ee576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611727576040517f7412124e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600161173a60408a0160208b01614cb6565b6117449190614cd1565b905061177160017f0000000000000000000000000000000000000000000000000000000000000000614cd1565b67ffffffffffffffff1661178e8267ffffffffffffffff16613a5d565b146117c5576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e24fdd50000000000000000000000000000000000000000000000000000000081526001600160a01b03831690631e24fdd5906118149084908b908b908b908b908b90600401614d22565b6020604051808303815f875af1158015611830573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118549190614c84565b6118bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6261642070726f706f7365644f7574707574206b7a670000000000000000000060448201526064015b60405180910390fd5b61192a89836001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119239190614c0e565b6001613c1c565b505050505050505050565b5f60026119513660011981013560f01c90036014013590565b90565b5f604051602001611963929190614d9f565b60408051601f198184030181529082905261197d91614db0565b602060405180830381855afa158015611998573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906113f39190614c0e565b60606113f360546018613d7f565b5f60058467ffffffffffffffff16815481106119e7576119e7614bc3565b5f9182526020822001546001600160a01b03169150816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614bf0565b6002811115611a6d57611a6d614804565b14611aa4576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b049190614c0e565b60095560055460065467ffffffffffffffff16108015611bdd57506006546005805460029267ffffffffffffffff16908110611b4257611b42614bc3565b5f9182526020918290200154604080517f200d2ed200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263200d2ed2926004808401938290030181865afa158015611ba6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bca9190614bf0565b6002811115611bdb57611bdb614804565b145b15611c14576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161115611dab5760023660011981013560f01c90036054013560c01c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856001600160a01b031663fcddca986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cff9190614c0e565b6040517fffffffffffffffff00000000000000000000000000000000000000000000000060c095861b8116602083015293851b841660288201529190931b9091166030820152603881019190915260580160408051601f1981840301815290829052611d6a91614db0565b602060405180830381855afa158015611d85573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611da89190614c0e565b90505b611e57868883611dc73660011981013560f01c90036014013590565b611e2a876001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e06573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194e9190614c0e565b7f00000000000000000000000000000000000000000000000000000000000000008a8a6009546002613db2565b50505050505050565b60058181548110611e6f575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f6002600a54700100000000000000000000000000000000900460ff166002811115611eb657611eb6614804565b14611eed576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005545f03611f28576040517ff2a87d5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460085460055467ffffffffffffffff92831692909116908203611f5157505f9392505050565b8167ffffffffffffffff168167ffffffffffffffff1611611f7a57611f77826001614dcb565b90505b5f60058367ffffffffffffffff1681548110611f9857611f98614bc3565b5f918252602080832090910154604080517f51ff484700000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216945084926351ff4847926004808401938290030181865afa158015612000573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120249190614c0e565b90506002826001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612064573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120889190614bf0565b600281111561209957612099614804565b036120a75750949350505050565b6120b081612ff7565b15806120c057506120c082614103565b15612536575f6120cf826142d3565b6007549091505b5f811180156120e457505f88115b15612286575f600560076120f9600185614dec565b8154811061210957612109614bc3565b905f5260205f2090600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168154811061214b5761214b614bc3565b5f918252602090912001546001600160a01b0316905061216a81614103565b612206576040517f2a90b48f0000000000000000000000000000000000000000000000000000000081526001600160a01b03828116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001690632a90b48f906044015f604051808303815f87803b1580156121ef575f80fd5b505af1158015612201573d5f803e3d5ffd5b505050505b600780548061221757612217614dff565b5f8281526020902060047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191820401805467ffffffffffffffff600860038516026101000a02191690559055508061227181614e2c565b91508861227d81614e2c565b995050506120d6565b50865f0361229a57505f9695505050505050565b6122a383614103565b61233f576040517f2a90b48f0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690632a90b48f906044015f604051808303815f87803b158015612328575f80fd5b505af115801561233a573d5f803e3d5ffd5b505050505b8661234981614e2c565b9750508394505b60055467ffffffffffffffff861610801561236a57505f87115b156124f35760058567ffffffffffffffff168154811061238c5761238c614bc3565b5f918252602090912001546001600160a01b031692506123ab83614103565b6124d457826001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240f9190614c0e565b915061241a82612ff7565b6124cf577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a90b48f84612457856142d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156124b4575f80fd5b505af11580156124c6573d5f803e3d5ffd5b505050506124d4565b6124f3565b846124de81614e60565b9550876124ea81614e2c565b98505050612350565b600680547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055612532856001614dcb565b9350505b60055467ffffffffffffffff85161080156125f457506125f460058567ffffffffffffffff168154811061256c5761256c614bc3565b5f9182526020918290200154604080517f51ff484700000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216926351ff4847926004808401938290030181865afa1580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ae9190614c0e565b1561297d575b60055467ffffffffffffffff841610801561261457505f86115b1561292a575f60058467ffffffffffffffff168154811061263757612637614bc3565b905f5260205f20015f9054906101000a90046001600160a01b03169050612724836001600160a01b031663bd8da9566126c9846001600160a01b031663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f189190614e86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa1580156126a5573d5f803e3d5ffd5b67ffffffffffffffff165f0361273a575061292a565b61274381614103565b1561274e575061290b565b5f816001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127af9190614c0e565b905082810361281c575050600780546001810182555f919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6886004820401805460039092166008026101000a67ffffffffffffffff818102199093169286160291909117905561290b565b61282581612ff7565b1561285c576040517fa506d33400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a90b48f83612895846142d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156128f2575f80fd5b505af1158015612904573d5f803e3d5ffd5b5050505050505b8261291581614e60565b93508661292181614e2c565b975050506125fa565b600880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516908117909155600554148061296f57505f86115b1561297d5750949350505050565b505f95945050505050565b61299061430e565b607236146129ca576040517f9824bdab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c90036064013560c01c8015612b3d575f6129f2606860583684614ea1565b6129fd600185614dec565b604051602001612a0f93929190614ec8565b60408051601f19818403018152908290527f5f0150cb00000000000000000000000000000000000000000000000000000000825291505f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635f0150cb90612ab9907f0000000000000000000000000000000000000000000000000000000000000000903660011981013560f01c900360140135908790600401614b45565b6040805180830381865afa158015612ad3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af79190614f01565b5090506001600160a01b038116612b3a576040517f19e3a1dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b5f612b46610b96565b9050612b927f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614f39565b67ffffffffffffffff16816001600160a01b0316638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bfc9190614c0e565b612c069190614ca3565b3660011981013560f01c90036054013560c01c14612ccc57806001600160a01b0316638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c7e9190614c0e565b3660011981013560f01c90036054013560c01c6040517feaa0996e000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016118b6565b5f5b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16811015612da85780495f819003612d6f576040517f1434391f0000000000000000000000000000000000000000000000000000000081526004810183905267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044016118b6565b5f8054600181810183559180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563019190915501612cce565b506040517fbb7ecb210000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063bb7ecb2190602401602060405180830381865afa158015612e2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4e9190614c69565b6001600160a01b031603612e8e576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663a09159a6612ea5611935565b6040518263ffffffff1660e01b8152600401612ec391815260200190565b602060405180830381865afa158015612ede573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f029190614c84565b612f38576040517f5e22e58200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b0316632a6648746040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612f70575f80fd5b505af1158015612f82573d5f803e3d5ffd5b50505050612f91610f18611416565b67ffffffffffffffff16421015612ff35742612fae610f18611416565b6040517f488d79b7000000000000000000000000000000000000000000000000000000008152600481019290925267ffffffffffffffff1660248201526044016118b6565b5050565b6009545f901561300957506009541490565b60015f8381526004602052604090205460ff16600281111561302d5761302d614804565b141590505b919050565b5f60056130476020890189614cb6565b67ffffffffffffffff168154811061306157613061614bc3565b5f9182526020822001546001600160a01b03169150816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130d69190614bf0565b60028111156130e7576130e7614804565b1461311e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460065467ffffffffffffffff161080156131f457506006546005805460029267ffffffffffffffff1690811061315957613159614bc3565b5f9182526020918290200154604080517f200d2ed200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263200d2ed2926004808401938290030181865afa1580156131bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131e19190614bf0565b60028111156131f2576131f2614804565b145b1561322b576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166132666040890160208a01614cb6565b67ffffffffffffffff16106132a7576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132b76040880160208901614cb6565b67ffffffffffffffff165f0361334b576132dd3660011981013560f01c90036014013590565b845114613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6261642061636365707465644f7574707574000000000000000000000000000060448201526064016118b6565b6134a8565b6001600160a01b038116631e24fdd5600161336c60408b0160208c01614cb6565b6133769190614cd1565b613386875f5b60200201516145b5565b6133908680614f65565b5f8181106133a0576133a0614bc3565b90506020028101906133b29190614fc9565b6133bf6020890189614f65565b5f8181106133cf576133cf614bc3565b90506020028101906133e19190614fc9565b6040518763ffffffff1660e01b815260040161340296959493929190614d22565b6020604051808303815f875af115801561341e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134429190614c84565b6134a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6261642061636365707465644f7574707574206b7a670000000000000000000060448201526064016118b6565b6134d360017f0000000000000000000000000000000000000000000000000000000000000000614cd1565b67ffffffffffffffff166134ed6040890160208a01614cb6565b67ffffffffffffffff160361357c5761353b816001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e06573d5f803e3d5ffd5b602085015103613577576040517f7412124e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613730565b6001600160a01b038116631e24fdd561359b60408a0160208b01614cb6565b856135a68680614f65565b60016135b28980614f65565b6135bd929150614dec565b8181106135cc576135cc614bc3565b90506020028101906135de9190614fc9565b6135eb6020890189614f65565b60016135fa60208c018c614f65565b613605929150614dec565b81811061361457613614614bc3565b90506020028101906136269190614fc9565b6040518763ffffffff1660e01b815260040161364796959493929190614d22565b6020604051808303815f875af1158015613663573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136879190614c84565b6136ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6261642070726f706f7365644f7574707574206b7a670000000000000000000060448201526064016118b6565b826136f985600161337c565b03613730576040517f7412124e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137df61374360408a0160208b0161502a565b61375060208b018b61502a565b86516020808901515f929161376b9060408f01908f01614cb6565b613776906001614dcb565b8c8c896001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137d89190614c0e565b6001613db2565b5050505050505050565b6040517fbb7ecb210000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bb7ecb2190602401602060405180830381865afa158015613866573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f39190614c69565b5f80600a54700100000000000000000000000000000000900460ff1660028111156138b7576138b7614804565b146138ee576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a545f906139079067ffffffffffffffff1684614dec565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821681111561394e576139498282614cd1565b610c59565b5f949350505050565b5f8060607f00000000000000000000000000000000000000000000000000000000000000009250306001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139de9190614c0e565b9150306001600160a01b031663609d33346040518163ffffffff1660e01b81526004015f60405180830381865afa158015613a1b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613a429190810190615045565b9050909192565b5f60025f60405160200161196391906150ed565b5f613a6a61100083615125565b92915050565b5f613a6a61100083615138565b5f60308214613a8a575f80fd5b7f01000000000000000000000000000000000000000000000000000000000000005f1b60088060028686604051613ac292919061514b565b602060405180830381855afa158015613add573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190613b009190614c0e565b901b901c179392505050565b5f80613b1f613b1a896145e0565b61460c565b90505f89828989898989604051602001613b3f979695949392919061515a565b60405160208183030381529060405290505f80600a6001600160a01b031683604051613b6b9190614db0565b5f604051808303815f865af19150503d805f8114613ba4576040519150601f19603f3d011682016040523d82523d5f602084013e613ba9565b606091505b506040805161100060208201527f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000191810191909152919350915060600160405160208183030381529060405280519060200120818051906020012014613c0d575f80fd5b509a9950505050505050505050565b5f8281526004602052604081205460ff166002811115613c3e57613c3e614804565b14613c75576040517f2c06a36400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260046020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836002811115613cbd57613cbd614804565b0217905550806002811115613cd457613cd4614804565b60405183907f2d4e0491b639866a8d4d57a9faeb546a13f536e3e916a20af0aa4ae33f7bfc2d905f90a3505f90815260026020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039590951694909417909355600390522080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055565b6040518181523660011981013560f01c90038284820160208401378260208301015f815260208101604052505092915050565b6040517fbb7ecb210000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063bb7ecb2190602401602060405180830381865afa158015613e33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e579190614c69565b6001600160a01b031603613e97576040517f9d3e7d2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8989613ed98d6001600160a01b0316636361506d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e06573d5f803e3d5ffd5b8a8a613f057f00000000000000000000000000000000000000000000000000000000000000008c614f39565b67ffffffffffffffff163660011981013560f01c90036054013560c01c613f2c9190614ca3565b60405160609690961b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020870152603486019490945260548501929092526074840152609483015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660b48201527f000000000000000000000000000000000000000000000000000000000000000060bc8201527f000000000000000000000000000000000000000000000000000000000000000060dc82015260fc0160405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ab750e7586867f00000000000000000000000000000000000000000000000000000000000000006002866040516140629190614db0565b602060405180830381855afa15801561407d573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906140a09190614c0e565b6040518563ffffffff1660e01b81526004016140bf9493929190615196565b5f6040518083038186803b1580156140d5575f80fd5b505afa1580156140e7573d5f803e3d5ffd5b505050506140f68a8484613c1c565b5050505050505050505050565b6040517fbb7ecb210000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063bb7ecb2190602401602060405180830381865afa158015614184573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141a89190614c69565b6040517f16112bcf0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906316112bcf90602401602060405180830381865afa15801561422a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061424e9190614c0e565b90508015806142bb5750836001600160a01b0316635654a3416040518163ffffffff1660e01b8152600401602060405180830381865afa158015614294573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142b89190614c0e565b81115b156142c957505f9392505050565b5060019392505050565b5f818152600260205260409020546001600160a01b0316806130325750506009545f908152600260205260409020546001600160a01b031690565b600a5467ffffffffffffffff1615614352576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163660011981013560f01c90033560601c14614403576040517fd36871fd0000000000000000000000000000000000000000000000000000000081523660011981013560f01c90033560601c60048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016118b6565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517f4d1975b400000000000000000000000000000000000000000000000000000000815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691634d1975b49160048083019260209291908290030181865afa1580156144b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144d79190614c0e565b6001557f000000000000000000000000000000000000000000000000000000000000000063ffffffff1663ffffffff166145937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633c9f397c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614566573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061458a91906151bc565b63ffffffff1690565b63ffffffff1614600a60116101000a81548160ff021916908315150217905550565b5f613a6a7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000183615138565b5f805b600c81101561460657600191821b63ffffffff83831b851616821c1791016145e3565b50919050565b60408051602081810181905291810182905260608101919091527f564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306608082015260a081018290527f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000160c08201525f90819060e00160405160208183030381529060405290505f8060056001600160a01b0316836040516146ac9190614db0565b5f604051808303815f865af19150503d805f81146146e5576040519150601f19603f3d011682016040523d82523d5f602084013e6146ea565b606091505b5091509150816146f8575f80fd5b614701816151d5565b95945050505050565b5f6020828403121561471a575f80fd5b5035919050565b67ffffffffffffffff81168114614736575f80fd5b50565b5f8083601f840112614749575f80fd5b50813567ffffffffffffffff811115614760575f80fd5b602083019150836020828501011115614777575f80fd5b9250929050565b5f805f805f8060808789031215614793575f80fd5b863561479e81614721565b955060208701359450604087013567ffffffffffffffff808211156147c1575f80fd5b6147cd8a838b01614739565b909650945060608901359150808211156147e5575f80fd5b506147f289828a01614739565b979a9699509497509295939492505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60038110614736577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810161487383614831565b91905290565b6001600160a01b0381168114614736575f80fd5b8060408101831015613a6a575f80fd5b5f805f805f805f60c0888a0312156148b3575f80fd5b87356148be81614879565b96506148cd8960208a0161488d565b955060608801359450608088013567ffffffffffffffff808211156148f0575f80fd5b6148fc8b838c01614739565b909650945060a08a0135915080821115614914575f80fd5b506149218a828b01614739565b989b979a50959850939692959293505050565b5f5b8381101561494e578181015183820152602001614936565b50505f910152565b5f815180845261496d816020860160208601614934565b601f01601f19169290920160200192915050565b602081525f6149936020830184614956565b9392505050565b5f805f805f608086880312156149ae575f80fd5b85356149b981614879565b945060208601356149c981614879565b935060408601356149d981614721565b9250606086013567ffffffffffffffff8111156149f4575f80fd5b614a0088828901614739565b969995985093965092949392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715614a6157614a61614a11565b60405290565b5f805f805f805f610120888a031215614a7e575f80fd5b614a88898961488d565b9650614a978960408a0161488d565b9550608088013567ffffffffffffffff80821115614ab3575f80fd5b614abf8b838c01614739565b9250809750508195508a60bf8b0112614ad6575f80fd5b614ade614a3e565b91508160e08b018c811115614af1575f80fd5b60a08c015b81811015614b0e578035855260209485019401614af6565b509095503593506101008a0135915080821115614b29575f80fd5b50614b368a828b0161488d565b91505092959891949750929550565b63ffffffff84168152826020820152606060408201525f6147016060830184614956565b805163ffffffff81168114613032575f80fd5b5f805f60608486031215614b8e575f80fd5b614b9784614b69565b92506020840151614ba781614721565b6040850151909250614bb881614879565b809150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215614c00575f80fd5b815160038110614993575f80fd5b5f60208284031215614c1e575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417613a6a57613a6a614c25565b5f60208284031215614c79575f80fd5b815161499381614879565b5f60208284031215614c94575f80fd5b81518015158114614993575f80fd5b80820180821115613a6a57613a6a614c25565b5f60208284031215614cc6575f80fd5b813561499381614721565b67ffffffffffffffff828116828216039080821115614cf257614cf2614c25565b5092915050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b67ffffffffffffffff87168152856020820152608060408201525f614d4b608083018688614cf9565b8281036060840152614d5e818587614cf9565b9998505050505050505050565b5f8154825f526020805f205f5b83811015614d9457815487529582019560019182019101614d78565b509495945050505050565b8281525f610c596020830184614d6b565b5f8251614dc1818460208701614934565b9190910192915050565b67ffffffffffffffff818116838216019080821115614cf257614cf2614c25565b81810381811115613a6a57613a6a614c25565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81614e3a57614e3a614c25565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b5f67ffffffffffffffff808316818103614e7c57614e7c614c25565b6001019392505050565b5f60208284031215614e96575f80fd5b815161499381614721565b5f8085851115614eaf575f80fd5b83861115614ebb575f80fd5b5050820193919092039150565b8284823760c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000169101908152600801919050565b5f8060408385031215614f12575f80fd5b8251614f1d81614879565b6020840151909250614f2e81614721565b809150509250929050565b67ffffffffffffffff818116838216028082169190828114614f5d57614f5d614c25565b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f98575f80fd5b83018035915067ffffffffffffffff821115614fb2575f80fd5b6020019150600581901b3603821315614777575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ffc575f80fd5b83018035915067ffffffffffffffff821115615016575f80fd5b602001915036819003821315614777575f80fd5b5f6020828403121561503a575f80fd5b813561499381614879565b5f60208284031215615055575f80fd5b815167ffffffffffffffff8082111561506c575f80fd5b818401915084601f83011261507f575f80fd5b81518181111561509157615091614a11565b604051601f8201601f19908116603f011681019083821181831017156150b9576150b9614a11565b816040528281528760208487010111156150d1575f80fd5b6150e2836020830160208801614934565b979650505050505050565b5f6149938284614d6b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82615133576151336150f8565b500490565b5f82615146576151466150f8565b500690565b818382375f9101908152919050565b878152866020820152856040820152838560608301375f848201606081015f815284868237505f93016060019283525090979650505050505050565b606081525f6151a9606083018688614cf9565b6020830194909452506040015292915050565b5f602082840312156151cc575f80fd5b61499382614b69565b80516020808301519190811015614606577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b1691905056fea26469706673582212200c782680fba067710ecedafac4a83e482dfb9dafb2880b81fc069c5daf73d20964736f6c634300081800330000000000000000000000008b573a93163a0e4eb8fd00afeefca544d714fb3700000000000000000000000000000000000000000000000000000000661833230000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000003f480