0 txs
6 calls
constructor
constructor(uint256 period, uint256 lockPeriod, uint256 limit, uint256 threshold)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
appliedLockPeriod
viewfunction appliedLockPeriod() view returns (bool)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
batched
viewfunction batched() view returns (bool)
BPS_DENOMINATOR
viewfunction BPS_DENOMINATOR() view returns (uint256)
calcFee
viewfunction calcFee(uint256 peerChainId, uint256 peerPoolId, address from, uint256 amountLD) view returns (tuple feeInfo)
convertRate
viewfunction convertRate() view returns (uint256)
currentPeriodAmount
viewfunction currentPeriodAmount() view returns (uint256)
currentPeriodEnd
viewfunction currentPeriodEnd() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEFAULT_ROUTER_ROLE
viewfunction DEFAULT_ROUTER_ROLE() view returns (bytes32)
defaultLPMode
viewfunction defaultLPMode() view returns (bool)
defaultSwapMode
viewfunction defaultSwapMode() view returns (bool)
deltaCredit
viewfunction deltaCredit() view returns (uint256)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
eqFeePool
viewfunction eqFeePool() view returns (uint256)
feeBalance
viewfunction feeBalance() view returns (uint256)
feeCalculator
viewfunction feeCalculator() view returns (address)
getPeerPoolInfo
viewfunction getPeerPoolInfo(uint256 peerChainId, uint256 peerPoolId) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
globalDecimals
viewfunction globalDecimals() view returns (uint8)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
LDToLP
viewfunction LDToLP(uint256 _amountLD) view returns (uint256)
LIMIT
viewfunction LIMIT() view returns (uint256)
localDecimals
viewfunction localDecimals() view returns (uint8)
LOCK_PERIOD
viewfunction LOCK_PERIOD() view returns (uint256)
lpDeltaBP
viewfunction lpDeltaBP() view returns (uint256)
LPToLD
viewfunction LPToLD(uint256 amountLP) view returns (uint256)
MAX_PEERS
viewfunction MAX_PEERS() view returns (uint256)
maxTotalDeposits
viewfunction maxTotalDeposits() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
peerPoolInfoIndexSeek
viewfunction peerPoolInfoIndexSeek(uint256 peerChainId, uint256 peerPoolId) view returns (uint256)
peerPoolInfos
viewfunction peerPoolInfos(uint256 index) view returns (tuple)
PERIOD
viewfunction PERIOD() view returns (uint256)
poolId
viewfunction poolId() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapDeltaBP
viewfunction swapDeltaBP() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
THRESHOLD
viewfunction THRESHOLD() view returns (uint256)
token
viewfunction token() view returns (address)
totalLiquidity
viewfunction totalLiquidity() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalWeight
viewfunction totalWeight() view returns (uint256)
transferStop
viewfunction transferStop() view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
activatePeerPool
nonpayablefunction activatePeerPool(uint256 peerChainId, uint256 peerPoolId)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
callDelta
nonpayablefunction callDelta(bool fullMode)
drawFee
nonpayablefunction drawFee(address to)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
handleRecvFailure
nonpayablefunction handleRecvFailure(uint256 peerChainId, uint256 peerPoolId, address, tuple feeInfo)
handleWithdrawConfirmFailure
nonpayablefunction handleWithdrawConfirmFailure(uint256 peerChainId, uint256 peerPoolId, address to, uint256 amountGD, uint256 amountToMintGD)
initialize
nonpayablefunction initialize(tuple p)
mint
nonpayablefunction mint(address to, uint256 amountLD) returns (uint256)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
recv
nonpayablefunction recv(uint256 peerChainId, uint256 peerPoolId, address to, tuple feeInfo, bool updateDelta) returns (uint256 amountLD, bool isTransferred)
registerPeerPool
nonpayablefunction registerPeerPool(uint256 peerChainId, uint256 peerPoolId, uint256 weight)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
resetFlowRateLimit
nonpayablefunction resetFlowRateLimit()
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
sendCredit
nonpayablefunction sendCredit(uint256 peerChainId, uint256 peerPoolId) returns (tuple creditInfo)
setDeltaParam
nonpayablefunction setDeltaParam(bool batched_, uint256 swapDeltaBP_, uint256 lpDeltaBP_, bool defaultSwapMode_, bool defaultLPMode_)
setFeeCalculator
nonpayablefunction setFeeCalculator(address _feeCalculator)
setMaxTotalDeposits
nonpayablefunction setMaxTotalDeposits(uint256 newMaxTotalDeposits)
setPeerPoolWeight
nonpayablefunction setPeerPoolWeight(uint256 peerChainId, uint256 peerPoolId, uint256 weight)
setTransferStop
nonpayablefunction setTransferStop(bool transferStop_)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transfer
nonpayablefunction transfer(uint256 peerChainId, uint256 peerPoolId, address from, uint256 amountLD, uint256 minAmountLD, bool newLiquidity) returns (tuple feeInfo)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
updateCredit
nonpayablefunction updateCredit(uint256 peerChainId, uint256 peerPoolId, tuple creditInfo)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawCheck
nonpayablefunction withdrawCheck(uint256 peerChainId, uint256 peerPoolId, uint256 amountGD) returns (uint256 amountSwap, uint256 amountMint)
withdrawConfirm
nonpayablefunction withdrawConfirm(uint256 peerChainId, uint256 peerPoolId, address to, uint256 amountGD, uint256 amountToMintGD, bool updateDelta) returns (bool isTransferred)
withdrawInstant
nonpayablefunction withdrawInstant(address from, uint256 amountLP, address to) returns (uint256 amountGD)
withdrawLocal
nonpayablefunction withdrawLocal(uint256 peerChainId, uint256 peerPoolId, address from, uint256 amountLP, bytes to) returns (uint256 amountGD)
withdrawRemote
nonpayablefunction withdrawRemote(uint256 peerChainId, uint256 peerPoolId, address from, uint256 amountLP)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Burn
event Burn(address from, uint256 amountLP, uint256 amountGD)
DrawFee
event DrawFee(address to, uint256 amountLD)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
Mint
event Mint(address to, uint256 amountLP, uint256 amountGD)
PeerPoolInfoUpdate
event PeerPoolInfoUpdate(uint256 peerChainId, uint256 peerPoolId, uint256 weight)
Recv
event Recv(address to, uint256 amountGD, uint256 protocolFee, uint256 eqFee)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SendCredit
event SendCredit(uint256 peerPoolId, uint256 credits, uint256 targetBalance)
SetDstFlowRateLimiter
event SetDstFlowRateLimiter(address dstFlowRateLimiter)
SetMaxTotalDeposits
event SetMaxTotalDeposits(uint256 maxTotalDepositsLD)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Transfer
event Transfer(uint256 peerChainId, uint256 peerPoolId, address from, uint256 amountGD, uint256 eqReward, uint256 eqFee, uint256 protocolFee, uint256 lpFee)
UpdateCredit
event UpdateCredit(uint256 peerChainId, uint256 peerPoolId, uint256 credits, uint256 targetBalance)
UpdateDeltaParam
event UpdateDeltaParam(bool batched, uint256 swapDeltaBP, uint256 lpDeltaBP, bool defaultSwapMode, bool defaultLPMode)
UpdateStopTransfer
event UpdateStopTransfer(bool stopTransfer)
Upgraded
event Upgraded(address indexed implementation)
WithdrawCheck
event WithdrawCheck(uint256 peerChainId, uint256 peerPoolId, uint256 amountLP, uint256 amountGD)
WithdrawConfirm
event WithdrawConfirm(uint256 peerChainId, uint256 peerPoolId, address to, uint256 amountGD, uint256 amountMintGD)
WithdrawInstant
event WithdrawInstant(address from, uint256 amountLP, uint256 amountGD, address to)
WithdrawLocal
event WithdrawLocal(uint256 peerChainId, uint256 peerPoolId, address from, uint256 amountLP, uint256 amountGD, bytes to)
WithdrawRemote
event WithdrawRemote(uint256 peerChainId, uint256 peerPoolId, address from, uint256 amountLP, uint256 amountLD)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
FailedCall
error FailedCall()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
TokiCannotCloseChannel
error TokiCannotCloseChannel()
TokiCannotTimeoutPacket
error TokiCannotTimeoutPacket()
TokiChannelNotFound
error TokiChannelNotFound(string portId, string channelId)
TokiContractNotAllowed
error TokiContractNotAllowed(string name, address addr)
TokiDepeg
error TokiDepeg(uint256 poolId)
TokiDstChainIdNotAccepted
error TokiDstChainIdNotAccepted(uint256 dstChainId)
TokiDstOuterGasShouldBeZero
error TokiDstOuterGasShouldBeZero()
TokiExceed
error TokiExceed(string name, uint256 value, uint256 limit)
TokiExceedAdd
error TokiExceedAdd(string name, uint256 current, uint256 add, uint256 limit)
TokiFailToRefund
error TokiFailToRefund()
TokiFallbackUnauthorized
error TokiFallbackUnauthorized(address caller)
TokiFlowRateLimitExceed
error TokiFlowRateLimitExceed(uint256 current, uint256 add, uint256 limit)
TokiInsufficientAmount
error TokiInsufficientAmount(string name, uint256 value, uint256 needed)
TokiInsufficientPoolLiquidity
error TokiInsufficientPoolLiquidity(uint256 value, uint256 needed)
TokiInvalidAppVersion
error TokiInvalidAppVersion(uint256 expected, uint256 actual)
TokiInvalidBalanceDeficitFeeZone
error TokiInvalidBalanceDeficitFeeZone()
TokiInvalidPacketType
error TokiInvalidPacketType(uint8)
TokiInvalidProposedVersion
error TokiInvalidProposedVersion(string version)
TokiInvalidRecipientBytes
error TokiInvalidRecipientBytes()
TokiInvalidRetryType
error TokiInvalidRetryType(uint8)
TokiInvalidSafeZoneRange
error TokiInvalidSafeZoneRange(uint256 min, uint256 max)
TokiMock
error TokiMock(string message)
TokiNativeTransferIsFailed
error TokiNativeTransferIsFailed(address to, uint256 value)
TokiNoFee
error TokiNoFee()
TokiNoPeerPoolInfo
error TokiNoPeerPoolInfo()
TokiNoPool
error TokiNoPool(uint256 poolId)
TokiNoRevertReceive
error TokiNoRevertReceive()
TokiNotEnoughNativeFee
error TokiNotEnoughNativeFee(uint256 value, uint256 limit)
TokiPeerPoolInfoNotFound
error TokiPeerPoolInfoNotFound(uint256 chainId, uint256 poolId)
TokiPeerPoolIsAlreadyActive
error TokiPeerPoolIsAlreadyActive(uint256 chainId, uint256 poolId)
TokiPeerPoolIsNotReady
error TokiPeerPoolIsNotReady(uint256 peerChainId, uint256 peerPoolId)
TokiPeerPoolIsRegistered
error TokiPeerPoolIsRegistered(uint256 chainId, uint256 poolId)
TokiPoolRecvIsFailed
error TokiPoolRecvIsFailed(uint256 poolId)
TokiPoolWithdrawConfirmIsFailed
error TokiPoolWithdrawConfirmIsFailed(uint256 poolId)
TokiPriceIsExpired
error TokiPriceIsExpired(uint256 updatedAt)
TokiPriceIsNotPositive
error TokiPriceIsNotPositive(int256 value)
TokiRequireOrderedChannel
error TokiRequireOrderedChannel()
TokiRetryExpired
error TokiRetryExpired(uint256 expiryBlock)
TokiSamePool
error TokiSamePool(uint256 poolId, address pool)
TokiSlippageTooHigh
error TokiSlippageTooHigh(uint256 amountGD, uint256 eqReward, uint256 eqFee, uint256 minAmountGD)
TokiTransferIsFailed
error TokiTransferIsFailed(address token, address to, uint256 value)
TokiTransferIsStop
error TokiTransferIsStop()
TokiUnregisteredChainId
error TokiUnregisteredChainId(string channel)
TokiUnregisteredPoolId
error TokiUnregisteredPoolId(uint256 poolId)
TokiZeroAddress
error TokiZeroAddress(string message)
TokiZeroAmount
error TokiZeroAmount(string message)
TokiZeroValue
error TokiZeroValue(string message)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x6101203461016257601f615f6d38819003918201601f19168301916001600160401b038311848410176101665780849260809460405283398101031261016257805190602081015160606040830151920151923060805260a05260c05260e052610100525f516020615f4d5f395f51905f525460ff8160401c16610153576002600160401b03196001600160401b038216016100fd575b604051615dd2908161017b8239608051818181611ca50152611d75015260a051818181610daf0152818161392a01526154c9015260c051818181612eb30152615355015260e051818181610e1b015261526c01526101005181818161181c01526152930152f35b6001600160401b0319166001600160401b039081175f516020615f4d5f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f610096565b63f92ee8a960e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630130c4d21461356457806301ffc9a71461350e57806306fdde0314613451578063095ea7b31461342b5780630f45684a14612725578063106e846b1461340057806310a470ab14612f43578063113ac8f614612f2857806315770f9214612eff57806318160ddd14612ed65780631820cabb14612e9c5780631e8e51da14612e7357806323b872dd14612d34578063248a9ca314612cfd57806327f9237614612ccf57806328f079c214612c9e5780632b3afdb01461279b5780632f2ff15d14612751578063313ce5671461272557806336448777146126fc5780633644e515146126e257806336568abe1461269e57806338898ca21461264a5780633dc69f2c146123d75780633e0dc34e1461239b5780633f668d6f1461234d5780633fc03c261461222857806340c10f1914611f6257806343469f3214611f115780634f1ef28614611d2657806351fe0e1814611cf157806352d1902d14611c8b5780635879445614611c62578063601c186114611b7f57806360b71d4e14611b5657806361b01b5d14611b1a578063641ffaa1146119c75780636780a3111461199657806370a082311461195257806372e30f6a1461186d578063754f56e21461183f578063785ffb37146118055780637ecebe00146117ae5780637fb652651461178557806384b0196e1461163357806388cb0df7146115175780638c66d04f146114c05780638cdc1f24146113b95780638d55de631461132f57806390c83e94146112c557806391d148541461126f57806392c883fb146110e957806395d89b4114610ff357806396c82e5714610fca57806399a22d6814610f995780639bb8111914610f705780639c3701a014610f505780639d3c38c514610ed0578063a217fddf14610eb6578063a9059cbb14610e85578063ad3cb1cc14610e3e578063af8214ef14610e04578063b00eb9fe14610dd2578063b4d1d79514610d98578063b6192d0b14610c09578063b81d85f014610b60578063c0dca06e146109d3578063c646b16614610931578063ca981909146108f7578063cdfed0ab146108bb578063d505accf14610765578063d547741f14610714578063dd62ed3e1461069b578063e065608b146104e7578063e1a45218146104cb578063e465eb9e146104a2578063e46e705814610473578063e5b15b52146103e8578063fc0c546a146103b65763feb56b1514610389575f80fd5b346103b2575f3660031901126103b25760205f516020615cdd5f395f51905f5254604051908152f35b5f80fd5b346103b2575f3660031901126103b25760206001600160a01b035f516020615d1d5f395f51905f525416604051908152f35b346103b25761046f61041361040e6103ff36614112565b906104086143b1565b506149bd565b614435565b6040519182918291909160e080610100830194805184526020810151602085015260408101516040850152606081015160608501526080810151608085015260a081015160a085015260c081015160c085015201511515910152565b0390f35b346103b2575f3660031901126103b257602060ff5f516020615afd5f395f51905f525460081c16604051908152f35b346103b2575f3660031901126103b25760205f516020615b3d5f395f51905f5254604051908152f35b346103b2575f3660031901126103b25760206040516127108152f35b346103b25760a03660031901126103b257610500613fea565b602435604435916064358015158091036103b257608435918215158093036103b25761052a614921565b612710841161065857612710851161061757907fdef0a5f359f70f4feaf27bbd47c7e476348ea79108e46990d5b73efbc885f0379460a094939215159360ff195f516020615c9d5f395f51905f52541660ff8616175f516020615c9d5f395f51905f5255807f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0955815f516020615c1d5f395f51905f52555f516020615c9d5f395f51905f525462ff00008560101b169061ff008560081b169062ffff00191617175f516020615c9d5f395f51905f52556040519485526020850152604084015260608301526080820152a1005b6040516338d06e1d60e01b815260606004820152600960648201526806c7044656c746142560bc1b608482015260248101869052612710604482015260a490fd5b6040516338d06e1d60e01b815260606004820152600b60648201526a07377617044656c746142560ac1b608482015260248101859052612710604482015260a490fd5b346103b25760403660031901126103b2576106b4613fa8565b6001600160a01b036106fe6106c7613fbe565b926001600160a01b03165f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260405f2090565b91165f52602052602060405f2054604051908152f35b346103b25760403660031901126103b257610763600435610733613fbe565b9061075e610759825f525f516020615c5d5f395f51905f52602052600160405f20015490565b614970565b61507a565b005b346103b25760e03660031901126103b25761077e613fa8565b610786613fbe565b604435906064359260843560ff811681036103b2578442116108a85761087e6108756001600160a01b039283851697885f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528b6040840152878a1660608401528a608084015260a083015260c082015260c0815261084360e08261408d565b51902061084e6157f6565b906040519161190160f01b83526002830152602282015260c43591604260a435922061585d565b909291926158df565b16848103610891575061076393506156b8565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b346103b2575f3660031901126103b25760207f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0954604051908152f35b346103b2575f3660031901126103b25760206040517f66d05ae646b1ee24e48a8708b8c0f6eade385a89cd689a1ed9121cb3ec9e21028152f35b346103b2577f5b1ee307451dd65aa45d1657a66752bab8925be9aad7c827865655c8c2fdac246109ce610963366140f8565b61096e939193614921565b8061097985856149bd565b6109a18261099c60025f516020615b9d5f395f51905f52549401938454906145d3565b6145c6565b5f516020615b9d5f395f51905f525555604051938493846040919493926060820195825260208201520152565b0390a1005b346103b25760206109e336613ff9565b6109f29592919594939461487d565b6109fa6148b2565b5f90610afa575b610a195f516020615cdd5f395f51905f5254836145e0565b600190468503610ae9575b81610ac0575b5015610aad57507fcf0b8bea497be617351b2c1a4243bd9e92167fdf778a43ebb66fb37160594a0f9394610a8f9160019660405195869586916080936001600160a01b0391979695929760a08501988552602085015216604083015260608201520152565b0390a15b5f5f516020615cfd5f395f51905f525d6040519015158152f35b945050505050610abb61545c565b610a93565b610ae39150866001600160a01b035f516020615d1d5f395f51905f5254166153d7565b88610a2a565b9050610af48161523c565b90610a24565b85151580610b4e575b610b27575b6005610b1485856149bd565b01610b208382546145d3565b9055610a01565b610b48610b425f516020615cdd5f395f51905f5254886145e0565b86615531565b50610b08565b506001600160a01b0385161515610b03565b346103b25760a03660031901126103b257610b79613fd4565b60843590610b8561487d565b610b8d6148b2565b81151580610bf7575b610bcd575b6005610bab6024356004356149bd565b01610bb960643582546145d3565b90555f5f516020615cfd5f395f51905f525d005b610be9610bef925f516020615cdd5f395f51905f5254906145e0565b90615531565b508080610b9b565b506001600160a01b0381161515610b96565b346103b257610c4360c0610c2d610c1f3661417a565b959261040894929194614494565b935f516020615cdd5f395f51905f5254906145f3565b927f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0b549060ff5f516020615afd5f395f51905f525416610c81614a5f565b5f516020615a7d5f395f51905f5254905f516020615cbd5f395f51905f52549260405195610cae87614038565b308752602087015260408601526060850152608084015260a08301526001600160a01b035f516020615bbd5f395f51905f52541691610d036040519687958694859463143273dd60e21b865260048601614514565b03915afa8015610d8d5761046f915f91610d5e575b506040519182918291909160a08060c083019480518452602081015160208501526040810151604085015260608101516060850152608081015160808501520151910152565b610d80915060c03d60c011610d86575b610d78818361408d565b8101906144c4565b82610d18565b503d610d6e565b6040513d5f823e3d90fd5b346103b2575f3660031901126103b25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103b2575f3660031901126103b25760206001600160a01b035f516020615bbd5f395f51905f525416604051908152f35b346103b2575f3660031901126103b25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103b2575f3660031901126103b25761046f604051610e5f60408261408d565b60058152640352e302e360dc1b6020820152604051918291602083526020830190613f84565b346103b25760403660031901126103b257610eab610ea1613fa8565b6024359033614de4565b602060405160018152f35b346103b2575f3660031901126103b25760206040515f8152f35b346103b25760203660031901126103b2577fc0aea4cb7421bc8d3cf83582abe451bd1705682eb83b02b88889940492aef5ca6020610f0c613fea565b610f14614921565b5f516020615d1d5f395f51905f52805460ff60a01b191691151560a090811b60ff60a01b169290921790819055604051911c60ff1615158152a1005b346103b2575f3660031901126103b257610f68614921565b6107636154c4565b346103b2575f3660031901126103b25760205f516020615cbd5f395f51905f5254604051908152f35b346103b2575f3660031901126103b257602060ff5f516020615c9d5f395f51905f525460081c166040519015158152f35b346103b2575f3660031901126103b25760205f516020615b9d5f395f51905f5254604051908152f35b346103b2575f3660031901126103b2576040515f5f516020615b1d5f395f51905f525461101f816141fd565b80845290600181169081156110c5575060011461105b575b61046f836110478185038261408d565b604051918291602083526020830190613f84565b5f516020615b1d5f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b8082106110ab57509091508101602001611047611037565b919260018160209254838588010152019101909291611093565b60ff191660208086019190915291151560051b840190910191506110479050611037565b346103b2576101403660031901126103b257600435611106613fd4565b90611110366140af565b91610124359081151582036103b25760409361112a61487d565b6111326148b2565b5f92611240575b80519261116461114f60808401958651906145c6565b5f516020615cdd5f395f51905f5254906145e0565b946001904603611231575b80611209575b156111f857507f82f23eb0ffa46ea98b1a7134447f74561cec3e194d0f1d06ffc35ce71ae80336916080916111b060019582519051906145c6565b9060606020820151910151916001600160a01b038951941684526020840152878301526060820152a15b5f5f516020615cfd5f395f51905f525d825191825215156020820152f35b9250505061120461545c565b6111da565b5061122c85846001600160a01b035f516020615d1d5f395f51905f5254166153d7565b611175565b5061123b8561523c565b61116f565b61124981615117565b60a0810151611268600561125f602435886149bd565b019182546145d3565b9055611139565b346103b25760403660031901126103b257611288613fbe565b6004355f525f516020615c5d5f395f51905f526020526001600160a01b0360405f2091165f52602052602060ff60405f2054166040519015158152f35b346103b25760203660031901126103b2576004356112e1614921565b7f0320c21101a3b92f1a57a1daef0827408be5f6cb7bb44fb426cc4152663e611d6020604051838152a17f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0d55005b346103b25760203660031901126103b2575f516020615b5d5f395f51905f525480156113855761137d61114f6020926113785f516020615a7d5f395f51905f52546004356145e0565b6145f3565b604051908152f35b604051634612b38f60e01b815260206004820152600b60248201526a746f74616c537570706c7960a81b6044820152606490fd5b346103b25760203660031901126103b2576113d2613fa8565b6113da614921565b6001600160a01b03811615611495575f516020615d5d5f395f51905f52549081156114865761141b610763925f516020615cdd5f395f51905f5254906145e0565b5f5f516020615d5d5f395f51905f5255604080516001600160a01b0384168152602081018390529192917f0a7a10dab02ee70c589a87e2b0d57484d85d029e381c3ca52387e25486a4c5389190a16001600160a01b035f516020615d1d5f395f51905f525416615202565b636e63c7c360e01b5f5260045ffd5b604051636bc37c5f60e11b8152602060048201526002602482015261746f60f01b6044820152606490fd5b346103b25760203660031901126103b2576001600160a01b036114e1613fa8565b6114e9614921565b166001600160a01b03195f516020615bbd5f395f51905f525416175f516020615bbd5f395f51905f52555f80f35b346103b25761152536614112565b906040519061153382614071565b5f825260208201905f825261154661487d565b61154e6148b2565b61155884826149bd565b90600160ff60078401541615150361161c57506040935f7f0aeafd14584f8a6bfe6b3846da893395e218188cb3ba5586a705848f7fbcb1ad926115c66115b15f516020615a7d5f395f51905f52546002840154906145e0565b5f516020615b9d5f395f51905f5254906145f3565b855260068101906115e16005835492838a52019182546145c6565b90555583518351865192835260208301919091526040820152606090a15f5f516020615cfd5f395f51905f525d825191518252516020820152f35b8490631c6768ad60e21b5f5260045260245260445ffd5b346103b2575f3660031901126103b2577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061175c575b15611717576116bb61167c614235565b611684614304565b60206116c960405192611697838561408d565b5f84525f368137604051958695600f60f81b875260e08588015260e0870190613f84565b908582036040870152613f84565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b82811061170057505050500390f35b8351855286955093810193928101926001016116f1565b60405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101541561166c565b346103b25760203660031901126103b2576107636117a1613fea565b6117a96148b2565b614b06565b346103b25760203660031901126103b2576001600160a01b036117cf613fa8565b165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b346103b2575f3660031901126103b25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103b2575f3660031901126103b257602060ff5f516020615bfd5f395f51905f5254166040519015158152f35b346103b25760803660031901126103b25760043560243560403660431901126103b2577fdbbc76676cb73b8d1c33378e0cdc88f364e4203cfa5b1e4c7d15b66b5cb97f0c916119356040516118c181614071565b6044358152602081019060643582526118d861487d565b6118e06148b2565b60046118ec86866149bd565b600381016118fd81548551906145c6565b9055019182549051928380920361194a575b505051604051948594859094939260609260808301968352602083015260408201520152565b0390a15f5f516020615cfd5f395f51905f525d005b55818761190f565b346103b25760203660031901126103b2576001600160a01b03611973613fa8565b165f525f516020615abd5f395f51905f52602052602060405f2054604051908152f35b346103b2575f3660031901126103b257602060ff5f516020615d1d5f395f51905f525460a01c166040519015158152f35b346103b2576119d53661417a565b6119e093919361487d565b6119e86148b2565b6001600160a01b03841615611aeb578381611a60611a2a611935947f5f8ecf683e1923224ca1e9b396be6a7a13e480a011e7645d641e7a7d3a2d0f0398614eb5565b5f516020615c9d5f395f51905f525460ff8116158015611aaa575b611a95575b505f516020615cdd5f395f51905f5254906145e0565b9160405195869586916080936001600160a01b0391979695929760a08501988552602085015216604083015260608201520152565b60ff611aa49160101c16614b06565b88611a4a565b505f516020615c7d5f395f51905f5254612710611ae45f516020615a7d5f395f51905f52545f516020615c1d5f395f51905f5254906145e0565b0410611a45565b604051636bc37c5f60e11b8152602060048083019190915260248201526366726f6d60e01b6044820152606490fd5b346103b2575f3660031901126103b25760207f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0d54604051908152f35b346103b2575f3660031901126103b25760205f516020615d5d5f395f51905f5254604051908152f35b346103b2576040611b8f366140f8565b611b9761487d565b611b9f6148b2565b6003611bab83856149bd565b01918254938483115f14611c2a578394505f611beb7f9d8bfb8a1a799d9f6f5e207b8c00c13b549b7f20c8421d1f94bc9bfe23a9019894955480966145d3565b9495555b855190815260208101919091526040810184905260608101839052608090a15f5f516020615cfd5f395f51905f525d82519182526020820152f35b92611c58837f9d8bfb8a1a799d9f6f5e207b8c00c13b549b7f20c8421d1f94bc9bfe23a901989493966145d3565b9055925f92611bef565b346103b2575f3660031901126103b25760205f516020615d3d5f395f51905f5254604051908152f35b346103b2575f3660031901126103b2576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611ce25760206040515f516020615bdd5f395f51905f528152f35b63703e46dd60e11b5f5260045ffd5b346103b25760203660031901126103b257602061137d611d215f516020615cdd5f395f51905f52546004356145f3565b61519a565b60403660031901126103b257611d3a613fa8565b60243567ffffffffffffffff81116103b257366023820112156103b257611d6b903690602481600401359101614144565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803014908115611eef575b50611ce257611dad614921565b6040516352d1902d60e01b81526001600160a01b0383169290602081600481875afa5f9181611ebb575b50611def5783634c9c8ce360e01b5f5260045260245ffd5b805f516020615bdd5f395f51905f52859203611ea95750813b15611e9757806001600160a01b03195f516020615bdd5f395f51905f525416175f516020615bdd5f395f51905f52557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611e7f575f8083602061076395519101845af4611e796153a8565b91615a02565b505034611e8857005b63b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b632a87526960e21b5f5260045260245ffd5b9091506020813d602011611ee7575b81611ed76020938361408d565b810103126103b257519085611dd7565b3d9150611eca565b90506001600160a01b035f516020615bdd5f395f51905f525416141583611da0565b346103b257611f1f36614112565b90611f28614921565b6007611f3483836149bd565b019182549160ff8316611f4d5760ff1983166001178455005b634e06b75f60e11b5f5260045260245260445ffd5b346103b25760403660031901126103b257611f7b613fa8565b602435611f8661487d565b611f8e6148b2565b611fb98161099c5f516020615a7d5f395f51905f52545f516020615cdd5f395f51905f5254906145e0565b7f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0d548082116121e35750505f516020615b9d5f395f51905f5254156121af575f516020615cdd5f395f51905f5254612010916145f3565b612028815f516020615c7d5f395f51905f52546145c6565b5f516020615c7d5f395f51905f525580915f516020615b5d5f395f51905f525480612183575b50612067825f516020615a7d5f395f51905f52546145c6565b5f516020615a7d5f395f51905f52556001600160a01b038116156121705782816120b46020957f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f9461574c565b6120de84604051938493846040919493926001600160a01b03606083019616825260208201520152565b0390a15f516020615c9d5f395f51905f525460ff811615801561212f575b61211a575b505f5f516020615cfd5f395f51905f525d604051908152f35b60ff6121299160101c16614b06565b82612101565b505f516020615c7d5f395f51905f52546127106121695f516020615a7d5f395f51905f52545f516020615c1d5f395f51905f5254906145e0565b04106120fc565b63ec442f0560e01b5f525f60045260245ffd5b6121a891935061219390836145e0565b5f516020615a7d5f395f51905f5254906145f3565b918361204e565b604051634612b38f60e01b815260206004820152600b60248201526a1d1bdd185b15d95a59da1d60aa1b6044820152606490fd5b60a49250604051916338d06e1d60e01b835260606004840152601060648401526f6d6178546f74616c4465706f7369747360801b608484015260248301526044820152fd5b346103b25760603660031901126103b257612241613fa8565b60243561224c613fd4565b61225461487d565b61225c6148b2565b816001600160a01b0384168015611aeb576001600160a01b037f285a08d85aaeb56c8b9d22b6877dffaed0cb5d07c1c14494aff61d9524746a12936080936020975f516020615c7d5f395f51905f5254976122b68961519a565b809111612343575b506122cc826122d392614eb5565b80986145d3565b5f516020615c7d5f395f51905f52556123146122fd5f516020615cdd5f395f51905f5254896145e0565b83855f516020615d1d5f395f51905f525416615202565b60405193845287840152856040840152166060820152a15f5f516020615cfd5f395f51905f525d604051908152f35b91506122cc6122be565b346103b25761235b36614112565b905f527f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0260205260405f20905f52602052602060405f2054604051908152f35b346103b2575f3660031901126103b25760207f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0b54604051908152f35b346103b2576123e5366140f8565b916123ee614921565b5f516020615c3d5f395f51905f525480606411156125ed575f5b81811061259c5750612428845f516020615b9d5f395f51905f52546145c6565b5f516020615b9d5f395f51905f5255815f527f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0260205260405f20835f5260205260405f20556040519261247a84614054565b8184526020840190838252604085019481865260608101905f825260808101915f835260a082015f815260c08301905f825260e08401945f86525f516020615c3d5f395f51905f525468010000000000000000811015612588578060016124f092015f516020615c3d5f395f51905f52556143ed565b949094612575577f5b1ee307451dd65aa45d1657a66752bab8925be9aad7c827865655c8c2fdac249b6109ce99600797518755516001870155516002860155516003850155516004840155516005830155516006820155019051151560ff80198354169116179055604051938493846040919493926060820195825260208201520152565b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b6125ae6125a8826143ed565b50614435565b848482511491826125df575b50506125c857600101612408565b505063b020eb6360e01b5f5260045260245260445ffd5b6020015114905084876125ba565b600181018091116126365760a490604051906338d06e1d60e01b82526060600483015260086064830152671419595c941bdbdb60c21b6084830152602482015260646044820152fd5b634e487b7160e01b5f52601160045260245ffd5b346103b2576101203660031901126103b257612664613fd4565b5060a0612670366140af565b61267861487d565b6126806148b2565b61268981615117565b0151610bb9600561125f6024356004356149bd565b346103b25760403660031901126103b2576126b7613fbe565b336001600160a01b038216036126d3576107639060043561507a565b63334bd91960e11b5f5260045ffd5b346103b2575f3660031901126103b257602061137d6157f6565b346103b2575f3660031901126103b25760205f516020615c1d5f395f51905f5254604051908152f35b346103b2575f3660031901126103b257602060ff5f516020615afd5f395f51905f525416604051908152f35b346103b25760403660031901126103b257610763600435612770613fbe565b90612796610759825f525f516020615c5d5f395f51905f52602052600160405f20015490565b6147d6565b346103b25760a03660031901126103b2576024356004356127ba613fd4565b916064359160843567ffffffffffffffff81116103b257366023820112156103b25780600401359067ffffffffffffffff82116103b25736602483830101116103b25761280561487d565b61280d6148b2565b6001600160a01b038616958615611aeb57600160ff600761282e88886149bd565b015416151503612c86578561284291614eb5565b9460ff5f516020615c9d5f395f51905f525416158015612c45575b6128ea575b918060247fc184e55db14c3f814948da0d3295ebf968287d110e7ebb55ea0f30a773fc1d3c96959360e09560209a60405198899788528c8801526040870152606086015288608086015260c060a08601528260c086015201848401375f828201840152601f01601f19168101030190a15f5f516020615cfd5f395f51905f525d604051908152f35b5f516020615c7d5f395f51905f5254965f88151580612c2e575b612911575b509650612862565b5f516020615c3d5f395f51905f52549061292a82614629565b5f5f5f516020615a7d5f395f51905f52545f516020615b9d5f395f51905f5254915b868110612bbd575050505f9b81155f14612a5a575050508080612a43575b6129d5575b50509260247fc184e55db14c3f814948da0d3295ebf968287d110e7ebb55ea0f30a773fc1d3c969593829360e0966129b860209c5b5f516020615c7d5f395f51905f52546145d3565b5f516020615c7d5f395f51905f5255935093955093959650612909565b8181101561296f576129e6816143ed565b50995f516020615c7d5f395f51905f525460028c0154612a05916145e0565b5f516020615b9d5f395f51905f5254612a1d916145f3565b9081612a28916145c6565b9a60060190815490612a39916145c6565b90556001016129d5565b505f516020615c7d5f395f51905f5254151561296a565b9080929391105f14612b2d575b838110612aa957505050509260247fc184e55db14c3f814948da0d3295ebf968287d110e7ebb55ea0f30a773fc1d3c969593829360e0966129b860209c6129a4565b80612ab660019285614af2565b51612ac2575b01612a67565b6006612b15612ad0836143ed565b509e612af986611378612ae3878b614af2565b515f516020615c7d5f395f51905f5254906145e0565b612b038589614af2565b52612b0e8488614af2565b51906145c6565b9d01612b268154612b0e8488614af2565b9055612abc565b50505f5b828110612b72575050509260247fc184e55db14c3f814948da0d3295ebf968287d110e7ebb55ea0f30a773fc1d3c969593829360e0966129b860209c6129a4565b80612b7f60019284614af2565b51612b8b575b01612b31565b6006612ba5612b99836143ed565b509d612b0e8487614af2565b9c01612bb68154612b0e8487614af2565b9055612b85565b612bc6816143ed565b50612bed612bdc856113786002850154876145e0565b9160066005820154910154906145c6565b90818111612c00575b505060010161294c565b94612c11612c2692600194976145d3565b612c1b8789614af2565b52612b0e8688614af2565b93905f612bf6565b505f516020615b9d5f395f51905f52541515612904565b505f516020615c7d5f395f51905f5254612710612c7f5f516020615a7d5f395f51905f52545f516020615c1d5f395f51905f5254906145e0565b041061285d565b505050631c6768ad60e21b5f5260045260245260445ffd5b346103b2575f3660031901126103b257602060ff5f516020615c9d5f395f51905f525460101c166040519015158152f35b346103b2575f3660031901126103b257602060ff5f516020615c9d5f395f51905f5254166040519015158152f35b346103b25760203660031901126103b257602061137d6004355f525f516020615c5d5f395f51905f52602052600160405f20015490565b346103b25760603660031901126103b257612d4d613fa8565b612d55613fbe565b60443590612d93836001600160a01b03165f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260405f2090565b6001600160a01b0333165f5260205260405f2054925f198403612dbb575b610eab9350614de4565b828410612e58576001600160a01b03811615612e45573315612e3257610eab93612e15826001600160a01b03165f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260405f2090565b6001600160a01b0333165f526020528360405f2091039055612db1565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b346103b2575f3660031901126103b25760205f516020615c7d5f395f51905f5254604051908152f35b346103b2575f3660031901126103b25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103b2575f3660031901126103b25760205f516020615b5d5f395f51905f5254604051908152f35b346103b2575f3660031901126103b25760205f516020615a7d5f395f51905f5254604051908152f35b346103b2575f3660031901126103b257602060405160648152f35b346103b257612f5136613ff9565b93929091612f5d614494565b50612f6661487d565b612f6e6148b2565b60ff5f516020615d1d5f395f51905f525460a01c166133f1576001600160a01b038216918215611aeb57612fa285886149bd565b93600160ff6007870154161515036133da575f516020615cdd5f395f51905f525496612fd9612fd189866145f3565b9889936145f3565b9360c07f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0b549460ff5f516020615afd5f395f51905f5254169561301a614a5f565b5f516020615a7d5f395f51905f5254905f516020615cbd5f395f51905f5254986040519361304785614038565b30855260208501526040840152606083015260808201528660a0820152896001600160a01b035f516020615bbd5f395f51905f5254169161309e6040519e8f958694859463143273dd60e21b865260048601614514565b03915afa988915610d8d575f996133b9575b5088511561334f575060808801926130c98451846145c6565b94806130db60608c01978851906145d3565b1061331d57508351806132fe575b505060408801956131066130fe8851856145d3565b8551906145c6565b600360a08b019282845201918254918083106132e857509261010098959261315961046f9d9996937f9c7519dcf6aef530f7209189ddd559038a69f8bb53f818b7fa76c67379aa6b2c9c999651906145d3565b9055156132ac5761317b613183915f516020615c7d5f395f51905f52546145c6565b8251906145c6565b5f516020615c7d5f395f51905f52555b5f516020615c9d5f395f51905f525460ff8116158015613257575b613242575b508851905191519260208a0151945195604051978852602088015260408701526060860152608085015260a084015260c083015260e0820152a15f5f516020615cfd5f395f51905f525d6040519182918291909160a08060c083019480518452602081015160208501526040810151604085015260608101516060850152608081015160808501520151910152565b60ff6132519160081c16614b06565b8a6131b3565b505f516020615c7d5f395f51905f52546127106132a45f516020615a7d5f395f51905f52547f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0954906145e0565b0411156131ae565b508051806132bb575b50613193565b6132d3905f516020615c7d5f395f51905f52546145c6565b5f516020615c7d5f395f51905f52558a6132b5565b8263c8a198d960e01b5f5260045260245260445ffd5b613307916145d3565b5f516020615cbd5f395f51905f525589806130e9565b8451865160405163463fc77f60e11b815260048101879052602481019290925260448201526064810191909152608490fd5b61337189604061336860608301516020840151906145c6565b910151906145c6565b90600182018092116126365760a49160405191631606f63960e21b8352606060048401526008606484015267185b5bdd5b9d131160c21b608484015260248301526044820152fd5b6133d391995060c03d60c011610d8657610d78818361408d565b978a6130b0565b8588631c6768ad60e21b5f5260045260245260445ffd5b6331ad2c0f60e11b5f5260045ffd5b346103b25760203660031901126103b2576134196143b1565b5061046f6104136125a86004356143ed565b346103b25760403660031901126103b257610eab613447613fa8565b60243590336156b8565b346103b2575f3660031901126103b2576040515f5f516020615a9d5f395f51905f525461347d816141fd565b80845290600181169081156110c557506001146134a45761046f836110478185038261408d565b5f516020615a9d5f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106134f457509091508101602001611047611037565b9192600181602092548385880101520191019092916134dc565b346103b25760203660031901126103b25760043563ffffffff60e01b81168091036103b257602090637965db0b60e01b8114908115613553575b506040519015158152f35b6301ffc9a760e01b14905082613548565b346103b25760203660031901126103b25760043567ffffffffffffffff81116103b257806004019061014060031982360301126103b2575f516020615d7d5f395f51905f52549160ff8360401c16159267ffffffffffffffff811680159081613f7c575b6001149081613f72575b159081613f69575b50613f5a5767ffffffffffffffff1981166001175f516020615d7d5f395f51905f525583613f2e575b5061363661361182806141a8565b61362e61362460248795949501866141a8565b9490923691614144565b923691614144565b9061363f61568d565b61364761568d565b80519067ffffffffffffffff82116125885781906136725f516020615a9d5f395f51905f52546141fd565b601f8111613eb4575b50602090601f8311600114613e36575f92613e2b575b50508160011b915f199060031b1c1916175f516020615a9d5f395f51905f52555b80519067ffffffffffffffff8211612588576136db5f516020615b1d5f395f51905f52546141fd565b601f8111613dbc575b50602090601f8311600114613d38579180613733949261372c945f92613d2d575b50508160011b915f199060031b1c1916175f516020615b1d5f395f51905f52555b806141a8565b3691614144565b9161373c61568d565b60409182519361374c848661408d565b60018552603160f81b602086015261376261568d565b80519067ffffffffffffffff821161258857819061378d5f516020615add5f395f51905f52546141fd565b601f8111613cb3575b50602090601f8311600114613c35575f92613c2a575b50508160011b915f199060031b1c1916175f516020615add5f395f51905f52555b835167ffffffffffffffff8111612588576137f55f516020615b7d5f395f51905f52546141fd565b601f8111613bbb575b50602094601f8211600114613b40579481929394955f92613b35575b50508160011b915f199060031b1c1916175f516020615b7d5f395f51905f52555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015561388961568d565b61389161568d565b6138fb6138a0608483016141db565b60ff806138af60a486016141db565b926138b861568d565b6138c061568d565b16918261ff005f516020615afd5f395f51905f52549260081b169161ffff19161717805f516020615afd5f395f51905f525560081c166145d3565b604d811161263657600a0a5f516020615cdd5f395f51905f525561391d61568d565b61392561568d565b61394f7f0000000000000000000000000000000000000000000000000000000000000000436145c6565b5f516020615d3d5f395f51905f525561397261396d60e483016141e9565b61465b565b5061398861398361010483016141e9565b61470a565b5060448101357f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0b55606481016001600160a01b036139c5826141e9565b1615613b085760c48201906001600160a01b036139e1836141e9565b1615613ad357613a2961012493926001600160a01b03613a0181946141e9565b1683195f516020615d1d5f395f51905f525416175f516020615d1d5f395f51905f52556141e9565b166001600160a01b03195f516020615bbd5f395f51905f525416175f516020615bbd5f395f51905f525501357f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0d55613a7d57005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29168ff0000000000000000195f516020615d7d5f395f51905f5254165f516020615d7d5f395f51905f52555160018152a1005b8451636bc37c5f60e11b815260206004820152600d60248201526c3332b2a1b0b631bab630ba37b960991b6044820152606490fd5b8351636bc37c5f60e11b81526020600482015260056024820152643a37b5b2b760d91b6044820152606490fd5b01519050858061381a565b601f198216955f516020615b7d5f395f51905f525f52805f20915f5b888110613ba357508360019596979810613b8b575b505050811b015f516020615b7d5f395f51905f525561383b565b01515f1960f88460031b161c19169055858080613b71565b91926020600181928685015181550194019201613b5c565b5f516020615b7d5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c81019160208410613c20575b601f0160051c01905b818110613c1557506137fe565b5f8155600101613c08565b9091508190613bff565b0151905086806137ac565b5f516020615add5f395f51905f525f9081528281209350601f198516905b818110613c9b5750908460019594939210613c83575b505050811b015f516020615add5f395f51905f52556137cd565b01515f1960f88460031b161c19169055868080613c69565b92936020600181928786015181550195019301613c53565b5f516020615add5f395f51905f525f529091507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f840160051c81019160208510613d23575b90601f859493920160051c01905b818110613d155750613796565b5f8155849350600101613d08565b9091508190613cfa565b015190508780613705565b90601f198316915f516020615b1d5f395f51905f525f52815f20925f5b818110613da4575092600192859261372c96613733989610613d8c575b505050811b015f516020615b1d5f395f51905f5255613726565b01515f1960f88460031b161c19169055878080613d72565b92936020600181928786015181550195019301613d55565b5f516020615b1d5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510613e21575b601f0160051c01905b818110613e1657506136e4565b5f8155600101613e09565b9091508190613e00565b015190508680613691565b5f516020615a9d5f395f51905f525f9081528281209350601f198516905b818110613e9c5750908460019594939210613e84575b505050811b015f516020615a9d5f395f51905f52556136b2565b01515f1960f88460031b161c19169055868080613e6a565b92936020600181928786015181550195019301613e54565b5f516020615a9d5f395f51905f525f529091507f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c81019160208510613f24575b90601f859493920160051c01905b818110613f16575061367b565b5f8155849350600101613f09565b9091508190613efb565b68ffffffffffffffffff191668010000000000000001175f516020615d7d5f395f51905f525583613603565b63f92ee8a960e01b5f5260045ffd5b905015856135da565b303b1591506135d2565b8591506135c8565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036103b257565b602435906001600160a01b03821682036103b257565b604435906001600160a01b03821682036103b257565b6004359081151582036103b257565b60c09060031901126103b25760043590602435906044356001600160a01b03811681036103b25790606435906084359060a43580151581036103b25790565b60c0810190811067ffffffffffffffff82111761258857604052565b610100810190811067ffffffffffffffff82111761258857604052565b6040810190811067ffffffffffffffff82111761258857604052565b90601f8019910116810190811067ffffffffffffffff82111761258857604052565b60c09060631901126103b257604051906140c882614038565b6064358252608435602083015260a435604083015260c435606083015260e43560808301526101043560a0830152565b60609060031901126103b257600435906024359060443590565b60409060031901126103b2576004359060243590565b67ffffffffffffffff811161258857601f01601f191660200190565b92919261415082614128565b9161415e604051938461408d565b8294818452818301116103b2578281602093845f960137010152565b60809060031901126103b25760043590602435906044356001600160a01b03811681036103b2579060643590565b903590601e19813603018212156103b2570180359067ffffffffffffffff82116103b2576020019181360383136103b257565b3560ff811681036103b25790565b356001600160a01b03811681036103b25790565b90600182811c9216801561422b575b602083101461421757565b634e487b7160e01b5f52602260045260245ffd5b91607f169161420c565b604051905f825f516020615add5f395f51905f525491614254836141fd565b80835292600181169081156142e5575060011461427a575b6142789250038361408d565b565b505f516020615add5f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106142c95750509060206142789282010161426c565b60209193508060019154838589010152019101909184926142b1565b6020925061427894915060ff191682840152151560051b82010161426c565b604051905f825f516020615b7d5f395f51905f525491614323836141fd565b80835292600181169081156142e55750600114614346576142789250038361408d565b505f516020615b7d5f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106143955750509060206142789282010161426c565b602091935080600191548385890101520191019091849261437d565b604051906143be82614054565b5f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b5f516020615c3d5f395f51905f5254811015614421575f516020615c3d5f395f51905f525f5260205f209060031b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405161444281614054565b60e060ff600783958054855260018101546020860152600281015460408601526003810154606086015260048101546080860152600581015460a0860152600681015460c08601520154161515910152565b604051906144a182614038565b5f60a0838281528260208201528260408201528260608201528260808201520152565b908160c09103126103b25760a0604051916144de83614038565b8051835260208101516020840152604081015160408401526060810151606084015260808101516080840152015160a082015290565b909493926001600160a01b039060ff60076101e09560a061020087019a868151168852602081015160208901528460408201511660408901526060810151606089015260808101516080890152015160a0870152805460c0870152600181015460e08701526002810154610100870152600381015461012087015260048101546101408701526005810154610160870152600681015461018087015201541615156101a0840152166101c08201520152565b9190820180921161263657565b9190820391821161263657565b8181029291811591840414171561263657565b81156145fd570490565b634e487b7160e01b5f52601260045260245ffd5b67ffffffffffffffff81116125885760051b60200190565b9061463382614611565b614640604051918261408d565b8281528092614651601f1991614611565b0190602036910137565b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16614705576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b6001600160a01b0381165f9081527fb99f74ed0a18e51a0abeabf20177563f97170d9a304aaf2f87e619c498908538602052604090205460ff16614705576001600160a01b03165f8181527fb99f74ed0a18e51a0abeabf20177563f97170d9a304aaf2f87e619c49890853860205260408120805460ff191660011790553391907f66d05ae646b1ee24e48a8708b8c0f6eade385a89cd689a1ed9121cb3ec9e2102907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b805f525f516020615c5d5f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f205416155f1461487757805f525f516020615c5d5f395f51905f5260205260405f206001600160a01b0383165f5260205260405f20600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b5f516020615cfd5f395f51905f525c6148a35760015f516020615cfd5f395f51905f525d565b633ee5aeb560e01b5f5260045ffd5b335f9081527fb99f74ed0a18e51a0abeabf20177563f97170d9a304aaf2f87e619c498908538602052604090205460ff16156148ea57565b63e2517d3f60e01b5f52336004527f66d05ae646b1ee24e48a8708b8c0f6eade385a89cd689a1ed9121cb3ec9e210260245260445ffd5b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff161561495957565b63e2517d3f60e01b5f52336004525f60245260445ffd5b805f525f516020615c5d5f395f51905f5260205260405f206001600160a01b0333165f5260205260ff60405f205416156149a75750565b63e2517d3f60e01b5f523360045260245260445ffd5b91905f516020615c3d5f395f51905f525415614a5057825f527f98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0260205260405f20815f52602052614a1160405f20546143ed565b509283828282541491821592614a41575b5050614a2c575050565b6310de8c5160e31b5f5260045260245260445ffd5b6001015414159050825f614a22565b634d6af2e760e11b5f5260045ffd5b602460206001600160a01b035f516020615d1d5f395f51905f525416604051928380926370a0823160e01b82523060048301525afa8015610d8d575f90614abe575b614abb91505f516020615cdd5f395f51905f5254906145f3565b90565b506020813d602011614aea575b81614ad86020938361408d565b810103126103b257614abb9051614aa1565b3d9150614acb565b80518210156144215760209160051b010190565b5f516020615c7d5f395f51905f52549081151580614dcd575b614b27575050565b5f516020615c3d5f395f51905f525490614b4082614629565b5f5f5f516020615a7d5f395f51905f52545f516020615b9d5f395f51905f5254915b868110614d82575050505f9481155f14614c235750505080614c0c575b614bae575b50614b9d905f516020615c7d5f395f51905f52546145d3565b5f516020615c7d5f395f51905f5255565b5f5b818110614bbd5750614b84565b80614bc96001926143ed565b5093614c046006614bfa614bf36115b15f516020615c7d5f395f51905f525460028b0154906145e0565b80946145c6565b96019182546145c6565b905501614bb0565b505f516020615c7d5f395f51905f52541515614b7f565b9080929391105f14614c9857505f5b838110614c465750505050614b9d906129a4565b80614c5360019285614af2565b51614c5f575b01614c32565b6006614c80614c6d836143ed565b5097612af986611378612ae3878b614af2565b9601614c918154612b0e8488614af2565b9055614c59565b9294939215614d1d57614cb9905f516020615c7d5f395f51905f52546145d3565b5f5b858110614cd057505050614b9d9192506129a4565b80614cdc6001926143ed565b5094614d156006614d0b614bf3614cf3868a614af2565b51614d056115b160028d01548b6145e0565b906145c6565b97019182546145c6565b905501614cbb565b505f939192935b828110614d3757505050614b9d906129a4565b80614d4460019284614af2565b51614d50575b01614d24565b6006614d6a614d5e836143ed565b5096612b0e8487614af2565b9501614d7b8154612b0e8487614af2565b9055614d4a565b614d8b816143ed565b50614da1612bdc856113786002850154876145e0565b90818111614db4575b5050600101614b62565b94612c11614dc592600194976145d3565b93905f614daa565b505f516020615b9d5f395f51905f52541515614b1f565b6001600160a01b0316908115614ea2576001600160a01b031691821561217057815f525f516020615abd5f395f51905f5260205260405f2054818110614e8957817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f516020615abd5f395f51905f5284520360405f2055845f525f516020615abd5f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b905f516020615b5d5f395f51905f5254918215611385576001600160a01b038116805f525f516020615abd5f395f51905f5260205260405f20548381106150285750614f1e614f175f516020615a7d5f395f51905f52549561137887876145e0565b80956145d3565b5f516020615a7d5f395f51905f52558015614ea257805f525f516020615abd5f395f51905f5260205260405f205483811061500e5781845f927f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a96959484525f516020615abd5f395f51905f52602052036040832055835f516020615b5d5f395f51905f5254035f516020615b5d5f395f51905f52557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020604051868152a361500884604051938493846040919493926001600160a01b03606083019616825260208201520152565b0390a190565b915063391434e360e21b5f5260045260245260445260645ffd5b8360a491604051916338d06e1d60e01b835260606004840152601560648401527f506f6f6c2e5f6275726e4c502e616d6f756e744c500000000000000000000000608484015260248301526044820152fd5b805f525f516020615c5d5f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f2054165f1461487757805f525f516020615c5d5f395f51905f5260205260405f206001600160a01b0383165f5260205260405f2060ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b60206151899161513960408201515f516020615a7d5f395f51905f52546145c6565b5f516020615a7d5f395f51905f525561516460608201515f516020615cbd5f395f51905f52546145c6565b5f516020615cbd5f395f51905f525501515f516020615d5d5f395f51905f52546145c6565b5f516020615d5d5f395f51905f5255565b5f516020615a7d5f395f51905f525480156151cb57611378614abb925f516020615b5d5f395f51905f5254906145e0565b604051634612b38f60e01b815260206004820152600e60248201526d746f74616c4c697175696469747960901b6044820152606490fd5b61520d8383836153d7565b1561521757505050565b906001600160a01b0380926387abb3dd60e01b5f52166004521660245260445260645ffd5b5f516020615d3d5f395f51905f5254431161539b575b61526a815f516020615b3d5f395f51905f52546145c6565b7f00000000000000000000000000000000000000000000000000000000000000001061530b57807f0000000000000000000000000000000000000000000000000000000000000000105f146152f557806152e1915f516020615a5d5f395f51905f52555f516020615b3d5f395f51905f52546145c6565b5f516020615b3d5f395f51905f5255600190565b505f5f516020615a5d5f395f51905f5255600190565b505f5f516020615a5d5f395f51905f52555f516020615bfd5f395f51905f525460ff81161561533957505f90565b60019060ff1916175f516020615bfd5f395f51905f52556153887f00000000000000000000000000000000000000000000000000000000000000005f516020615d3d5f395f51905f52546145c6565b5f516020615d3d5f395f51905f52555f90565b6153a36154c4565b615252565b3d156153d2573d906153b982614128565b916153c7604051938461408d565b82523d5f602084013e565b606090565b60405163a9059cbb60e01b602082019081526001600160a01b039390931660248201526044808201949094529283525f92839290839061541860648261408d565b51925af16154246153a8565b8180615452575b615433575090565b90506020818051810103126103b2576020015180151581036103b25790565b508051151561542b565b5f516020615b3d5f395f51905f52545f516020615a5d5f395f51905f5254808210156154a75750505f5f516020615b3d5f395f51905f52555b5f5f516020615a5d5f395f51905f5255565b6154b0916145d3565b5f516020615b3d5f395f51905f5255615495565b6154ee7f0000000000000000000000000000000000000000000000000000000000000000436145c6565b5f516020615d3d5f395f51905f52555f5f516020615b3d5f395f51905f525560ff195f516020615bfd5f395f51905f5254165f516020615bfd5f395f51905f5255565b91905f516020615b9d5f395f51905f5254156121af575f516020615cdd5f395f51905f525461555f916145f3565b91825f516020615b5d5f395f51905f525480615678575b5061558f845f516020615a7d5f395f51905f52546145c6565b5f516020615a7d5f395f51905f52556001600160a01b0382161561217057816155d9827f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f9461574c565b61560385604051938493846040919493926001600160a01b03606083019616825260208201520152565b0390a15f516020615c9d5f395f51905f525460ff8116158015615637575b6156285750565b60ff6142789160101c16614b06565b505f516020615c7d5f395f51905f52546127106156715f516020615a7d5f395f51905f52545f516020615c1d5f395f51905f5254906145e0565b0410615621565b615687915061219390856145e0565b5f615576565b60ff5f516020615d7d5f395f51905f525460401c16156156a957565b631afcd79f60e31b5f5260045ffd5b916001600160a01b038316918215612e45576001600160a01b0316928315612e32577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916157386020926001600160a01b03165f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260405f2090565b855f5282528060405f2055604051908152a3565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206001600160a01b035f93615791865f516020615b5d5f395f51905f52546145c6565b5f516020615b5d5f395f51905f52551693841584146157d457805f516020615b5d5f395f51905f5254035f516020615b5d5f395f51905f52555b604051908152a3565b8484525f516020615abd5f395f51905f528252604084208181540190556157cb565b6157fe615953565b6158066159bd565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261585760c08261408d565b51902090565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116158d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610d8d575f516001600160a01b038116156158ca57905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561593f57806158f1575050565b600181036159085763f645eedf60e01b5f5260045ffd5b60028103615923575063fce698f760e01b5f5260045260245ffd5b60031461592d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b61595b614235565b805190811561596b576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156159985790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6159c5614304565b80519081156159d5576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156159985790565b90615a265750805115615a1757805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580615a53575b615a37575090565b6001600160a01b0390639996b31560e01b5f521660045260245ffd5b50803b15615a2f56fe0ee2d9de8392a8f17ff2bb7a24b72fd27e2cf4ac5cd7fd56e5bf7bdb439eb00398b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102363bd9d3ac01b05edede66fbb9c4f73d99f1481666c51eee8df34d23a61f480052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace040ee2d9de8392a8f17ff2bb7a24b72fd27e2cf4ac5cd7fd56e5bf7bdb439eb00152c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10398b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0498b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc0ee2d9de8392a8f17ff2bb7a24b72fd27e2cf4ac5cd7fd56e5bf7bdb439eb00298b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0a98b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0102dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680098b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0598b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0698b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea08363bd9d3ac01b05edede66fbb9c4f73d99f1481666c51eee8df34d23a61f48019b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0098b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea0c0ee2d9de8392a8f17ff2bb7a24b72fd27e2cf4ac5cd7fd56e5bf7bdb439eb00098b6721f87b10fba9510649effb5cccfd7d04ba1bf6c44593ef8229732a7ea07f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209f166eb1fed63155713e7cca6393a74e74b1551d5dd9ad4dddda129d4b4d38aa64736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000001fa400000000000000000000000000000000000000000000000015af1d78b58c400000000000000000000000000000000000000000000000000003782dace9d900000